首页 文章

带有HAL库的STM32F4-Discovery(STM32F429ZIT6)上的RS232(UART)?

提问于
浏览
4

Background

这是我的一些背景知识,这样你的家伙就可以知道我拥有或者没有相关知识 . 我完全是这种嵌入式系统的新手 . 我对电子产品一无所知,我是一个纯粹的软件人 .

我唯一的嵌入式系统经验是Raspberry Pi,它与STM32F4 Discovery完全不同 .

我可以使用Raspberry Pi上的标准Linux C库实现UART读/写编程,该库连接到带有USB转RS232适配器和电压转换器IC的PC .

My Device and development environment

  • 带STM32F429ZIT6 MCU的STM32F429I-DISCO板

  • USB-to-RS232电缆和电压转换器IC,在Raspberry Pi上运行良好 .

  • Keil uVision 5 IDE .

What I would like to achieve

我想在STM32F429 Discovery板上实现一个可以向/从PC发送/接收消息的编程 . (例如,将字符串发送到PC . 当从PC接收到字符串时,点亮板上的LED)

What I have done right now

现在我已经设置了我的Keil uVision IDE,并且可以编译/运行闪烁LED示例,我也可以编辑该示例以按照我希望的方式控制LED . (例如,按下用户按钮时打开LED,释放按钮时将其关闭)

所以LED部件已经完成了,缺少它如何使用RS232电缆与STM32F4 Discovery板进行通信 .

My Question

  • 首先,我想知道我是否正确理解了该板的PIN定义 . 根据datasheet,我应该将DB9上的TX引脚连接到PD2(UART5_RX),将DB9上的RX引脚连接到PC12(UART5_TX),将DB9上的VCC引脚连接到3.3V,将DB9上的GND连接到GND . 这个连接是否正确?

  • 是否有关于如何在最新版本的Keil uVision上使用新HAL库的UART的示例代码?我在网上搜索过,但大多数示例代码或tutorial正在使用一个名为 RCC_AHB1PeriphClockCmd 的函数,它似乎不存在于来自Keil uVision的新HAL库中 .

Update

  • 我的USB转串口适配器为 067b:2303 Prolific Technology, Inc. PL2303 Serial Port ,并附有电平转换器IC . 看起来像这样:
    enter image description here

  • 当连接到Raspberry Pi时,我跟着这个instruction,所以IC上的VCC / GND连接到Raspberry Pi上的3.3V / GND,我不确定是否需要 .

  • 由"HAL"库,我的意思是这个 stm32f4xx_hal_usart.c 文件,根据许可声明中的评论,似乎来自意法半导体 . 虽然这个文件中有一些指令,但's still quite hard for me to figure out how to use this driver. For example, I can'告诉了 Enable USARTx interface clockEnable the clock for USART GPIOs 之间的区别,我不知道如何实现这些功能 . 因此,如果有一个示例代码,那将是一个很大的帮助,因为我可以将它与这些指令进行比较 .

enter image description here

enter image description here

