打印
[STM8]

stm8s207s8串口通讯问题

[复制链接]
1341|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ever32|  楼主 | 2016-12-5 16:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在一个项目中,使用了主板和辅板.主板使用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,而且有的时候数据还不稳定。两个串口都是如此,不知道是为什么?
沙发
xyz549040622| | 2016-12-5 21:32 | 只看该作者
碰到过类似的问题,你主频的设置的问题,首先需要确认主频的配置是否是你配置的主频,然后再配置波特率。不过由于你用的都是寄存器,也看不出来是否是程序的问题。

使用特权

评论回复
板凳
发的方12| | 2019-2-18 11:04 | 只看该作者
楼主你有没有解决这个问题呢 我也做东西碰到这样的问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

1

粉丝