STM32F4-Discovery (STM32F429ZIT6)使用HAL库实现RS232(UART)?

4

背景

以下是我的背景,以便您了解我具有哪些相关知识或不具备哪些知识。我完全是这种嵌入式系统的新手。我对电子设备一无所知,我是纯粹的软件人员。

我唯一的嵌入式系统经验是树莓派,它与STM32F4 Discovery非常不同。

我可以使用标准的Linux C库在树莓派上实现UART读/写编程,它连接到一个带有电压转换器IC的USB-to-RS232适配器与PC相连。

我的设备和开发环境

  • 一个带有STM32F429ZIT6 MCU的STM32F429I-DISCO板
  • 一个USB-to-RS232电缆和一个在树莓派上工作得很好的电压转换器IC。
  • Keil uVision 5 IDE。

我想要实现什么

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

我现在已经完成了什么

现在我已经设置好了我的Keil uVision IDE,并且可以编译/运行闪烁LED示例,我还可以编辑该示例以按我想要的方式控制LED。(例如,在用户按钮被按下时打开LED,在释放按钮时关闭它)

因此,LED部分基本上完成了,缺少的部分是如何使用RS232电缆与STM32F4 Discovery板通信。

我的问题

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

  2. 有没有关于如何在最新版本的Keil uVision中使用新HAL库上的UART的示例代码?我在网上搜索过,但大多数样例代码或教程都使用了一个叫做RCC_AHB1PeriphClockCmd的函数,这个函数似乎在Keil uVision提供的新HAL库中不存在。

更新

  1. 我的USB转串口适配器是067b:2303 Prolific Technology, Inc. PL2303 Serial Port,附带有电平转换芯片。看起来像这样:enter image description here

  2. 连接到树莓派时,我遵循了这个说明,所以芯片上的VCC / GND连接到树莓派上的3.3V / GND,我不确定是否需要这样做。

  3. 我所说的“HAL”库是指此stm32f4xx_hal_usart.c文件,根据注释中的许可声明,似乎来自STMicroelectronics。尽管此文件中有一些说明,但对我来说仍然很难弄清楚如何使用该驱动程序。例如,我无法区分启用USARTx接口时钟启用USART GPIO的时钟之间的区别,也不知道如何实现这些功能。因此,如果有示例代码,将会非常有帮助,因为我可以将其与这些说明进行比较。

enter image description here enter image description here


是的,UART5_TX使用PC12,备用功能8,而UART5_RX使用PD2备用功能8。还有其他的UART。uart5基地址为0x40005000,GPIOC基地址为0x40020800,GPIOD基地址为0x40020C00。需要设置RCC_APB1ENR位20才能启用uart5,RCC_AHB1ENR位2和3启用GPIOC和D逻辑。rcc基地址为0x40023800等等... - old_timer
它是一个Cortex-M4,因此您可以使用SysTick定时器和LED来了解时钟运行的速度,从而可以计算出UART的除数,这实际上是所有操作中唯一困难的部分,但使用定时器和LED使其变得有些琐碎...或者只需在UART TX上放置一个示波器,并根据您选择的除数测量输出内容。然后进行调整。 - old_timer
我建议您使用USART1_TX和USART1_RX在PA9和PA10上,因为这些引脚通常是stm32芯片上uart的引脚。如果您查看原理图,焊接桥SB15和SB11将连接到板子的stlink端口,理论上意味着您不需要任何其他usb到uart解决方案。虽然我的经验是这些板子有时可行,有时不可行。对于某些ST板型,它可以工作,而对于另一些则不能。您可以在TX/RX(JP4)孔中放入一个纸夹,看看是否会回显,如果没有,则焊接桥将无法帮助您。 - old_timer
@dwelch 我已经更新了我的问题。我对这些规格不太熟悉,所以我的术语可能不准确。感谢您的帮助,我会查看您提供的示例。 :) - Brian Hsu
你需要的是3.3伏和地线(以及rx和tx),而不是5伏。这与树莓派相同(或者应该是相同的),即使有时候这些部件可以容忍5伏,但它们仍然是3.3伏的零件。 - old_timer
显示剩余6条评论
1个回答

