带有 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 .

我的设备和开发环境

我想达到的目标

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

我现在做了什么

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

所以 LED 部分已经基本完成,缺少的部分是如何使用 RS232 电缆与 STM32F4 探索板通信。

我的问题

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

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

更新

  1. 我的 USB 转串口适配器是 067b:2303 Prolific Technology, Inc. PL2303 Serial Port 并附有电平转换器 IC。看起来像这样:

  2. 连接到Raspberry Pi时,我是按照这个instruction,所以IC上的VCC/GND连接到Raspberry Pi上的3.3V/GND ,我不确定是否需要这个。

  3. "HAL"库,我的意思是这个stm32f4xx_hal_usart.c文件,根据评论中的许可声明,它似乎来自STMicroelectronics。虽然这个文件中有一些说明,但我仍然很难弄清楚如何使用这个驱动程序。例如,我分不清Enable USARTx interface clockEnable 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 接口。