完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32F103,4路串口中断接受没有问题,单测外部中断也没有问题,放在一起的时候,出问题了,外中断能影响串口中断(选用的是下降沿中断,单侧是没有问题的,和串口中断在一起的时候,发现串口丢数据了,而且在按键没有抬起时,串口不能接受了,在主循环里一个流水等也不流了)反复改NVIC里的中断优先级了,4路串口在115200 100MS定时发送500字节左右,都能正确响应(中断函数里就是收到什么在回发出来),同时定时器里控制灯闪和主程序里流水也没问题。好几天了,哪位给指教一下,对NVIC里的优先级什么的搞的云里雾里的,呵呵要求外中断级别是最低的,不能影响串口
俺在线等结果呢,在好几个群里发了问,都无人回应!! void EXti_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; /*********************外部中断0配置*************************/ GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1); //把PA.0设置为外部中断0 EXTI_DeInit(); //将EXIT寄存器重设置为缺省值 EXTI_InitStructure.EXTI_Line = EXTI_Line1; //设置外部中断线0 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//EXTI_Mode_Interrupt; EXTI_Mode_Event //设置EXTI线路为重点请求 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //设置输入线路为下降沿为中断请求 EXTI_InitStructure.EXTI_LineCmd = ENABLE; //中断使能 EXTI_Init(&EXTI_InitStructure); //EXTI_GenerateSWInterrupt(EXTI_Line1); } void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; #ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); #else /* VECT_TAB_FLASH */ /* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); #endif NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); // 设置先占优先级2位,从优先级2位 ; // Enable the TIM2 global Interrupt /* NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel; // TIM2 全局中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 先占优先级 0 ; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 从优先级 0 ; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // IRQ通道被使能 ; NVIC_Init(&NVIC_InitStructure); */ // Enable the TIM3 Interrupt NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel; // TIM3 全局中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 先占优先级 1 ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; // 先占优先级 0 ; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // IRQ通道被使能 ; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel; // USART1 全局中断 ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel; // USART2 全局中断 ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); */ /* NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQChannel; // USART3 全局中断 ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4; // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); */ /* NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQChannel; // USART4 全局中断 ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5; //NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); */ /* */ NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQChannel;//EXTI0_IRQChannel;//设置外部中断0 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//主优先级为4 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//从优先级为4 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//中断使能 NVIC_Init(&NVIC_InitStructure); } void USART2_IRQHandler(void) { u8 mm,i,p,n; if(USART_GetITStatus(USART2, USART_FLAG_ORE) != RESET) { mm=(u8)(USART_ReceiveData(USART2)); USART_SendData(USART2,mm); } } void UART4_IRQHandler(void) { u8 mm,i,p,n; //USART_SendData(USART1,'<'); if(USART_GetITStatus(UART4, USART_FLAG_RXNE) != RESET) { mm=(u8)(USART_ReceiveData(UART4)); USART_SendData(UART4,mm); } //USART_SendData(USART1,'>'); } 最开始调试的时候在中断里一直判断这个USART_FLAG_RXNE,后来在把4个串口都打开的时候在判断这个不行了,程序一直在这个中断里不出来,所以就判断USART_FLAG_ORE这个,目前串口还没问题,这个我稍后在查 |
|
相关推荐
5个回答
|
|
|
|
|
|
从0 到4 我都实验过
|
|
|
|
您给说个数吧,我按照这个数填上好用了我在理解一下,您给说个数吧,能把串口1中断高于外中断就可以,其他的不先不管,我实验一下
|
|
|
|
组1.
抢占0,sub0>sub1>sub2>***u3...>sub7, 抢占1,sub0>sub1>sub2>sub3...>sub7 而抢占0>抢占1. 所以(0,x)>(1,x) |
|
|
|
谢谢原子兄,我实验一下,呵呵
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1712 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1600 浏览 1 评论
1038 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
715 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1651 浏览 2 评论
1903浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
694浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
546浏览 3评论
567浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
533浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-11 15:50 , Processed in 1.173923 second(s), Total 87, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号