HAL驱动的串口编程陷阱
2015-07-28 18:32
274 查看
http://bbs.elecfans.com/jishu_464356_1_1.html
手上有块NUCLEO STM32L053x板子,用来做串口实验,看了下ST的最新库HAL驱动,于是想用HAL驱动来做串口。
使用过程中发现只能发送数据不能接收数据,用逻辑分析仪查看RX,TX引角,都有数据,但就是收不到数据。
使用STM32F103传统驱动,一点问题没有,改到HAL怎么就不行了呢?经过一周的调试终于找到了问题所在.
首先看STM32F103传通驱动的代码:
在传通驱动下我们配置IO的时候,
对于TX 我们配置GPIO_Mode为GPIO_Mode_AF_PP,
对于RX我们配置GPIO_Mode为GPIO_Mode_IN_FLOATING。
有时候人有惯性思维认为理所应当的在HAL里也应该一样,我就是在这个地方栽了跟头。
在HAL驱动方式里,RX,TX 必须都配置成GPIO_MODE_AF_PP。
代码如下:用HAL驱动时
希望能给后面的人提供点经验,少走弯路。
手上有块NUCLEO STM32L053x板子,用来做串口实验,看了下ST的最新库HAL驱动,于是想用HAL驱动来做串口。
使用过程中发现只能发送数据不能接收数据,用逻辑分析仪查看RX,TX引角,都有数据,但就是收不到数据。
使用STM32F103传统驱动,一点问题没有,改到HAL怎么就不行了呢?经过一周的调试终于找到了问题所在.
首先看STM32F103传通驱动的代码:
/** USART1 GPIO Configuration PA9 ------> USART1_TX PA10 ------> USART1_RX */ /*Configure GPIO pin : PA */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); /*Configure GPIO pin : PA */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStruct);
在传通驱动下我们配置IO的时候,
对于TX 我们配置GPIO_Mode为GPIO_Mode_AF_PP,
对于RX我们配置GPIO_Mode为GPIO_Mode_IN_FLOATING。
有时候人有惯性思维认为理所应当的在HAL里也应该一样,我就是在这个地方栽了跟头。
在HAL驱动方式里,RX,TX 必须都配置成GPIO_MODE_AF_PP。
代码如下:用HAL驱动时
/**USART2 GPIO Configuration PA2 ------> USART2_TX PA3 ------> USART2_RX */ GPIO_InitStruct.Pin = GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FAST; GPIO_InitStruct.Alternate = GPIO_AF4_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_3; //GPIO_InitStruct.Mode = GPIO_MODE_INPUT;(这句千万不能要) GPIO_InitStruct.Alternate = GPIO_AF4_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
希望能给后面的人提供点经验,少走弯路。
相关文章推荐
- PHP文件之上传
- Java 中的方法内部类
- 关于qt的问题构造函数的问题
- 【Java】对于空值null的判断
- Python在windows下的安装与配置
- 天下武功尽出LAMP之PHP
- Java 中的静态内部类
- PHP预定义接口
- Java集合框架
- java基础第二讲——java语法、变量、标识符规则
- php5.5.27报错:../DOMDocument.php目录找不到 的解决办法
- Visual Studio Code: 跨平台的代码编辑器
- Python 学习笔记13:Python + wsgi + django 配置。坑爹的python3和wsgi不兼容的解决
- 在做java web开发时常遇到的问题:mysql只能用localhost或127.0.0.1连接
- [C#] Byte[]、Image、Bitmap 之间的相互转换
- Eclipse SVN插件安装
- Parallel Python——一个简单的分布式计算系统
- C++ 输出Cstring遇见的奇葩问题
- 搭建Spring MVC环境进行简单的增、删、改、查(二)
- Matlab实现求a到b被c整除的个数