找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6365|回复: 13
打印 上一主题 下一主题
收起左侧

STM32串口通讯,接收中断进不去

[复制链接]
跳转到指定楼层
楼主
ID:500189 发表于 2021-4-20 12:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昨天的程序,在线调试还能顺一遍, 今天就串口接收中断进不去了。    硬件连线也检查了 没问题,   现在的情况是  一直卡在主函数的While循环里面,接收不到摄像头发过来的数据,中断函数根本进不去。   求大佬给以方法。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883031 发表于 2021-4-20 15:10 | 只看该作者
检查中断初始化。
回复

使用道具 举报

板凳
ID:518902 发表于 2021-4-20 15:27 | 只看该作者
建议你用软件进行debug,看内部怎么回事
回复

使用道具 举报

地板
ID:500189 发表于 2021-4-20 15:56 | 只看该作者
用Debug看,若主循环里面写函数调用了,  会一直执行   ,  若主循环为空, 则一直在while'(1)处 卡着, 具体在  E7FE  B   0x0800248 处卡卡卡卡      接收中断始终触发不了。   
回复

使用道具 举报

5#
ID:332214 发表于 2021-4-20 17:21 | 只看该作者
1844952977 发表于 2021-4-20 15:56
用Debug看,若主循环里面写函数调用了,  会一直执行   ,  若主循环为空, 则一直在while'(1)处 卡着,  ...

可以确定程序是跑起来了,也没有卡在其他中断源里,stm32 串口外部中断没触发 是不是配置问题?有使能中断源吗?你的中断函数是如何写的?最少发个串口配置函数 加中断处理函数 和主函数初始化了 ,要想找别人提解决思路,最少把问题具体化吧。
回复

使用道具 举报

6#
ID:500189 发表于 2021-4-20 17:29 | 只看该作者
配置这点应该没问题, 因为昨天还是能接收发送的,  现已确定摄像头也是能发送数据的   只是接收中断没触发
  1. if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  2.                 {               
  3.                         LED0=1;
  4.                         
  5.                         Rxbuf[data_cnt++]=USART_ReceiveData(USART1);
  6.                
  7.                 if(state == 0 && Rxbuf[0] == title1)
  8.                 {
  9.                         state = 1;
  10.                 }
  11.                 else if(state == 1 && Rxbuf[1] == title2)
  12.                 {
  13.                         state = 2;
  14.                         data_cnt=0;
  15.                 }
  16.                 else if (state==2)
  17.                 {
  18.                         
  19.                                 state=0;
  20.                                 Data_Processing(Rxbuf,data_cnt);
  21.                         
  22.                 }
  23.                 else
  24.                         state=0;
  25.                         
  26.                 }[code]void uart_init(u32 bound){
  27.    //GPIO端口设置
  28.   GPIO_InitTypeDef GPIO_InitStructure;
  29.         USART_InitTypeDef USART_InitStructure;
  30.         NVIC_InitTypeDef NVIC_InitStructure;
  31.         
  32.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟
  33.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟
  34.   RCC_AHB3PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
  35.         
  36.         //串口1对应引脚复用映射
  37.         GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9复用为USART1
  38.         GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10复用为USART1
  39.         
  40.         //串口2对应引脚复用映射
  41.         GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2);
  42.         GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2);
  43.         
  44.         //USART1端口配置
  45.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10 |GPIO_Pin_2 | GPIO_Pin_3 ;
  46.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
  47.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //速度50MHz
  48.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
  49.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
  50.         GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10


  51.    //USART1 初始化设置
  52.         USART_InitStructure.USART_BaudRate = bound;//波特率设置
  53.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
  54.         USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
  55.         USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
  56.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
  57.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //收发模式
  58.   USART_Init(USART1, &USART_InitStructure); //初始化串口1
  59.         USART_Init(USART2, &USART_InitStructure); //初始化串口2
  60.         
  61.   USART_Cmd(USART1, ENABLE);  //使能串口1
  62.         USART_Cmd(USART2, ENABLE);
  63.         //USART_ClearFlag(USART1, USART_FLAG_TC);
  64.         
  65. //#if EN_USART1_RX        
  66.         USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启相关中断
  67.         USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
  68.         //Usart1 NVIC 配置
  69.   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口1中断通道
  70.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级2      数越小,优先级越高
  71.         NVIC_InitStructure.NVIC_IRQChannelSubPriority =2;                //子优先级2
  72.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
  73.         NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器、

  74.         NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;//串口2中断通道
  75.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3
  76.         NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;                //子优先级3
  77.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
  78.         NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器、


  79. #endif
  80.         
  81. }
复制代码

回复

使用道具 举报

7#
ID:500189 发表于 2021-4-20 17:31 | 只看该作者
最开始传图片时超限了, 不知道还能单独传代码        可以确定程序是跑起来了    硬件接线也查了好多遍。   目前真是不知道咋解决了    还望赐教  谢谢了
回复

使用道具 举报

8#
ID:451718 发表于 2021-4-20 18:19 | 只看该作者
写程序后,重新断电上电再试试
回复

使用道具 举报

9#
ID:725110 发表于 2021-4-20 18:35 | 只看该作者
先试试关闭一个串口,看看能不能正常运行,如果能得话,把一个串口中断换成帧接收中断
回复

使用道具 举报

10#
ID:500189 发表于 2021-4-20 18:38 | 只看该作者
谢谢各位,是供电的问题   已经解决   谢谢
回复

使用道具 举报

11#
ID:973316 发表于 2021-10-19 14:43 | 只看该作者
1844952977 发表于 2021-4-20 18:38
谢谢各位,是供电的问题   已经解决   谢谢

我现在出现几乎和你一模一样的问题,但是怎么也解决不了
回复

使用道具 举报

12#
ID:529629 发表于 2022-7-22 14:40 | 只看该作者
我也出现了这种情况,经过和视频里面的代码一句一句对比,发现是我把使能USART1串口时钟的函数RCC_APB2PeriphClockCmd()写成了RCC_AHB2PeriphClockCmd。所以没打开串口1的时钟。
回复

使用道具 举报

13#
ID:555826 发表于 2023-4-12 11:55 来自手机 | 只看该作者
1844952977 发表于 2021-4-20 18:38
谢谢各位,是供电的问题   已经解决   谢谢

可以问下您是怎么解决的吗 我也遇到同样的问题 板子放了一夜 第二天就进不去中断了
回复

使用道具 举报

14#
ID:883242 发表于 2023-4-15 00:41 | 只看该作者
芷汐 发表于 2023-4-12 11:55
可以问下您是怎么解决的吗 我也遇到同样的问题 板子放了一夜 第二天就进不去中断了

电源电压不足吧?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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