5
我已将此答案的代码推送到以下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年,ST公司终于有所进展,我可以开始为这些伟大的板子开发真正的应用程序。
事实上,在完成这个任务时,我不得不重新安装我的立方体和所有的库,才能使它正常工作,这可能会给其他人带来痛苦。
我将添加LCD和触摸屏到这个“模板”上,制作一个很棒的小型“机器人”。
我通常将蓝牙模块连接到其中一个UARTS,并通过蓝牙调试。
Andy Brown Andy Brown 为一些STs提供了一些很棒的C++库。它们似乎基于StdPeripheral库,并需要更新,以便我们可以通过Cube和HAL在新(和旧)设备上使用它们。作为社区,我们可以更有效地做到这一点。有什么想法和接受者吗?
玩得开心。
标准解决方案
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。


除了阅读手册中的细节之外,您可能已经做得很正确了。

如果您不想与UART打交道,建议您实现使用标准USB电缆的虚拟串口演示。让ST成为设备。

获取STCube的副本,在项目/外设目录中查找USB和虚拟串口。HAL库相同,并且也具有此代码。

在任何Discovery板上进行工作时,请启动STM32 Cube(免费从ST获取),并在那里创建配置。它会向您显示正在使用和未使用的内容,是一个很好的工具,并将设置USB作为奖励。

然后使用代码生成器创建KEIL项目的骨架。编译,运行,添加您的应用程序代码,完成!

您可能想要查看这里 Embitz.org,他们有一个很棒的IDE,甚至有更好的F429iDisco示例,或者ST AC6 IDEST page获取更多示例。使用LCD、触摸等设备时,这些IDE没有代码大小限制,而这是您将会遇到的问题。


其余答案

不幸的是,STM已经把这个开发板上大部分引脚都分配给了LCD、触摸和内存芯片,因此剩下的异步功能非常少——他们可能认为USB可以使用。

Q1) - 通常情况下标记方式,您需要通过将Rx连接到TX并反之来进行“交叉”连接。

通过在UART引脚上布线“回环测试”,检查您的代码并检查LED。

Q2) - STM Cube将为您生成一个可用的Keil项目。

在stm32cube_fw_f4_v130\STM32Cube_FW_F4_V1.3.0\Projects\STM32F429I-Discovery\Examples\UART中有演示代码,其中包含一个Keil项目(MDK-ARM)。您需要更改为UART5——它被配置为USART1 PA9(Tx)/PA10(RX),一旦工作正常,就切换到UART5,或者本地测试USART1->UART5。

通过将RX连接到Discovery的TX,设置RX,然后TX字符串,所有内容都应该正常工作,Rx缓冲区应该反映这一点。

然后连接到您的适配器,所有内容都应该正常工作,LED应该闪烁。

如果没有,请交换Tx和Rx。

检查DB9上的回环。

如果您在DB9上有调制解调器或PC,则需要在任何操作之前管理调制解调器控制信号。 (RTC,CTS,DCD,DTR,DTE) 请参见此处。 Raspberry将为您完成此操作。

从适配器断开STM并检查来自PC的环回,然后在Tx Rx引脚上进行测试。

如果您到达这一步,STM会闪烁一个LED,远程连接另一个LED,那么您可能存在奇偶校验、波特率或字长问题。


以下是针对407探索(原始探索)的内容 - 最初很抱歉没有看到您有429 - 我们倾向于谈论F4Discovery vs F429i-Discovery。现在也有其他基于F4的板子。
在F4-Discovery板上 - UART5不可用,与I2S3D冲突,该接口用于PC12上的CS43L422(麦克风)。与F429一样,出现了相同的引脚重载问题。
其他UART和USART1也被使用。
要么 - 配置为USART2或USART3
积极的一面是USARTS 2和3具有内置的RTS / CTS线路,您可以使用它们。
要么 - 您需要在板子上焊接/解焊跳线以禁用麦克风。
我已经生成了许多在几个不同的STM32板上使用USARTS的项目,它们都可以完美地工作。HAL程序员不幸地只提供了固定长度的驱动程序,带或不带超时,没有Readline接口。

谢谢,你的回答真的帮了我很多。我已经成功地从STM Cube创建了一个项目,并且现在可以发送/接收UART消息了。 :-) - Brian Hsu
@Brian- 谢谢,我昨天也做了同样的事情。ST真的改进了Cube和Ac6(由于许可证成本,我不使用Keil)。在一些外设组合的时钟分频器的RCC配置中,Cube可能存在问题 - 更有可能是我键盘上按错了键 :-) 我没有发布,直到我确定发生了什么并且可以重现结果。然后我会在这里和Github上发布回复。你找到了什么? - ChrisR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接