带有 HAL 库的 STM32F4-Discovery (STM32F429ZIT6) 上的 RS232 (UART)?
RS232 (UART) on STM32F4-Discovery (STM32F429ZIT6) with HAL library?
背景
这是我的一些背景知识,以便您了解我有或没有的相关知识。我完全是这种嵌入式系统的新手。而且我对电子学一无所知,我是一个纯粹的软件人。
我对嵌入式系统的唯一体会是Raspberry Pi,与STM32F4 Discovery大相径庭
我可以在 Raspberry Pi 上使用标准 Linux C 库实现 UART 读/写编程,它通过带有电压转换器 IC 的 USB-to-RS232 适配器连接到 PC .
我的设备和开发环境
- 一块带有STM32F429ZIT6 MCU的STM32F429I-DISCO板
- 一根 USB 转 RS232 电缆和一个电压转换器 IC,在 Raspberry Pi 上工作得很好。
- Keil uVision 5 IDE.
我想达到的目标
我想在 STM32F429 探索板上实现一个程序,可以向 PC 发送消息/从 PC 接收消息。 (例如,向PC发送一个字符串。当从PC接收到一个字符串时,点亮板上的LED)
我现在做了什么
现在我已经设置了我的 Keil uVision IDE,并且可以编译/运行 闪烁 LED 示例,我还可以编辑该示例以按照我想要的方式控制 LED . (例如,按下用户按钮时打开 LED,松开按钮时关闭)
所以 LED 部分已经基本完成,缺少的部分是如何使用 RS232 电缆与 STM32F4 探索板通信。
我的问题
首先,我想知道我是否正确理解了这个板子的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 库中。
更新
我的 USB 转串口适配器是 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
并附有电平转换器 IC。看起来像这样:
连接到Raspberry Pi时,我是按照这个instruction,所以IC上的VCC/GND连接到Raspberry Pi上的3.3V/GND ,我不确定是否需要这个。
"HAL"库,我的意思是这个stm32f4xx_hal_usart.c
文件,根据评论中的许可声明,它似乎来自STMicroelectronics。虽然这个文件中有一些说明,但我仍然很难弄清楚如何使用这个驱动程序。例如,我分不清Enable USARTx interface clock
和Enable the clock for USART GPIOs
,我不知道如何实现这些功能。因此,如果有示例代码,那将是一个很大的帮助,因为我可以将其与这些说明进行比较。
我已将 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 年,ST 似乎带来了一些曙光,我可以继续为这些优秀的开发板开发真正的应用程序。
事实上,在执行此任务时,我必须 re-install 我的多维数据集及其所有库才能正常工作,这可能会引起其他人的痛苦。
我将为这个 'template' 添加 LCD 和触摸屏以制作一个很棒的小 'droidlet'。
我通常将蓝牙模块连接到其中一个 UART 并通过那里进行调试。
Andy Brown Andy Brown 为某些 ST 提供了一些很棒的 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。
除了 RTFM 之外,您可能做的一切都正确。 (阅读手册中的细则)
除非你想对抗UART,否则建议你使用标准USB线实现Virtual Comport demo。让 ST 成为设备。
获取 STCube 的副本,在 projects/peripherals 目录中查找 USB 和虚拟端口。 HAL库同理,也有这段代码。
在任何 Discovery 板上工作时,启动 STM32 Cube (free from ST) 的副本,并在那里创建您的配置。它会告诉你什么是用过的,什么是免费的,一个很棒的工具,并将设置 USB 作为奖励。
然后使用代码生成器为KEIL 项目创建骨架。编译,运行 添加您的应用代码和 :-)
您可能想在此处 Embitz.org they have a great IDE and even better F429iDisco examples or the ST AC6 IDE and ST page 查看更多示例。这些 IDE 没有代码大小限制,您将 运行 在此设备上使用 LCD、触摸等。
剩下的答案
不幸的是,STM 必须将此发现中的大部分引脚分配给板上的 LCD、触摸和内存芯片。几乎没有 Async 功能了——他们可能认为 USB 就可以了。
Q1) - 这些通常标记的方式需要 'crossover' 通过将 Rx 连接到 TX,反之亦然。
通过在 UART 引脚上接线 'loopback' 检查您的代码并检查 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 连接到 Tx 进行测试,设置 Rx 然后 TX 一个字符串都应该工作并且 Rxbuffer 应该反映这一点。
然后连接到您的适配器应该一切正常。LED 应该闪烁。
如果不是,交换 Tx 和 Rx。
检查 DB9 上的环回。
如果您在 DB9 上有调制解调器或 PC,您需要先管理调制解调器控制信号,然后才能进行任何操作。 (RTC、CTS、DCD、DTR、DTE)See here。 Raspberry 会为您做这件事。
断开 STM 与适配器的连接,检查来自 PC 的 DB9 环回,然后是 Tx Rx 引脚。
如果你走到这一步,STM 闪烁一个 LED,远程闪烁另一个,那么你有奇偶校验、波特率或字长问题。
以下是 407 发现(原始发现)- 抱歉最初没有看到您有 429 - 我们倾向于谈论 F4Discovery 与 F429i-Discovery。现在还有其他基于 F4 的板。
在 F4-Discovery 板上 - UART5 不可用,与 PC12 上使用 CS43L422(麦克风)的 I2S3D 冲突。与 F429
相同的引脚过载问题
其他UART和USART1也用到了。
任一 - 配置 USART2 或 USART3
积极的是 USARTS 2 和 3 内置了 RTS/CTS 行,您可以使用。
或
您需要焊接/拆焊板上的跳线才能禁用麦克风。
我已经在几个不同的 STM32 板上使用 USARTS 生成了许多项目,它们都可以完美运行。不幸的是,HAL 程序员只提供带或不带超时的固定长度的驱动程序,没有 Readline 接口。
背景
这是我的一些背景知识,以便您了解我有或没有的相关知识。我完全是这种嵌入式系统的新手。而且我对电子学一无所知,我是一个纯粹的软件人。
我对嵌入式系统的唯一体会是Raspberry Pi,与STM32F4 Discovery大相径庭
我可以在 Raspberry Pi 上使用标准 Linux C 库实现 UART 读/写编程,它通过带有电压转换器 IC 的 USB-to-RS232 适配器连接到 PC .
我的设备和开发环境
- 一块带有STM32F429ZIT6 MCU的STM32F429I-DISCO板
- 一根 USB 转 RS232 电缆和一个电压转换器 IC,在 Raspberry Pi 上工作得很好。
- Keil uVision 5 IDE.
我想达到的目标
我想在 STM32F429 探索板上实现一个程序,可以向 PC 发送消息/从 PC 接收消息。 (例如,向PC发送一个字符串。当从PC接收到一个字符串时,点亮板上的LED)
我现在做了什么
现在我已经设置了我的 Keil uVision IDE,并且可以编译/运行 闪烁 LED 示例,我还可以编辑该示例以按照我想要的方式控制 LED . (例如,按下用户按钮时打开 LED,松开按钮时关闭)
所以 LED 部分已经基本完成,缺少的部分是如何使用 RS232 电缆与 STM32F4 探索板通信。
我的问题
首先,我想知道我是否正确理解了这个板子的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 库中。
更新
我的 USB 转串口适配器是
067b:2303 Prolific Technology, Inc. PL2303 Serial Port
并附有电平转换器 IC。看起来像这样:连接到Raspberry Pi时,我是按照这个instruction,所以IC上的VCC/GND连接到Raspberry Pi上的3.3V/GND ,我不确定是否需要这个。
"HAL"库,我的意思是这个
stm32f4xx_hal_usart.c
文件,根据评论中的许可声明,它似乎来自STMicroelectronics。虽然这个文件中有一些说明,但我仍然很难弄清楚如何使用这个驱动程序。例如,我分不清Enable USARTx interface clock
和Enable the clock for USART GPIOs
,我不知道如何实现这些功能。因此,如果有示例代码,那将是一个很大的帮助,因为我可以将其与这些说明进行比较。
我已将 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 年,ST 似乎带来了一些曙光,我可以继续为这些优秀的开发板开发真正的应用程序。
事实上,在执行此任务时,我必须 re-install 我的多维数据集及其所有库才能正常工作,这可能会引起其他人的痛苦。
我将为这个 'template' 添加 LCD 和触摸屏以制作一个很棒的小 'droidlet'。
我通常将蓝牙模块连接到其中一个 UART 并通过那里进行调试。
Andy Brown Andy Brown 为某些 ST 提供了一些很棒的 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。
除了 RTFM 之外,您可能做的一切都正确。 (阅读手册中的细则)
除非你想对抗UART,否则建议你使用标准USB线实现Virtual Comport demo。让 ST 成为设备。
获取 STCube 的副本,在 projects/peripherals 目录中查找 USB 和虚拟端口。 HAL库同理,也有这段代码。
在任何 Discovery 板上工作时,启动 STM32 Cube (free from ST) 的副本,并在那里创建您的配置。它会告诉你什么是用过的,什么是免费的,一个很棒的工具,并将设置 USB 作为奖励。
然后使用代码生成器为KEIL 项目创建骨架。编译,运行 添加您的应用代码和 :-)
您可能想在此处 Embitz.org they have a great IDE and even better F429iDisco examples or the ST AC6 IDE and ST page 查看更多示例。这些 IDE 没有代码大小限制,您将 运行 在此设备上使用 LCD、触摸等。
剩下的答案
不幸的是,STM 必须将此发现中的大部分引脚分配给板上的 LCD、触摸和内存芯片。几乎没有 Async 功能了——他们可能认为 USB 就可以了。
Q1) - 这些通常标记的方式需要 'crossover' 通过将 Rx 连接到 TX,反之亦然。
通过在 UART 引脚上接线 'loopback' 检查您的代码并检查 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 连接到 Tx 进行测试,设置 Rx 然后 TX 一个字符串都应该工作并且 Rxbuffer 应该反映这一点。
然后连接到您的适配器应该一切正常。LED 应该闪烁。
如果不是,交换 Tx 和 Rx。
检查 DB9 上的环回。
如果您在 DB9 上有调制解调器或 PC,您需要先管理调制解调器控制信号,然后才能进行任何操作。 (RTC、CTS、DCD、DTR、DTE)See here。 Raspberry 会为您做这件事。
断开 STM 与适配器的连接,检查来自 PC 的 DB9 环回,然后是 Tx Rx 引脚。
如果你走到这一步,STM 闪烁一个 LED,远程闪烁另一个,那么你有奇偶校验、波特率或字长问题。
以下是 407 发现(原始发现)- 抱歉最初没有看到您有 429 - 我们倾向于谈论 F4Discovery 与 F429i-Discovery。现在还有其他基于 F4 的板。
在 F4-Discovery 板上 - UART5 不可用,与 PC12 上使用 CS43L422(麦克风)的 I2S3D 冲突。与 F429
相同的引脚过载问题其他UART和USART1也用到了。
任一 - 配置 USART2 或 USART3
积极的是 USARTS 2 和 3 内置了 RTS/CTS 行,您可以使用。
或
您需要焊接/拆焊板上的跳线才能禁用麦克风。
我已经在几个不同的 STM32 板上使用 USARTS 生成了许多项目,它们都可以完美运行。不幸的是,HAL 程序员只提供带或不带超时的固定长度的驱动程序,没有 Readline 接口。