http://bbs.elecfans.com/jishu_464356_1_1.html

手上有块NUCLEO STM32L053x板子,用来做串口实验,看了下ST的最新库HAL驱动,于是想用HAL驱动来做串口。
使用过程中发现只能发送数据不能接收数据,用逻辑分析仪查看RX,TX引角,都有数据,但就是收不到数据。
使用STM32F103传统驱动,一点问题没有,改到HAL怎么就不行了呢?经过一周的调试终于找到了问题所在.
首先看STM32F103传通驱动的代码:

/** USART1 GPIO Configuration  PA9   ------> USART1_TXPA10   ------> 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_TXPA3     ------> 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);

希望能给后面的人提供点经验,少走弯路。

HAL驱动的串口编程陷阱相关推荐

  1. 树莓派UART串口编程--使用wiringPi库-C开发【2-修改驱动】

    一.前言 上一篇博文记录了使用wiringPi提供的串口驱动wiringSerial.c wiringSerial.h,并基于该驱动对串口进行简单的通信,测试中发现该串口的驱动比较简单,接收数据会存在 ...

  2. linux设备驱动,tty串口编程 如何查看linux下串口是否可用?串口名称等

    如何查看linux下串口是否可用?串口名称等? http://zhidao.baidu.com/question/419148559.html 查看串口是否可用,可以对串口发送数据比如对com1口,e ...

  3. 基于标准库函数与基于HAL库函数的stm32编程方式

    文章目录 基于标准库函数与基于HAL库函数的stm32编程方式 一.基于标准库 1. 介绍 2. 库函数的STM32串口程序编写 二.基于HAL库 1.介绍 2.HAL库STM32串口程序编写 三.差 ...

  4. 课程 | 基于STM32CubeMX和HAL驱动库的嵌入式系统设计

    帮成都这边一位老师友情分享一篇免费课程:基于STM32CubeMX和HAL驱动库的嵌入式系统设计. 如果想学习本课程,可以从文末给出的链接,或底部"阅读原文"进入报名,免费学习. ...

  5. 【linux】串口编程(一)——配置串口

    目前遇到的串口编程都是用于通信,很少作为终端显示.以前没有对串口编程做深入研究,本次以libmodbus源码中对串口的设置为例,详解总结串口编程时配置的属性(struct termios) 以libm ...

  6. 基于MFC串口编程和曲线图绘制(visual studio2008,Teechart绘图控件)的程序总结

    前言 今年刚进入公司按经理的要求为底盘测控机写了一个小小的console.这也是第一次教认真的完成整个程序的编写.程序不大,所用技术比较基础也不前卫,属于初级程序员的练手程序(知识的整理和搬运).虽然 ...

  7. Linux 串口编程四 串口设备程序开发

    Linux 串口编程和程序相对来说是很简单的,之所以用博客连载来展示,主要是想在学会使用的基础上掌握相关背景,原理以及注意事项.相信在遇到问题的时候,我们就不会对于技术的概念和 API 的使用浅尝辄止 ...

  8. Linux 串口编程二 深入了解 termios

    前言 这一系列串口编程重点在应用层编程,但是在讲解原理与相关概念时需要对驱动框架有个基础的认识.如果只是浅尝辄止,以后在遇到串口驱动与应用层程序调试难免遇到瓶颈.关于 tty驱动架构参见我的其他博客: ...

  9. Linux 串口编程一 一些背景

    在大部分讲解 Linux 编程书籍的时候会发现没有单独的串口编程章节,实际上串口编程已经被概括在了"终端"或者"终端IO"章节里面.在上一篇博客中对经常出现的几 ...

最新文章

  1. “编程能力差,90%的人会输在这点上!”谷歌开发:其实都是在瞎努力
  2. AtCoder Beginner Contest 197 题解(A ~ F)
  3. 小学校园里计算机文字,中小学计算机教学论文(共2228字).doc
  4. TCP,IP,HTTP,SOCKET区别和联系
  5. 如何修改IE浏览器的User-Agent用户代理字符串信息
  6. 配置 --- vscode中react格式化解决方案
  7. Spring IOC容器和获取组件对象源码分析
  8. c++利用初始化列表在类内部和类外部定义构造函数的区别
  9. 摩拜APP、小程序停服 摩拜单车全面接入美团
  10. python中set集合_Python中的SET集合操作
  11. Texpad for Mac(LaTeX编辑器软件)
  12. 完整的python项目实例-python完整项目
  13. 苹果计算机使用方法,苹果电脑系统使用教程_初次使用苹果电脑教程-win7之家
  14. java sqlite读取数据库_java如何读写sqlite数据库
  15. 微信小程序页面跳转时数据传输
  16. 深度学习-训练集图片输入神经网络前的标准化(附代码)
  17. java openni rgb显示_3D将深度映射到RGB(Kinect OpenNI Depthmap到OpenCV RGB Cam)
  18. 《沈剑架构师训练营》第7章 - 架构解耦
  19. TikTok与抖音有什么不同?为什么TikTok被称为“海外版抖音”?
  20. 考研数学之多元函数微积分

热门文章

  1. 戴森工程师揭秘Dyson 360 Eye吸尘机器人的故事:先要做到“智能”
  2. 理解js的prototype原型对象
  3. 金笛JDMail邮件服务器帮你应付电子邮件归档危机
  4. 静态内容负载均衡的具体实现-续《几百元搞定大型网站》
  5. input数字开头不能为0_Python新手上车5:数字和注释
  6. 数据类型转换——Python
  7. 推荐系统-Task01熟悉新闻推荐系统基本流程
  8. 如何做好数据安全治理
  9. 语言 全排列 函数_【排列组合】错位全排列的简化计算公式
  10. c语言中读和写的作用,C语言中对文件最基本的读取和写入函数