求助大神,STM8s遇到某个字节无法发送的问题,该如何解决?
我用STM8s发送字节,在pc端用串口助手接收查看,比如发送
UART_SendChar(0x18);
UART_SendChar(0x17);
UART_SendChar(0x16);
UART_SendChar(0x15);
UART_SendChar(0x14);
UART_SendChar(0x13);
UART_SendChar(0x12);
UART_SendChar(0x11);
UART_SendChar(0x10);
但是串口助手只能接收到7个字节,18、17、16、16、14、12、10。而13 和11无法接收到,STM8s没有把这两个字节传输出来。串口初始化的代码如下
void Uart_Init(void)
{
UART1_CR1 = 0x00; // b5 = 0,允许UART, b2 = 0,禁止校验
UART1_CR2 = 0x00; // 禁止串口发送、接收
UART1_CR3 = 0x00; // b5,b4 = 00,1个停止位
// 设置波特率,必须注意以下几点:
// (1) 必须先写BRR2
// (2) BRR1存放的是分频系数的第11位到第4位,
// (3) BRR2存放的是分频系数的第15位到第12位,和第3位到第0位
// 对于波特率2400时,分频系数=2000000/2400=833
// 对应的十六进制数为341,0000 0011 0100 0001 , BBR1=34,BBR2=01
//9600波特率下 分频系数208,BBR1=D0,BBR2=00
UART1_BRR2 = 0x00;
UART1_BRR1 = 0x0D;
UART1_CR2 = 0x2C; // b3 = 1,允许发送, b2 = 1,允许接收,b5 = 1,允许产生接收中断
}
void UART_SendChar(unsigned char ch)
{
while((UART1_SR & 0x80) == 0x00); // 若发送寄存器不空,则等待
UART1_CR2= 0x00; //发送使能禁止
UART1_DR = ch; // 将要发送的字符送到数据寄存器
UART1_CR2= 0x08; //发送使能禁开启
while((UART1_SR & 0x40) == 0x00); //发送是否完成
}复制代码