注册 登录
查看: 760|回复: 10

[电磁组] 串口中断接收问题

[复制链接]
发表于 2014-3-12 20:30:57 | 显示全部楼层 |阅读模式
我用的是蓝牙设备(千月BlueSoleil),
单独写个程序串口中断接收,可以接收,程序运行正常,在labview的窗口也可以看到实时更新的曲线。

但是我把它写到小车程序里后,就出现了以下几种情况:
1.不能接收,主程序卡死在uart_getchar (UART0)语句,labview的窗口看到曲线暂停,不再更新;
2.可以接收几次(10次一下),再接收的时候就不能接受了,并且出现了“1.”中的情况。
所以不知道到底是哪里除了问题,串口中断程序都是一样的啊!!!!!!!!!

我搜了一些帖子,有人说是其他中断干扰的,但是如图
  1. void USART0_IRQHandler(void)
  2. {
  3.     DisableInterrupts;        //关总中断
  4.     UART_IRQ_DIS(UART0);           //关串口中断
  5.   
  6.     //接收到一组数据
  7.     Kp= uart_getchar (UART0);
  8.     Ki= uart_getchar (UART0);
  9.     Kd= uart_getchar (UART0);

  10.     UART_IRQ_EN(UART0);        //开串口中断        
  11.     EnableInterrupts;         //开总中断
  12. }
进中断就关了总中断,其他中断是不会干扰串口中断的。


我们的程序除了串口中断就只有3个中断了:
1.void PIT0_IRQHandler(void),10ms一次,用于电感采样
2.void PIT1_IRQHandler(void),100ms一次,用于测速
3.void LPT_Handler(void),低功耗计时器中断



请各位大神分析下是哪里出了问题。



回复

使用道具 举报

发表于 2014-3-12 20:36:01 | 显示全部楼层

回帖奖励 +1

UART 中断接收配置为最高优先级,另外配置一下优先级分组
回复 支持 反对

使用道具 举报

发表于 2014-3-12 20:37:16 | 显示全部楼层
如果发送的数据过快,而中断服务不能及时进入中断,就会出现丢失数据的问题,就会导致卡死
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-12 20:51:25 | 显示全部楼层
本帖最后由 majiyong 于 2014-3-12 21:01 编辑
危隽洁 发表于 2014-3-12 20:37
如果发送的数据过快,而中断服务不能及时进入中断,就会出现丢失数据的问题,就会导致卡死

那这种问题该怎么处理啊。
我觉得不是这个问题,因为我单独写程序测试的时候都没碰到过这种问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-12 20:52:10 | 显示全部楼层
危隽洁 发表于 2014-3-12 20:36
UART 中断接收配置为最高优先级,另外配置一下优先级分组

中断优先级怎么设置啊,山外3天里没介绍
回复 支持 反对

使用道具 举报

发表于 2014-3-12 21:09:06 | 显示全部楼层
majiyong 发表于 2014-3-12 20:52
中断优先级怎么设置啊,山外3天里没介绍

Coertx-M4系列 中断嵌套的 说明 - 智能车资料区 - 山外-vcan123论坛 http://www.vcan123.com/forum.php ... ;tid=959&ctid=1
回复 支持 反对

使用道具 举报

发表于 2014-3-12 21:09:27 | 显示全部楼层
majiyong 发表于 2014-3-12 20:51
那这种问题该怎么处理啊。
我觉得不是这个问题,因为我单独写程序测试的时候都没碰到过这种问题

因为单独程序,他本身就相当于最高优先级
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-12 22:21:15 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-12 21:09
因为单独程序,他本身就相当于最高优先级

!<arch>
/               1333286536  0     0     420     5754      `


在例程的工作空间CMSIS文件夹下只有这么一个代码,这是什么东西。我的小车程序里没有CMSIS文件夹,没问题吧
回复 支持 反对

使用道具 举报

发表于 2014-3-12 22:22:19 | 显示全部楼层
majiyong 发表于 2014-3-12 22:21
!
/               1333286536  0     0     420     5754      `

这个不是代码,而是编译好的库文件。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-12 22:37:51 | 显示全部楼层
本帖最后由 majiyong 于 2014-3-12 22:40 编辑
山外メ雲ジ 发表于 2014-3-12 21:09
Coertx-M4系列 中断嵌套的 说明 - 智能车资料区 - 山外-vcan123论坛 http://www.vcan123.com/forum.php? ...
  1.   /********设置中断优先级********/
  2.   void NVIC_SetPriorityGrouping(0);
  3.   void NVIC_SetPriority(USART0_IRQHandler,0);
  4.   void NVIC_SetPriority(LPT_Handler,1);
  5.   void NVIC_SetPriority(PIT1_IRQHandler,2);
  6.   void NVIC_SetPriority(PIT0_IRQHandler,3);
那个帖子看的不是很懂,上面那个是我写的,但是出了9个错误。

下面那段解释也没看懂,你可以细讲一下么:

优先级可分为 抢占优先级 (4bit 里的高位) ,和 亚优先级(4bit 里的低位)
只有 抢占优先级 高的 才可以 打断低抢占优先级的 中断,形成 中断嵌套。

NVIC_SetPriorityGrouping 就是指定如何在 4bit 优先级里区分 抢占优先级 和 亚优先级。
PriorityGroup 范围为 0~ 4 :
PriorityGroup = 0表示 0bit 抢占优先级  ,4bit 亚优先级 (默认的,由于都是相同抢占优先级,所以不支持中断嵌套)
PriorityGroup = 1表示 1bit 抢占优先级  ,3bit 亚优先级 (2个抢占优先级)
如此类推……  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-12 22:41:50 | 显示全部楼层
山外メ雲ジ 发表于 2014-3-12 22:22
这个不是代码,而是编译好的库文件。

那我需要加进我的程序里吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部