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

标签 serial-port embedded uart stm32f4discovery

背景

这是我的一些背景知识,以便您的家伙可以知道我有或没有的相关知识。我完全是这种嵌入式系统的新手。而且我对电子产品一无所知,我是一个纯软件专家。

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

我可以使用Raspberry Pi上的标准Linux C库实现UART读/写编程,该库通过USB-RS232适配器和电压转换器IC连接到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熄灭)

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

我的问题


首先,我想知道我是否正确了解该板的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。看起来像这样:enter image description here
当连接到Raspberry Pi时,我遵循此instruction,因此IC上的VCC / GND连接到Raspberry Pi上的3.3V / GND,我不确定是否需要这样做。
根据注释中的许可证声明,“ HAL”库表示这个stm32f4xx_hal_usart.c文件,它似乎来自意法半导体。尽管此文件中有一些说明,但我仍然很难弄清楚如何使用此驱动程序。例如,我无法说出Enable USARTx interface clockEnable the clock for USART GPIOs之间的区别,而且我也不知道如何实现这些功能。因此,如果有示例代码,这对我可以将它们与这些说明进行比较会很有帮助。


enter image description here
enter image description here

最佳答案

我已经将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在旧的和新的库中都可用,这让OP感到沮丧。终于在2016年,ST似乎有了一些亮点,我可以继续为这些出色的板子制作真实的应用程序。

实际上,在执行此任务时,我必须重新安装我的多维数据集及其所有库,然后多维数据集才能正常工作,这可能引起其他人的痛苦。

我将在此“模板”中添加LCD和触摸屏,以制作出精美的“ droidlet”。

我通常将蓝牙模块连接到一个UARTS并在那里进行调试。

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之外,您可能正在正确执行所有操作。 (请阅读手册中的Fineprint)

除非您想与UART对抗,否则建议您实施使用标准USB电缆的Virtual Comport演示。让ST作为设备。

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

在任何Discovery板上进行工作时,请启动STM32 Cube(free from ST)的副本,并在其中创建配置。它向您显示使用了什么,免费是什么,这是一个出色的工具,并将USB设置为奖励。

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

您可能想在这里查看Embitz.org,它们具有出色的IDE,甚至还有更好的F429iDisco示例,或者是ST AC6 IDEST page的更多示例。这些IDE没有代码大小限制,您可能会在使用LCD,触摸此设备上的内容时遇到一些问题。



剩下的答案

不幸的是,STM必须将此发现中的大多数引脚分配给板上的LCD,触摸和存储芯片。剩下的异步功能很少-他们可能认为USB可以。

Q1)-通常标记这些标记的方式,您需要通过将Rx连接到TX进行“交叉”,反之亦然。

通过在UART引脚上连接“环回”来检查代码,并检查LED。

问题2)-STM Cube将为您生成一个有效的Keil项目。

有演示代码可以在其中编译和运行
stm32cube_fw_f4_v130 \ STM32Cube_FW_F4_V1.3.0 \ Projects \ STM32F429I-Discovery \ Examples \带有Keil项目的UART(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。树莓为您做到这一点。

断开STM与适配器的连接,并检查DB9上PC的环回,然后检查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接口。

关于serial-port - 带有HAL库的STM32F4-Discovery(STM32F429ZIT6)上的RS232(UART)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34938261/

相关文章:

c++ - 将 rs232 消息保存到变量

c - Termios 和打开文件

C - While 和 IF 语句 - 尝试在 X 时间后超时

c - C语言如何从COM口读取数据

python - 尝试在 WinXP 上使用 pyserial 打开串口 -> "Access denied"

c - 如何将 pgm_read_byte 宏 (AVR-GCC) 移植到 Mircrochip C18 编译器?

c - Node.JS反序列化不均匀偏移量的 float

c - 如何在微 Controller 硬件复位之前保存一些数据?

Linux Uart 驱动修改

c++ - 是否可以通过编程方式更改 USB<-> 串行转换器的 'BM' 延迟选项?