背景
以下是我的一些背景知识,以便您的家伙可以知道我拥有或不具备的相关知识。我完全是这种嵌入式系统的新手。我对电子产品一无所知,我是一个纯粹的软件人。
我唯一的嵌入式系统体验是Raspberry Pi,它与STM32F4 Discovery完全不同。
我可以使用Raspberry Pi上的标准Linux C库实现UART读/写编程,该库连接到带有USB转RS232适配器和电压转换器IC的PC。
我的设备和开发环境
我想要实现的目标
我想在STM32F429 Discovery板上实现一个可以向/从PC发送/接收消息的编程。 (例如,将字符串发送到PC。当从PC接收到字符串时,点亮板上的LED)
我现在做了什么
现在我已经设置了我的Keil uVision IDE,并且可以编译/运行闪烁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。看起来像这样:
当连接到Raspberry Pi时,我跟着这个instruction,所以IC上的VCC / GND连接到Raspberry Pi上的3.3V / GND,我不确定是否需要这个或不。
通过“HAL”库,我的意思是这个stm32f4xx_hal_usart.c
文件,根据评论中的许可声明,它似乎来自意法半导体。虽然这个文件中有一些指令,但我仍然很难弄清楚如何使用这个驱动程序。例如,我无法区分Enable USARTx interface clock
和Enable the clock for USART GPIOs
之间的区别,我不知道如何实现这些功能。因此,如果有一个示例代码,那将是一个很好的帮助,因为我可以将它与这些说明进行比较。
答案 0 :(得分: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年最终似乎有一些来自ST的亮点,我可以继续为这些伟大的主板做真正的应用程序。
事实上,在执行此任务时,我必须在正常工作之前重新安装我的多维数据集及其所有库,这可能会给其他人造成痛苦。
我将在这个模板中添加LCD和触摸屏'制作一个很棒的小型机器人'。
我通常将蓝牙模块连接到其中一个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的副本,查看项目/外围设备目录中的USB和Virtual comport。 HAL库是相同的,也有此代码。
在任何Discovery板上工作时,启动STM32 Cube(free from ST)的副本,然后在那里创建配置。它向您展示了什么是使用什么,什么是免费的,这是一个很棒的工具,并且会将USB设置为奖励。
然后使用代码生成器为KEIL项目创建骨架。编译,运行添加您的应用程序代码并: - )
你可能想看看Embitz.org他们有一个很好的IDE甚至更好的F429iDisco示例,或ST AC6 IDE和ST page更多的例子。这些IDE没有代码大小限制,您将在此设备上使用LCD,触摸等操作。
答案的其余部分
不幸的是,STM必须将此发现的大多数引脚分配给板载LCD,触摸和存储芯片。剩下很少的异步功能 - 他们可能认为USB会好的。
Q1) - 这些通常标记的方式你需要交叉&#39;通过将Rx连接到TX,反之亦然。
通过布线&#39;环回检查您的代码&#39;在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。
- 配置USART2或USART3
正面是USARTS 2和3已内置RTS / CTS线路,您可以使用。
或强>
您需要在电路板上焊接/取消焊接跳线以禁用麦克风。
我已经在几个不同的STM32主板上产生了许多与USARTS相关的项目,它们都能完美运行。不幸的是,HAL程序员只提供固定长度的驱动程序,有或没有超时,没有Readline接口。