STM32F4-Discovery (STM32F429ZIT6) 上的 RS232 (UART) 与 HAL 库?

2024-01-03

背景

这是我的一些背景,以便你们知道我有或没有哪些相关知识。我完全是这种嵌入式系统的新手。而且我对电子产品一无所知,我是一个纯粹的软件人员。

我唯一的嵌入式系统经验是Raspberry Pi,它与STM32F4 Discovery有很大不同。

我可以在 Raspberry Pi 上使用标准 Linux C 库来实现 UART 读/写编程,Raspberry Pi 通过带有电压转换器 IC 的 USB 转 RS232 适配器连接到 PC。

我的设备和开发环境

  • 带有 STM32F429ZIT6 MCU 的 STM32F429I-DISCO 板
  • 一根 USB 转 RS232 电缆和一个电压转换器 IC,在 Raspberry Pi 上运行良好。
  • Keil uVision 5 IDE。

我想实现什么

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

我现在做了什么

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

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

我的问题

  1. 首先,我想知道我是否正确理解了该板的 PIN 定义。根据这个数据表 http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00071990.pdf,我应该将DB9上的TX引脚连接到PD2(UART5_RX),将DB9上的RX引脚连接到PC12(UART5_TX),将DB9上的VCC引脚连接到3.3V,将DB9上的GND连接到GND。这个连接正确吗?

  2. 有没有关于如何在来自最新版本 Keil uVision 的新 HAL 库上使用 UART 的示例代码?我在网上搜索过,但大多数示例代码或tutorial http://stm32f4-discovery.com/2014/04/library-04-connect-stm32f429-discovery-to-computer-with-usart/正在使用一个名为的函数RCC_AHB1PeriphClockCmd来自 Keil uVision 的新 HAL 库中似乎不存在。

Update

  1. My USB-to-Serial adapter is 067b:2303 Prolific Technology, Inc. PL2303 Serial Port and attached with a level shifter IC. Looks like this:enter image description here

  2. 当连接到 Raspberry Pi 时,我遵循这个操作说明 http://www.savagehomeautomation.com/projects/raspberry-pi-installing-a-rs232-serial-port.html,所以IC上的VCC / GND连接到Raspberry Pi上的3.3V / GND,我不确定是否需要这样做。

  3. 我所说的“HAL”库是指这个stm32f4xx_hal_usart.c文件中,根据注释中的许可声明,似乎来自意法半导体。虽然这个文件中有一些说明,但我仍然很难弄清楚如何使用这个驱动程序。例如,我无法区分Enable USARTx interface clock and Enable the clock for USART GPIOs,我不知道如何实现这些功能。因此,如果有示例代码,那将是一个很大的帮助,因为我可以将它与这些说明进行比较。


我已经推了此答案的代码 https://github.com/shorai/stackoverflow/tree/master/STM32F429i-CommsDemo到以下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一样感到沮丧,他们花了很多天、几周和几个月的时间努力让这些东西在新旧库上运行。Finally2016 年,ST 似乎给了我一些启发,我可以继续为这些出色的主板开发真正的应用程序。

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

我将在这个“模板”中添加 LCD 和触摸屏,以制作一个很棒的小“droidlet”。

我通常将蓝牙模块连接到其中一个 UART 并通过那里进行调试。

安迪·布朗安迪·布朗 http://andybrown.me.uk对于某些 ST,有一些很棒的 C++ 库。它们似乎基于 StdPeripheral 库,需要更新,以便我们可以通过 Cube 和 HAL 在新(和旧)设备上使用它们。作为一个社区,我们可以更有效地做到这一点。有什么想法和接受者吗?

玩得开心。


The canonical Solution
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。


You are probably doing everything correctly other than RTFM. (Read the Fineprint in the Manual)

除非您想对抗 UART,否则最好建议您实现使用标准 USB 电缆的虚拟端口演示。让 ST 成为设备。

获取 STCube 的副本,在项目/外设目录中查找 USB 和虚拟兼容性。 HAL库也是一样的,也有这段代码。

在任何 Discovery 板上工作时,启动 STM32 Cube 的副本(不含 ST http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF259242?sc=stm32cube),并在那里创建您的配置。它向您展示了哪些内容已被使用,哪些内容是免费的,这是一个很棒的工具,并且还将设置 USB 作为奖励。

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

你可能想看看这里Embitz.org http://www.emblocks.org/web/他们有一个很棒的 IDE,甚至更好的 F429iDisco 示例或ST AC6集成开发环境 http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF261797 and ST page http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533了解更多示例。这些 IDE 没有代码大小限制,这是您在该设备上使用 LCD、触摸屏等时会遇到的问题。


其余答案

不幸的是,STM 必须将这一发现的大部分引脚分配给板上的 LCD、触摸和存储芯片。只剩下很少的异步功能了——他们可能认为 USB 就可以了。

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

通过在 UART 引脚上连接“环回”来检查您的代码并检查 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 http://www.tldp.org/HOWTO/Serial-HOWTO-19.html。覆盆子为你做到了这一点。

断开 STM 与适配器的连接,并检查 PC 上 DB9 和 Tx Rx 引脚上的环回。

如果到这里,STM 会闪烁一个 LED,而远程控制另一个 LED,则说明存在奇偶校验、波特率或字长问题。


下面是 407 发现(原始发现) - 抱歉最初没有看到您有 429 - 我们倾向于谈论 F4Discovery 与 F429i-Discovery。现在还有其他基于 F4 的主板。

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

还使用其他 UART 和 USART1。

Either- 配置 USART2 或 USART3

积极的一面是 USARTS 2 和 3 内置了可供您使用的 RTS/CTS 线路。

OR

