基于HAL库和CubeMX的STM32串口通信以及重定向
创作时间:
作者:
@小白创作中心
基于HAL库和CubeMX的STM32串口通信以及重定向
引用
1
来源
1.
https://www.geekshared.com/%E5%9F%BA%E4%BA%8Ehal%E5%BA%93%E5%92%8Ccubemx%E7%9A%84stm32-%E4%B8%B2%E5%8F%A3%E9%80%9A%E4%BF%A1%E4%BB%A5%E5%8F%8A%E9%87%8D%E5%AE%9A%E5%90%91/
串口UART,作为基础的一种通信协议应该是我们接触的最早的通信协议,有许多芯片和模块可以利用串口来进行通信。
本期我们介绍如何使用CubeMX实现STM32的串口通信以及对printf等函数的重定向。
CubeMX配置串口通信
首先打开CubeMX,配置时钟树和时钟源。
接着配置我们的串口,设置相对应的波特率。
打开串口的中断。
然后创建工程。
在魔术棒中勾选Use MicroLIB
unsigned char ReciveBuffer;
在全局定义一个缓存用以存储中断接收到的数据。
HAL_UART_Receive_IT(&huart1,&ReciveBuffer,sizeof(ReciveBuffer));
初始化的时候需要启动串口中断。
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
if (huart->Instance == USART1) // 判断是哪个UART触发了中断
{
// 处理接收到的数据
HAL_UART_Transmit(&huart1,&ReciveBuffer,sizeof(ReciveBuffer),0);//将接收到的数据发送出去
// 可以再次启动中断接收
HAL_UART_Receive_IT(huart, &ReciveBuffer, sizeof(ReciveBuffer));
}
}
接着编写串口的中断回调函数,我们将接收到的数据发送回PC机。
可以看到,我们发送的数据被原原本本的发送回来了。
串口的重定向
重定向在计算机科学中是一个常见概念,特别是在操作系统和编程语言中。在C语言中,标准输入输出库(stdio.h)提供了标准的输入输出流,如 stdin,
stdout, 和
stderr。这些流默认连接到键盘和显示屏(或者命令行控制台),但是C语言也提供了机制来重定向这些流到其他的输入输出源,比如文件、管道或者其他设备。
串口的重定向可以非常方便的让我们解决发送的格式问题,可以看到,其实使用
HAL_UART_Transmit发送文本是比较麻烦的,C语言的标准库中有printf函数可以方便的让我们实现指定格式的发送,那么如何将printf函数和串口结合到一起呢?
#include <stdio.h>
我们首先需要导入 C语言标准输入输出库,这样子我们就可以使用printf函数了。 通过重写 fputc 函数,可以控制 printf 函数的输出,因为
printf 最终会调用 fputc 来逐个字符地写入输出。通过将这些字符发送到串口,实现了将标准输出重定向到串口的目的。
int fputc(int ch, FILE *f) {
// 发送单个字符
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
// 返回发送的字符
return ch;
}
while (1) {
/* USER CODE END WHILE */
printf("Hellorn");
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
正弦波示例
while (1) {
float t = 0;
/* USER CODE END WHILE */
printf("A:%lfrn",sin(t));//正弦波
t+=0.01;
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
正弦波相加
while (1) {
static float t = 0;
/* USER CODE END WHILE */
printf("A:%lfrn",sin(t)+sin(10*t));//正弦波相加
t+=0.01;
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
正弦波相乘
while (1) {
static float t = 0;
/* USER CODE END WHILE */
printf("A:%lfrn",sin(t)*sin(100*t));
t+=0.001;
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
热门推荐
失业保险常驻地怎么填?一文详解失业保险登记相关问题
演唱会助杭州文旅消费创新高,数智化方案让“流动的GDP”留住
澳大利亚科学家研发新型载药3D打印薄膜:“剿灭”癌细胞,癌症治疗的新里程碑
做酱牛肉,直接腌制还是先焯水?大厨教我正确方法,香嫩又入味
30年秘制酱牛肉配方,原来诀窍在这里,酱香十足,怎么切都不散
【健康科普】不要“肝”着急,丙肝可治愈!
《大奉打更人》:这六处改编,让“原著粉”不太满意
歌声与泪光中绽放“生命光芒”,音乐剧《赵氏孤儿》亮相大湾区中国戏剧文化节
一文熟悉人形机器人关键零部件:编码器
昆虫的个体发育和羽化过程
PCB产业的新技术革命:引领电子制造未来
癌症筛查别盲目 一文了解这4种癌症筛查
如何在金融投资中合理配置资产?这种资产配置如何适应不同市场阶段?
2025香港特区薪酬指南
婚假丧假法律规定解析:员工权益保障与合理安排
肩胛背神经卡压综合症治疗
HCIE数通认证备考指南:从理论到实践的全方位攻略
二手房交易必读:房屋检查全流程指南
醉驾方全责时的赔偿责任与法律惩处
生成式 AI 和 LLM 的工作原理
从退休制度改革看我国养老产业前景与法律服务机遇
C#开发工程师岗位需求深度解析:从入门到架构师的技术进阶之路
项目如何优化工作目标
漩涡一族血继限界是什么 漩涡一族有没有血缘界限
武汉身份证过期换证办理指南!照片还能自己拍→
甲减性心脏病的症状和表现有哪些
中医辨证治疗慢阻肺的方法
住宿费发票:如何正确开具和报销的全面指南,省心小贴士
《炉石传说》宇宙牧牛卡组构建策略
酸枣仁可以泡水喝吗 酸枣仁泡水喝的五大禁忌