annqian 发表于 2018-7-16 15:10:48

STM8S 串口通讯问题

while(1)//主程序循环,反复执行循环体里的语句
{


   if(rece_flag==3)
{

    GPIOD->ODR |= GPIO_PIN_7;//transmit
    for(i=0 ; i<3; i++)
    {
      if((UART1->SR & 0x80) == 0x80)
   UART1->DR = data;
    }
      rece_flag=0;
    GPIOD->ODR &=~GPIO_PIN_7;//receive
}
   
}
程序每次执行到for循环,只能执行一次,走到i++时,程序跑飞,是怎么回事?

原来的你 发表于 2018-7-16 16:27:55

data是不是越界了

annqian 发表于 2018-7-16 16:50:23

data 的长度是3,应该没越界。

子曰好人 发表于 2018-7-16 18:35:39

while循环加个延时,发送速率降低一点,你是怎么判定程序已经跑飞了的?

annqian 发表于 2018-7-17 08:30:28

发送速率是9600,很低了,在STM32芯片上也是这么操作的;
执行i++时,程序的单步执行就进行不了,会直接变成运行状态。

wudianjun2001 发表于 2018-7-17 08:50:41

有没有开中断什么的,是不是别的地方影响了

annqian 发表于 2018-7-17 10:07:07

有 usart1的接收中断 ,中断中连续接收三个字节,接收个数保存在rece_flag变量中,rece_flag = 3 就把接收的数据发送出去。再收到返回值后才会再次发送。

子曰好人 发表于 2018-7-20 17:19:05

本帖最后由 子曰好人 于 2018-7-20 17:20 编辑

annqian 发表于 2018-7-17 08:30
发送速率是9600,很低了,在STM32芯片上也是这么操作的;
执行i++时,程序的单步执行就进行不了,会直接变 ...
额,尽量点回复,不要跟帖,我都不知道你回复我了:L,我的意思是发送一次数据之后隔一段时间再发送看看什么情况,如果方便把程序上传上来帮你看看

stm1024 发表于 2018-7-20 17:36:48

调试的时候试试这一句:UART1->DR = data;
检查一下DR中的数据是否得到了写入。
顺便问一下,你的硬件连接,不会是把TX和RX直接短接吧?

vilsenma 发表于 2018-7-20 19:01:38

是全部代码了吗?是不是‘i’没有定义啊
页: [1] 2
查看完整版本: STM8S 串口通讯问题