你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8S 串口通讯问题

[复制链接]
annQian 提问时间:2018-7-16 15:10 /
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[i];
    }  
        rece_flag=0;  
    GPIOD->ODR &=~GPIO_PIN_7;//receive
}
   
  }
程序每次执行到for循环,只能执行一次,走到i++时,程序跑飞,是怎么回事?
收藏 评论12 发布时间:2018-7-16 15:10

举报

12个回答
原来的你 回答时间:2018-7-16 16:27:55
data[i]是不是越界了

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

annQian 回答时间:2018-7-16 16:50:23
data 的长度是3,应该没越界。
子曰好人 回答时间:2018-7-16 18:35:39
while循环加个延时,发送速率降低一点,你是怎么判定程序已经跑飞了的?

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

annQian 回答时间:2018-7-17 08:30:28
发送速率是9600,很低了,在STM32芯片上也是这么操作的;
执行i++时,程序的单步执行就进行不了,会直接变成运行状态。
wudianjun2001 回答时间:2018-7-17 08:50:41
有没有开中断什么的,是不是别的地方影响了

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

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++时,程序的单步执行就进行不了,会直接变 ...

额,尽量点回复,不要跟帖,我都不知道你回复我了,我的意思是发送一次数据之后隔一段时间再发送看看什么情况,如果方便把程序上传上来帮你看看
STM1024 回答时间:2018-7-20 17:36:48
调试的时候试试这一句:UART1->DR = data;
检查一下DR中的数据是否得到了写入。
顺便问一下,你的硬件连接,不会是把TX和RX直接短接吧?

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

vilsenma 回答时间:2018-7-20 19:01:38
是全部代码了吗?是不是‘i’没有定义啊

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

vilsenma 回答时间:2018-7-20 19:01:56
是全部代码了吗?是不是‘i’没有定义啊
vilsenma 回答时间:2018-7-20 19:22:20
感觉你还是读一下寄存器的值,好好对比一下哪里的标志位变化了
annQian 回答时间:2018-7-22 15:44:56
部分代码。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版