1 回答

  • 5

    我已将Code for this answer推送到以下github地址 .

    代码很简单,回答问题,主要由STM-Cube生成 . .ioc文件也可供您修改 .

    有许多其他外围设备可供使用,但尚未经过测试,包括

    USB VCport 
    Timers set for RC hobby servos, just change pulse width 500-1500
    ADC  in DMA mode
    SPI  for flash etc
    I2C  for port expansion or whatever
    

    我分担了OP花了很多天,几周和几个月的努力让这些东西在新老库上运行的挫败感 . 在2016年 Finally 似乎有一些来自ST的亮点,我可以继续为这些伟大的电路板做真正的应用程序 .

    实际上,在执行此任务时,我必须在其正常工作之前重新安装我的多维数据集及其所有库,这可能会导致其他人的痛苦 .

    我将为这个“模板”添加LCD和触摸屏,以制作一个很棒的小“机器人” .

    我通常将蓝牙模块连接到其中一个UARTS并通过那里进行调试 .

    Andy Brown Andy Brown为一些ST提供了一些很棒的C库 . 它们似乎基于StdPeripheral库并需要更新,因此我们可以在新(和旧)设备上通过Cube和HAL使用它们 . 作为一个社区,我们可以更有效地做到这一点任何想法和接受者?

    玩得开心 .


    The canonical Solution

    Update your Cube and HAL libraries to the latest
    Generate a cube project
    Setup all your peripherals in the dialogs
    Generate code
    Compile
    Add your application
    Test  & Debug
    Optimise
    Release
    

    您只需要注意不同系列上的类似外围设备存在不一致之处,例如: F0上的ADC与F1和F4不同 . F3可能具有16位ADC .


    你可能正在做除RTFM之外的所有事情 . (阅读手册中的Fineprint)

    除非您想要与UART作斗争,否则建议您使用标准USB电缆实施Virtual Comport演示 . 让ST成为设备 .

    获取STCube的副本,查看项目/外围设备目录中的USB和Virtual comport . HAL库是相同的,也有此代码 .

    在任何Discovery板上工作时,启动STM32 Cube(free from ST)的副本,然后在那里创建配置 . 它向您展示了什么是使用的,什么是免费的,一个很棒的工具,并将USB设置为奖励 .

    然后使用代码生成器为KEIL项目创建一个框架 . 编译,运行添加您的应用程序代码和:-)

    你可能想看看这里Embitz.org他们有一个很好的IDE甚至更好的F429iDisco示例或ST AC6 IDEST page更多例子 . 这些IDE没有代码大小限制,您将在此设备上使用LCD,触摸等操作 .


    The Rest of the Answer

    不幸的是,STM必须将此发现的大部分引脚分配给板载LCD,触摸和存储芯片 . 剩下很少的异步功能 - 他们可能认为USB会好的 .

    Q1) - 这些通常被标记的方式你需要通过将Rx连接到TX来“交叉”,反之亦然 .

    通过连接UART引脚上的“环回”检查代码并检查LED .

    Q2) - STM Cube将为您生成一个有效的Keil项目 .

    这个演示代码将使用Keil项目(MDK-ARM)在stm32cube_fw_f4_v130 \ STM32Cube_FW_F4_V1.3.0 \ Projects \ STM32F429I-Discovery \ Examples \ UART中编译和运行 . 您需要更改为UART5 - 它配置为USART1 PA9(Tx)/ PA10(RX),一旦与UART5交换,或在本地测试USART1 - > UART5 .

    通过在发现时连接RX到Tx进行测试,设置Rx然后TX一个字符串都应该工作,Rxbuffer应该反映这一点 .

    然后连接到你的适配器都应该工作 . ,LEDS应该闪烁 .

    如果没有,交换Tx和Rx .

    检查DB9上的环回 .

    如果DB9上有调制解调器或PC,则需要先管理调制解调器控制信号,然后再进行此操作 . (RTC,CTS,DCD,DTR,DTE)See here . Raspberry为您做到这一点 .

    断开STM与适配器的连接,并检查DB9上PC的环回,然后检查Tx Rx引脚上的环回 .

    如果你做到这一点,STM闪烁一个LED,远程另一个,然后你有一个奇偶校验,波特率或字长问题 .


    下面是关于407发现(原始发现) - 道歉最初没有看到你有429 - 我们倾向于谈论F4Discovery与F429i-Discovery . 现在还有其他基于F4的主板 .

    在F4-Discovery板上 - UART5不可用,与在PC12上使用CS43L422(麦克风)的I2S3D冲突 . 与F429相同的引脚过载问题

    还使用其他UART和USART1 .

    Either - 配置USART2或USART3

    正面是USARTS 2和3已内置RTS / CTS线路,您可以使用 .

    OR

    您需要在电路板上焊接/取消焊接跳线以禁用麦克风 .

    我在几个不同的STM32板上生成了许多USARTS项目,它们都可以完美运行 . 遗憾的是,HAL程序员只提供固定长度的驱动程序,有或没有超时,没有Readline接口 .

相关问题