| 
 
| 在一个项目中,使用了主板和辅板.主板使用stm8s105c4。串口是为2;所以使用了如下程序: void uart_init(void)
 {
 PD_DDR |=0xa0;//10100000
 PD_CR1 |=0xa0;//10100000
 PD_CR2 |=0x00;//00000000
 
 UART2_CR2=0;
 UART2_CR1=0;
 UART2_CR3=0;
 UART2_BRR2=0x00;
 UART2_BRR1=0X0d;//2000000/9600=208(0xd0)
 UART2_CR2=0X2C; //允许发送/中断接收 */
 }
 
 void UART_send(u8 ch)
 {
 while((UART2_SR & 0X80)==0X00);
 UART2_DR=ch;
 while((UART2_SR & 0X40)==0X00);
 }
 
 发送数据完全正常。
 
 
 但是使用stm8s207s8单片机,因为需要使用两个串口,所以选择了这个型号串口为1和3。
 同样程序如下:
 void uart_init(void)
 {
 PD_DDR |=0xa0;//10100000
 PD_CR1 |=0xa0;//10100000
 PD_CR2 |=0x00;//00000000
 
 PA_DDR |=0x60;//01100000
 PA_CR1 |=0x60;//01100000
 PA_CR2 |=0x00;//00000000
 
 UART3_CR2=0;
 UART3_CR1=0;
 UART3_CR3=0;
 UART3_BRR2=0x00;
 UART3_BRR1=0X0d;//2000000/9600=208(0xd0)
 UART3_CR2=0X2C; //允许发送/中断接收
 
 UART1_CR2=0;
 UART1_CR1=0;
 UART1_CR3=0;
 UART1_BRR2=0x00;
 UART1_BRR1=0X0d;//2000000/9600=208(0xd0)
 UART1_CR2=0X2C; //允许发送/中断接收
 }
 void UART1_send(u8 ch)
 {
 while((UART1_SR & 0X80)==0X00);
 UART1_DR=ch;
 while((UART1_SR & 0X40)==0X00);
 }
 void UART3_send(u8 ch)
 {
 while((UART3_SR & 0X80)==0X00);
 UART3_DR=ch;
 while((UART3_SR & 0X40)==0X00);
 }
 
 这个时候我如果发送0x01,但是通过串口软件接收到的是0x81。发送0x0f,接受到的是0x8f,而且有的时候数据还不稳定。两个串口都是如此,不知道是为什么?
 | 
 |