极客秀
搜索

基于HAL库和CubeMX的STM32 串口通信以及重定向

串口UART,作为基础的一种通信协议应该是我们接触的最早的通信协议,有许多芯片和模块可以利用串口来进行通信。
本期我们介绍如何使用CubeMX实现STM32的串口通信以及对printf等函数的重定向。

首先打开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 */  }

正弦波相加


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 */  }

正弦波相乘


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 */  }


1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容