场景是:调试串口的时候,openmv发送过来的数据是一群乱码,通过强制转换为char类型之后发现是乱码,通过oled显示的时候就是一坨。
问题解决
最开始处出现乱码应该要解决的问题应该是波特兰应该保持一致。
后面找了蛮久发现是编码格式不同导致的问题。
opmv默认的数据发送编码格式应该是utf-8
通过以下代码发送数据。
uart.write(data)
print(data)
但是stm32在接收数据之后转换为char类型数据的时候是和keil一样的编码格式解码的,所以在解码的时候,如果stm32不是utf-8的编码格式就很容易乱码。
keil的编码格式修改步骤
这样调整之后就可以接收到数据就好了。
stm32端的接收代码是
(设置一次接受8位数据)
int bz;
uint8_t redata[8];
void USART1_IRQHandler(void)
{
if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
{
Serial_RxData = USART_ReceiveData(USART1);
Serial_RxFlag = 1;
//正式数据
//存入缓冲区
redata[bz]=(char)Serial_RxData;
bz++;
if (bz == 8)
{
bz=0;
}
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
}