当前位置: 首页 > news >正文

STM32——串口通信(发送/接收数据与中断函数应用)

STM32——串口通信(发送/接收数据与中断函数应用)

在嵌入式系统中,串口通信是一种非常基本和常用的通信方式。STM32微控制器提供了多个USART(通用同步异步接收发射器)接口,用于实现串口通信。本文将介绍STM32串口通信的基本概念、配置步骤,并提供发送、接收数据的示例代码,以及中断函数的应用。

一、USART简介

USART是通用同步/异步收发器,支持同步和异步模式的串行通信。在异步模式下,数据通过RX和TX引脚以串行方式发送和接收,波特率、字长、停止位和奇偶校验位等参数可以配置。

二、USART配置步骤

  1. 使能串口时钟和GPIO时钟:需要为USART和其对应的GPIO端口提供时钟。
  2. GPIO端口模式设置:设置为推挽输出或浮空输入。
  3. 串口参数初始化:包括波特率、字长、停止位、奇偶校验等。
  4. 开启中断并初始化NVIC:如果需要使用中断方式接收数据,则需要配置。
  5. 使能串口:通过USART_Cmd(USARTx, ENABLE)函数使能串口。
  6. 编写中断处理函数:处理接收中断和其他可能的中断。

三、代码示例

3.1 USART初始化

void USART1_Init(u32 bound) {GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);// TX on PA9, RX on PA10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);// USART1 configurationUSART_InitStructure.USART_BaudRate = bound;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART1, &USART_InitStructure);USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);USART_Cmd(USART1, ENABLE);
}

3.2 数据发送

void USART1_SendData(u8 *buf, u16 len) {for (u16 t = 0; t < len; t++) {while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);USART_SendData(USART1, buf[t]);}while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}

3.3 中断处理函数

void USART1_IRQHandler(void) {if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {u8 r = USART_ReceiveData(USART1);// 处理接收到的数据}
}

四、总结

STM32的USART提供了灵活的配置选项,可以满足不同的通信需求。通过初始化USART,配置GPIO,使能中断并编写中断处理函数,可以实现数据的发送和接收。在实际应用中,还可以通过重定向fputc函数来支持printf等标准库函数。

在开发过程中,可以参考STM32的官方文档和库函数手册,以获取更详细的配置信息和使用示例。通过实际编码和调试,可以更好地理解和掌握STM32的串口通信功能。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

相关文章:

  • 优化Mysql
  • JMX 框架
  • Python获取百度翻译的两种方法
  • C语言 | Leetcode C语言题解之第438题找到字符串中所有字母异位词
  • 【小程序】微信小程序课程 -2 快速上手
  • 鸿蒙开发(NEXT/API 12)【硬件(Pen Kit)】手写笔服务
  • HTML中的padding和margin
  • map(lambda x: x[0], sorted(count.items(), key=lambda x: (-x[1], x[0]))[:n])
  • mysql迁移postgreSql windows 工具
  • Redis的数据类型和编码方式
  • 上海电力大学《2020年+2021年830自动控制原理真题》 (完整版)
  • 二维数组的创建和初始化
  • 【高分系列卫星简介——高分辨率多模综合成像卫星】
  • tidb-一场select in百万参数引发的血案
  • 软件测试学习笔记丨curl命令发送请求
  • 【React系列】如何构建React应用程序
  • Cookie 在前端中的实践
  • Java深入 - 深入理解Java集合
  • JDK 6和JDK 7中的substring()方法
  • JSONP原理
  • MySQL的数据类型
  • PAT A1120
  • python学习笔记 - ThreadLocal
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Vue 2.3、2.4 知识点小结
  • XForms - 更强大的Form
  • 构建二叉树进行数值数组的去重及优化
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 简单数学运算程序(不定期更新)
  • 那些被忽略的 JavaScript 数组方法细节
  • 前嗅ForeSpider采集配置界面介绍
  • 如何优雅地使用 Sublime Text
  • 设计模式 开闭原则
  • 终端用户监控:真实用户监控还是模拟监控?
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 湖北分布式智能数据采集方法有哪些?
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​2020 年大前端技术趋势解读
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (13)Hive调优——动态分区导致的小文件问题
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (javaweb)Http协议
  • (NSDate) 时间 (time )比较
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (三十五)大数据实战——Superset可视化平台搭建
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十六)视图变换 正交投影 透视投影
  • (四)图像的%2线性拉伸
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)面试需要掌握的技巧
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别