STM32F103串口设置7bit数据位2bit停止位

前言

stm32f103c8t6的uart本身不支持7位数据位和2位停止位模式,所以需要基于8位数据位1位停止位工作模式,通过代码,将发送的数据最后一位变更成停止位来模拟7位数据位和2位停止位。

实现

串口配置,维持8/1不变

1
2
3
4
5
6
7
8
9
   USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USARTx, &USART_InitStructure);
USART_Cmd(USARTx, ENABLE);

发送数据处理,将数据最后一位置1

1
2
3
4
5
6
7
static void ProcessSendData(uint8_t *SendData,uint8_t len)
{
for(uint8_t i=0 i<len;i++)
{
SendData[i]=SendData[i]|0x80;
}
}

接收数据处理,将数据最后一位置0

1
2
3
4
5
6
7
static void ProcessRecieveData(uint8_t *RecData,uint8_t len)
{
for(uint8_t i=0 i<len;i++)
{
RecData[i]=RecData[i]&0x7F;
}
}