2016-01-22 285 views
4

背景带有HAL库的STM32F4-Discovery(STM32F429ZIT6)上的RS232(UART)?

这里是我的一些背景,这样你的家伙可以知道我有或没有相关知识。我完全是这种嵌入式系统的新手。我对电子产品并不了解,我是一个纯粹的软件家伙。

我唯一的嵌入式系统的经验是树莓派,这是从STM32F4探索完全不同。

我可以实现通过使用树莓派,连接到一台PC用USB转RS232适配器的电压转换器IC标准的Linux C库是一个UART读/写程序。

我的设备和开发环境

  • 的STM32F429I-DISCO板与STM32F429ZIT6 MCU
  • 一个USB转RS232电缆和一个电压转换器IC,其作品相当不错的树莓派。
  • 的Keil uVision 5 IDE。

我想达成什么

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

我已经做对现在

现在我已经设置我的Keil uVision IDE ,并且可以编译/运行闪烁的LED示例,我也可以编辑该示例以按照我希望的方式控制LED。 (例如,当用户按钮被按下时打开LED,并且当按钮被释放时将其关闭)

因此LED部分已经完成了,缺少一部分它如何使用RS232电缆与STM32F4探索板进行通信。

我的问题

  1. 首先,我想知道如果我理解的PIN定义该电路板的正确。根据这一datasheet,我应该在DB9上DB9连接TX引脚PD2(UART5_RX),在DB9到PC12(UART5_TX),在DB9至3.3V的VCC引脚RX引脚和GND到GND。这个连接是否正确?

  2. 是否有关于如何在新的HAL库,来自Keil公司uVision的最新版本,使用UART示例代码?我在网上搜索,但大部分示例代码或tutorial使用的是被称为RCC_AHB1PeriphClockCmd功能这似乎不是在新的HAL库,来自Keil公司uVision存在。

更新

  1. 我的USB转串口适配器067b:2303 Prolific Technology, Inc. PL2303 Serial Port与电平转换器IC连接。看起来是这样的:enter image description here

  2. 当连接到树莓派,我是继此instruction,所以对IC的VCC/GND连接到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

+0

你可以采取裸机路线,通常就像试图让一些库工作一样快捷简单https://github.com/dwelch67/stm32_samples我没有这个确切的板子,但是stm32外围设备比不同越过芯片。 –

+0

为什么涉及5V?根本不需要,也不需要树莓派。你有什么样的USB电缆你有RS232电压水平会破坏这些芯片,你永远不能使用RS232。或者你是否错误地使用了RS232术语来暗示串行协议而不是电压标准。我使用基于usb ftdi的突破和电缆,提供3.3v uart接口,只需要真正连接rx和tx,真的希望使用同一台计算机来避免浮动接地,而且您不需要连接接地。如果有什么rx,tx和地面,如果你觉得需要。 –

+0

如果你想使用他们的库,然后联系st技术支持和/或通过代码来查找并找出它。 –

回答

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的灯光,我可以继续为这些伟大的电路板做真正的应用程序。

事实上,在执行此任务时,我必须在正常工作之前重新安装我的多维数据集及其所有库,这可能会对其他人造成痛苦。

我会将液晶显示器和触摸屏添加到这个'模板'来制作一个很棒的'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的副本,查看USB和虚拟comport的projects/peripherals目录。 HAL库是一样的,也有这个代码。

当在任何发现板上工作时,启动一个STM32 Cube(free from ST)的副本,并在那里创建您的配置。它向你展示了什么是使用和什么是免费的,一个伟大的工具,并将设置USB作为奖金。

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

你可能想看看这里Embitz.org他们有很大的IDE,更是F429iDisco例子或更多的例子ST AC6 IDEST page。这些IDE没有代码大小限制,您可以在此设备上使用LCD,触摸等方式进行操作。


应答

不幸的是STM具有分配的最引脚的这一发现为LCD,触摸和内存芯片板载必要的休息。有很少的异步功能 - 他们可能认为USB会好的。

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

通过在UART引脚上连接'loopback'来检查您的代码并检查LED。 Q2) - STM Cube将为您生成一个可用的Keil项目。

有演示代码,将编译并在 stm32cube_fw_f4_v130 \ STM32Cube_FW_F4_V1.3.0运行\项目\ STM32F429I发现\例子\ UART与Keil工程(MDK-ARM)。您将需要更改为UART5 - 它配置为USART1 PA9(Tx)/ PA10(RX),一旦工作交换到UART5,或者在本地USART1 - > UART5测试。

通过在发现上连接RX到Tx进行测试,设置Rx然后发送一个字符串都应该工作,而Rxbuffer应该反映这一点。

然后连接到你的适配器都应该工作,LEDS应该闪烁。

如果没有,交换Tx和Rx。

检查DB9上的回送。

如果您在DB9上有调制解调器或PC,则需要先调制解调器控制信号,然后再执行任何操作。 (RTC,CTS,DCD,DTR,DTE)See here。树莓为你做这个。

将STM从适配器断开,并检查DB9上的PC的环回,然后检查Tx Rx引脚上的环回。

如果你得到这个很远,STM闪烁一个LED,远程另一个,然后你有奇偶校验,波特率或字长问题。


下面是407的发现(最初发现) - 道歉起初没有看到你有429 - 我们往往谈F4Discovery的VS F429i发现。现在还有其他基于F4的电路板。

在F4-Discovery板上 - UART5不可用,与在PC12上使用CS43L422(麦克风)的I2S3D冲突。与F429相同的引脚过载问题也使用其他UART和USART1。

要么 - 配置USART2或USART3

阳性是个USART 2和3已经建立了,你可以使用RTS/CTS线。

OR

你需要焊接/拆焊跳线在板上禁用麦克风。

我已经使用USARTS在几个不同的STM32板上生成了许多项目,并且它们都完美无缺地工作。不幸的是,HAL程序员只提供有或没有超时的固定长度的驱动程序,没有Readline接口。

+0

谢谢,你的回答真的帮了我很多。我成功地从STM Cube创建了一个项目,现在可以发送/接收UART消息。 :-) –

+0

@布莱恩 - 谢谢,我昨天也是这样。 ST已经完全改进了Cube和Ac6(由于许可费用,我没有使用Keil)。在Cube中可能会有一些问题,RCC为某些外围设备组合配置了时钟分频器 - 更有可能是我的键盘上的白痴按键:-)我没有发帖,直到我确定发生了什么,可以重现结果。然后我会回到这里和Github上。你发现了什么?。 – ChrisR