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

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

查看全部评分

12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版