论坛元老
- 积分
- 4493
- 金钱
- 4493
- 注册时间
- 2016-8-2
- 在线时间
- 51 小时
|
本帖最后由 shaozp 于 2017-7-12 11:45 编辑
由于项目需要,将单片机F103 的USART3 的波特率配置成了1228800bps,串口接收数据都是可以的,但是串口发送数据 的时候第一个和第二个字节就会出错。
比如我发送:01 02 03 04 这样的数据包,发送出去之后就每次都会变成 CC C2 03 04
但是第一个字节要是变成 00 02 03 04 发送之后数据发送包就会正常,有一定的概率出现 错误,但是还可以接受
有人这样子用过吗?
[mw_shl_code=c,true]void USART3Write(u8 *data, u16 len)
{
u16 i;
USART3_Recive_flg = 0; //数据发送的时候将接收模式清零
USART3_Recive_leng =0; //将接收数据长度清零
USART_ClearFlag(USART3,USART_FLAG_TC);
USART3_485_H;//发送模式
for (i = 0; i < len; i++)
{
USART3_SendByte(data);
}
USART3_485_L;//接收模式
}
void USART3_SendByte(u16 Data)
{
while (!(USART3->SR & USART_FLAG_TXE)); //等待数据从软件拷贝到硬件进行发送
USART3->DR = (Data & (uint16_t)0x01FF);
while (!(USART3->SR & USART_FLAG_TC));//硬件数据发送完毕
}
void USART3_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE); //使能APB2外设的GPIOA的时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
/* 配置USART3-TX脚PC10 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* 配置USART3-RX脚 PC11*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
//USART3_R/D PA12
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART3_485_L;//接收模式
//将USART3的TXD和RXD重映射到PC10和pc11
GPIO_PinRemapConfig(GPIO_PartialRemap_USART3,ENABLE);
USART_InitStructure.USART_BaudRate = 1228800; //液晶面板进行配置1.2M
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(USART3, &USART_InitStructure);
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); //打开接收中断
USART_ITConfig(USART3, USART_IT_IDLE, ENABLE); //打开接收完毕中断
USART_Cmd(USART3, ENABLE);
}
[/mw_shl_code]
|
|