关于串口学习的总结 HAL库 STM32CubeMX

  1. 串口通信数据组成:开始位 数据位(8位或9位,单个数据为1或0)校验位(可能有可能无,奇或偶校验,即数据中的一的个数,或0的个数) 结束位(先高后低)在这里插入图片描述

  2. 波特率:越高数据传输速率越快,但可能越不稳定 常用 115200 9600 与时钟频率有关 ,

  3. 串口相关函数
    取得接受状态,若接受完成返回HAL_OK在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  4. DMA direct memory access 直接寄存器访问
    DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。

在这里插入图片描述
在这里插入图片描述

串口通信: Asynchronous 异步串口通信
在这里插入图片描述

阻塞式发送函数 :只有再发送完这数据,单片机才能做其他事情
在这里插入图片描述

非阻塞式发送完后进入中断,调用回调函数
在这里插入图片描述
在这里插入图片描述

接受函数
在这里插入图片描述

串口的·调用也要再 初始化函数后面哦
自己修改串口波特率的计算方法
在这里插入图片描述

不过cubemx生成的HAL库中可以直接修改

6.个型号log打印

扫描二维码关注公众号,回复: 12899121 查看本文章

重定向printf函数 可以直接printf函数打印字符串到串口

#include<stdio.h>
int fputc(int ch,FILE*f)
{
    
    
    HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xFFFF);
    return ch;
}
#define   USER_MAIN_PRINTF
#ifdef   USER_MAIN_PRINTF
#define  USE_MAIN_INFO(format,...)    printf("\t[main info] "format "\r\n",##__VA_ARGS__)
#define  USE_MAIN_DEBUG(format,...)   printf("\t[main debug]"format"\r\n",##__VA_ARGS__)
#define  USE_MAIN_ERROR(format,...)   printf("\t[main error]"format"\r\n",##__VA_ARGS__)
#define   _DEBUG_                  printf("test\r\n");
#else
#define  USE_MAIN_INFO(format,...)  
#define  USE_MAIN_DEBUG(format,...)   
#define  USE_MAIN_ERROR(format,...) 
#define   _DEBUG_  
#endif

使用预编译 调试的时候宏定义

#define   USER_MAIN_PRINTF

r然后就可以调用这些打印函数

USE_MAIN_INFO(format,...)//format 为一个字符串 "dawn_zs",  ...为可以加的数据参数

而当你调试完之后,不再需要这些穿插在工程中的打印时候
直接将宏定义的USER_MAIN_PRINTF删除就行了

#define         // 将USER_MAIN_PRINTF删除 

在这里插入图片描述

当然还可以调用stdio.h中的 sprintf 函数

另外还有可以直接将第一种方法作为一个模板复制到keil自带的粘贴板上
步骤如下
EDit /configuration/ text completion
选中一个复制进去

在这里插入图片描述
在这里插入图片描述
然后平常就可以直接在这里调用,双击,就会出现。
在这里插入图片描述
以上时近期关于串口的使用方法,技巧的总结
如果对您有用的话,麻烦点赞收藏。

猜你喜欢

转载自blog.csdn.net/m0_52521883/article/details/113448858