USART串口笔记

一.stm32通信模块

二.串口参数及时序

 2进制里,1波特=1bit

三.USART

1 .事项

1.硬件流控制:防止发送过快覆盖数据

2.APB2:USART1

   APB1:USART2、USART3

2.内部结构

3.步骤

(1)打开USART和GPIO的时钟

(2)GPIO初始化:TX设为复用输出,RX为输入

(3)配置USART结构体

(4)接收:配置NVIC和ITConfig

 四.函数

1.配置时钟输出

void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct);

 void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct);

2. 开启USART到DMA触发通道

 void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState);

3.发送数据

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

4.接收数据

uint16_t USART_ReceiveData(USART_TypeDef* USARTx);  

五.Ascll码 

六.串口事项

1. printf和sprintf

用printf只能在一个串口打印

用sprintf先打印到数组,再用Serial_SendString()

 2.封装springtf(C语言可变参数)

(1)#include "stdarg.h"

void Serial_Printf(char *format,...)

void Serial_Printf(char *format,...)

{

va_list arg;                             //定义一个参数变量

va_start(arg,format);             //从format中接收参数表放在arg里
vsprintf(String,format,arg);

 va_end(arg);                          //释放参数表
 Serial_SendString(String);

}

七.串口发送 

中断/查询

1.查询:在主函数不断调用(一般不用)

if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==SET)
 {
        RxData=USART_ReceiveData(USART1);
        OLED_ShowHexNum(1,1,RxData,2);

 }

2.中断,配置NVIC

八 .UTF-8乱码问题

c/c++处写

--no--multibyte-chars

九.串口数据包 

 1.HEX数据包发送

(1) 包头包尾和数据载荷重复

1.限制载荷数据范围,对数据进行限幅,例如0~100;

2.使用固定长度数据包

3.增加包头包尾数量,例如:FF FE为包头,FD FC为包尾

2.HEX数据包接收 

“数据包” 

1.定义状态(画几个圈)

2.。。。

3.文本数据包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值