在一个项目中,使用了主板和辅板.主板使用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,而且有的时候数据还不稳定。两个串口都是如此,不知道是为什么? |