您需要焊接/拆焊板上的跳线才能禁用麦克风。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32F4-Discovery (STM32F429ZIT6) 上的 RS232 (UART) 与 HAL 库? 的相关文章

  • GNU Arm Cortex m4 上的 C++ 异常处理程序与 freertos

    2016 年 12 月更新现在还有一个关于此行为的最小示例 https community nxp com message 862676 https community nxp com message 862676 我正在使用带有 free
  • PhpSerial:没有可用的 stty——似乎无法让它工作

    我正在开发一个项目 涉及使用 Raspberry Pi 上的 UART 引脚读取和写入串行板 然而 我已经碰壁了 任何时候我尝试使用PhpSerial我总是收到错误 致命错误 没有可用的 stty 无法运行 在 var www PHP Se
  • 将指向 const 的指针或指向 const 的 const 指针声明为形参

    我最近对代码进行了一些调整 其中我必须更改函数中的形式参数 最初 该参数类似于以下内容 注意 该结构之前已进行类型定义 static MySpecialStructure my special structure static unsign
  • 使用pyserial(python串口)的二进制数据

    pyserial中的serial write 方法似乎只发送字符串数据 我有像 0xc0 0x04 0x00 这样的数组 并且希望能够通过串行端口发送 接收它们 是否有针对原始 I O 的单独方法 我想我可能需要将数组更改为 xc0 x04
  • C++ 异常处理增加了多少占用空间

    这个问题对于嵌入式开发尤其重要 异常处理为生成的二进制输出增加了一些占用空间 另一方面 毫无例外 错误都需要以其他方式处理 这需要额外的代码 最终也会增加二进制大小 我对你的经历很感兴趣 尤其是 您的编译器为异常处理添加的平均占用空间是多少
  • 在c#中通过设备名称获取蓝牙设备的COM端口

    我用 C 编写一些代码来获取映射具有特定名称的蓝牙设备的 COM 端口 我尝试了几种与列出的类似的解决方案here https stackoverflow com questions 25908734 get name of bluetoo
  • 头文件中的内存分配

    我工作的公司有针对嵌入式目标的 C 开发的开发规则 一是 建议不要在头文件中分配任何存储空间 我不确定这意味着什么 写它的人不在身边 其他开发人员也不在乎 所以我在这里问 我的理解是 我不应该在头文件中声明变量 因此在 h 中不鼓励类似的操
  • 如何查找 C++ 中的内存泄漏

    在嵌入式环境中检测 C 内存泄漏的好方法是什么 我尝试重载 new 运算符来记录每个数据分配 但我一定做错了什么 这种方法不起作用 还有其他人遇到过类似的情况吗 这是 new 和 delete 运算符重载的代码 EDIT 完全披露 我正在寻
  • 在嵌入式设备上使用new或malloc引起的段错误[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 我可以从哪里开始使用可编程硬件?

    一段时间以来 我一直渴望至少学习一点有关硬件编程的知识 并想在这里提出要求以获得一些起点 我是一位相当有成就的程序员 具有 Delphi 和 Objective c 经验 但从未听过设备端口 中断 我什至不知道术语 更不用说对硬件进行编程了
  • Socat串口嗅探

    我目前正在尝试访问连接到应用程序的串行端口的两个方向上的数据 我想做的是 ttymxc0 socat sniff ttyV0 应用程序ttymxc0 是真实端口 ttyV0 是虚拟端口 我发现 socat 命令适用于 Ubuntu 16 0
  • Node.js |如何通过串口向设备发送和接收一个字节?

    我正在尝试编写使用以下方法的 Node js 脚本serialport https serialport io 用于读取和写入数据的 npm 包COM5串行端口 使用 RS 232 电缆连接到设备 该设备会自动传输其拥有的数据 要检索设备内
  • 处理嵌入式系统中的堆栈溢出

    在嵌入式软件中 如何以通用方式处理堆栈溢出 我遇到过一些确实以硬件方式提供保护的处理器 例如最近的 AMD 处理器 维基百科上有一些技术 但这些是真正实用的方法吗 任何人都可以给出一个在当今 32 位嵌入式处理器的所有情况下都适用的明确建议
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能
  • 串行端口轮询和数据处理

    我正在尝试通过微控制器从传感器的多个串行端口读取数据 每个串口将接收超过2000个测量值 每个测量值7个字节 全部为十六进制 而且他们同时开火 现在我正在从 4 个串行端口进行轮询 另外 我将每个测量值转换为字符串并将其附加到字符串构建器
  • 工作站和嵌入式程序员之间的心态差异[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 通过串行端口通过诺基亚手机发送短信

    我正在尝试通过诺基亚手机通过串口发送短信 这通过腻子很容易 命令来自诺基亚文档 http wiki forum nokia com index php Using AT commands to send and read SMS工作正常 然
  • 构建 makefile 依赖/继承树

    如果我解释得不好或者问了一些明显的问题 我很抱歉 但我是 Linux 内核的新手 而且有点深入 我们有一个嵌入式 Linux 系统 它附带一个 文档非常糟糕的 SDK 其中包含数百个文件夹stuff 大多数文件夹包含rules make m
  • 在嵌入式 Jetty 上使用 DefaultServlet 提供静态 html 文件

    我正在开发一个需要独立的项目 因此我决定将 Jetty 嵌入到我的应用程序中 我将提供静态 HTML 页面 一些 JSP 页面 并且还将使用一些自定义 servlet 我找到了一个完美的示例 说明如何设置嵌入式 Jetty 来完成所有这一切
  • Windows平台下C语言控制串口DTR和RTS引脚

    如何在windows平台上控制串口的DTR和RTS引脚 我希望通过升高或降低电压来对其进行位敲击或操作 您需要使用EscapeComm 函数 https learn microsoft com en us windows desktop a

随机推荐