-
串口通信数据组成:开始位 数据位(8位或9位,单个数据为1或0)校验位(可能有可能无,奇或偶校验,即数据中的一的个数,或0的个数) 结束位(先高后低)
-
波特率:越高数据传输速率越快,但可能越不稳定 常用 115200 9600 与时钟频率有关 ,
-
串口相关函数
取得接受状态,若接受完成返回HAL_OK
-
DMA direct memory access 直接寄存器访问
DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
串口通信: Asynchronous 异步串口通信
阻塞式发送函数 :只有再发送完这数据,单片机才能做其他事情
非阻塞式发送完后进入中断,调用回调函数
接受函数
串口的·调用也要再 初始化函数后面哦
自己修改串口波特率的计算方法
不过cubemx生成的HAL库中可以直接修改
6.个型号log打印
重定向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
选中一个复制进去
然后平常就可以直接在这里调用,双击,就会出现。
以上时近期关于串口的使用方法,技巧的总结
如果对您有用的话,麻烦点赞收藏。