1. bread88lifa利发国际娱乐论坛/
  2. 嵌入式论坛/
    1. 电子论坛综合区
    2. 嵌入式论坛
    3. 电源技术论坛
    4. 硬件设计论坛
    5. 测试测量论坛
    6. 检测技术与质量
    7. EDA设计论坛
    8. 综合技术与应用
    9. 开源硬件
    10. IC设计论坛
    11. 消费电子论坛
    12. 无线通信论坛
    13. 个人版区
    14. 厂商专区
    15. 论坛服务区
    16. 高校联盟
    17. 供求信息发布
  3. 单片机/MCU论坛
    1. ARM技术论坛
    2. Android论坛
    3. Linux论坛
    4. FPGA|CPLD|ASIC论坛
    5. DSP论坛
    6. 嵌入式系统论坛
  4. / STM32/STM8技术论坛
  5. / 串口收发数据问题
    关闭提示

[问答] 串口收发数据问题

[复制链接]
技术员
发表于 2017-10-11 17:06:51   397 查看 8 回复 只看该作者 倒序浏览
分享

void USART1_IRQHandler(void)                  //接收中断函数,接收数据
{
         
         if(USART_GetITStatus(USART1, USART_IT_RXNE)!= RESET)
             {
                     delay_ms(5);
                          res=USART_ReceiveData(USART1);            //res是一个全局变量
                 }
       
}                                         
int main(void)
{

         gpioa_init();     //设置PA9,PA10引脚
          usart_init1();   //usart1初始化
          nvic_USART1_init();  //接收中断优先级设置
      while(1)
         {
                                          delay_ms(100);
                                         USART_SendData(USART1,res);
                                         while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
                 }                                                               
}

仿真测试出口1收发数据,运行的时候无法进入中断函数,不知道是什么问题?但是单独发送可以发送数据到电脑串口助手上。我是想将电脑发送的数据再用程序返发送回电脑,但程序就是无法接收。

奖励8积分
人中狼 2017-10-11 接收中断程序错了,直接接收数据就可以了
void USART1_IRQHandler(void)
{
        receive_data = USART_ReceiveData(USART1);
        USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}

标签:STM32 串口
举报
高级工程师
发表于 2017-10-11 17:06:52  
接收中断程序错了,直接接收数据就可以了
void USART1_IRQHandler(void)
{
        receive_data = USART_ReceiveData(USART1);
        USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}

回复 点赞 举报
高级工程师
发表于 2017-10-11 17:24:52  

PCB在线计价下单

板子大小:

cm
X
cm

层数:

2

板子数量:

10

厚度:

1.6
这类程序应该是在接收中断里设置一个接收标志,当这个标志有效时,代表接收到数据。
而主程序则不停的判断这个接收标志,判断到接收标志为有效时,才进行必要的处理,在你这就时当标志有效时,才将接收到的数据发送出去。
回复 点赞 举报
技术员
发表于 2017-10-12 09:07:08    楼主|
人中狼 发表于 2017-10-11 17:24
这类程序应该是在接收中断里设置一个接收标志,当这个标志有效时,代表接收到数据。
而主程序则不停的判断这个接收标志,判断到接收标志为有效时,才进行必要的处理,在你这就时当标志有效时,才将接收到的数据发送出去。 ...

我这是根本没进中断啊,所以即使有接收标志也没用,我的中断也是打开的,PA10 RX脚也是浮空输入,没有理由不进中断啊
回复 点赞 举报
技术员
发表于 2017-10-12 09:08:00    楼主|
人中狼 发表于 2017-10-11 17:24
这类程序应该是在接收中断里设置一个接收标志,当这个标志有效时,代表接收到数据。
而主程序则不停的判断这个接收标志,判断到接收标志为有效时,才进行必要的处理,在你这就时当标志有效时,才将接收到的数据发送出去。 ...

我这是根本没进中断啊,所以即使有接收标志也没用,我的中断也是打开的,PA10 RX脚也是浮空输入,没有理由不进中断啊
回复 点赞 举报
高级工程师
发表于 2017-10-12 09:28:34  
对串口的三个设置程序没有贴出来,不知道有没有错误,串口中断程序里的延时程序时不需要的,进了串口中断程序,就代表数据已经接收到了,不需要做延时的。
回复 点赞 举报
高级工程师
发表于 2017-10-12 09:29:04  
对串口的三个设置程序没有贴出来,不知道有没有错误,串口中断程序里的延时程序时不需要的,进了串口中断程序,就代表数据已经接收到了,不需要做延时的。
回复 点赞 举报
技术员
发表于 2017-10-12 11:33:55    楼主|
现在有新情况了,中断能进去,但是读不了数据,或者说是发送的数据没到串口数据寄存器中去。图中程序运行到读数据语句时就飞了
屏幕截图(90).png (442.75 KB, 下载次数: 1)
屏幕截图(90).png
回复 点赞 举报
技术员
发表于 2017-10-12 12:19:27    楼主|
问题解决了,总结一下2点:1、不能进中断应该是我里面多一个函数,忘了看它,这个函数正好把PA9/10的设置给清除了,PA9/10的模式都变成模拟输入了,但是怎么还可以发送数据呢?这点奇怪。后来不要这个函数就能进中断了。
2、进了中断程序飞掉的问题竟然是不能有那个延时函数的语句,去掉后就正常了。而且加了延时语句后 后面的语句都不能执行,所以才觉得这个延时语句要去掉。
我前面的串口一是做重定向的,在这上面改的,所以就出现了不能进中断,但是中断里面怎么会不能加延时函数呢?再看看再说。
回复 点赞 举报
高级模式
您需要登录后才可以回帖 登录 | 注册
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表
  1. time最新主题
  2. recommend推荐主题
  3. hot热门主题
  4. post 我的帖子
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

我的提问

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

FPGA|CPLD|ASIC论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区

88lifa利发国际娱乐

百度360搜索搜狗搜索