在用STM32F103 迷你板和战舰板 的串口发送数据时
无论采用串口一还是串口二
只要采用偶校验的方式
只要数据的高四位是0,就会被自动改成8
例如:想要发送0x01,串口调试助手接收到的数据就会变成0x81
试过不同的调试助手结果都会是这个样子
串口的中断函数里 只有一句USART_ClearITPendingBit(USARTx,USART_IT_RXNE);
主函数中内容为:
int main(){
u16 t;
u16 len;
u16 times=0;
uint16_t camd[17]={0xFC,0xFC,0xFC,0x03,0x08,0x08,0x08,0x8,0x4,0x50,0x00,0x00,0x22,0x22,0x22,0x74};
u8 *p;
delay_init(); //ÑÓʱº¯Êý³õʼ»¯
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
uart2_init(9600); //´®¿Ú³õʼ»¯Îª115200
uart_init(9600);
while(1)
{
USART_SendData(USART2, 0xFF);//Ïò´®¿Ú1·¢ËÍÊý¾Ý
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
USART_SendData(USART1, 0xFF);//Ïò´®¿Ú1·¢ËÍÊý¾Ý
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
for(t=0;t<16;t++)
{
USART2->DR = (camd[t]& (uint16_t)0x01FF);
//这里曾经实验过USART_SendData(USARTx, camd[t]);问题同样会产生
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
}
delay_ms(5000);
}
return 0;
}
由于底层系统的原因,校验方式只能选用偶校验
请问各位,产生这种现象的原因是什么?该如何解决?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
发送八位数据时,对于STM32来说,要采用9位数据模式,因为校验位也属于数据内容。
一会上机试一下,试过之后给大家答复
一周热门 更多>