OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9765|回复: 4

STM32F407 uc/os3 串口中断进不去,大神帮帮忙,我接触没几天,拜托了!

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-4-22
在线时间
0 小时
发表于 2015-4-22 20:23:55 | 显示全部楼层 |阅读模式
5金钱
我主程序就是1号灯的200ms闪烁,usart2串口中断,中断程序是2号灯的反转。正常现象应该是1号灯闪烁,然后我发送个串口数据,然后2号灯反转一下,以此循环。  但是实际现象是,我没发送串口数据时,1号灯200ms闪烁,当我发送一个串口数据时,1号灯不闪了,2号灯也没反应。然后不论怎样,2个灯都不变了。  这是一个很简单的程序,大神估计看一下就能知道我哪错了,但是我找了好几天了啊,一直单步也找不到,拜托了!
[mw_shl_code=c,true]int main(void) { OS_ERR err; BSP_IntInit (); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); CPU_Init(); Mem_Init(); BSP_IntDisAll(); OSInit(&err); /*---------------------Init uC/OS-III---------------------------*/ OSTaskCreate((OS_TCB *)&AppTaskStartTCB, (CPU_CHAR *)"App Task Start", (OS_TASK_PTR )AppTaskStart, (void *)0u, (OS_PRIO )APP_CFG_TASK_START_PRIO, (CPU_STK *)&AppTaskStartStk[0u], (CPU_STK_SIZE )AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE / 10u], (CPU_STK_SIZE )APP_CFG_TASK_START_STK_SIZE, (OS_MSG_QTY )0u, (OS_TICK )0u, (void *)0u, (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), (OS_ERR *)&err); void uart_init(void); uart_init(); OSStart(&err); while (DEF_ON) { }; } void uart_init(void){ USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); USART_DeInit(USART2); GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_USART2); GPIO_PinAFConfig(GPIOD, GPIO_PinSource6, GPIO_AF_USART2); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART2, &USART_InitStructure); /*---------------------interrupt初始化---------------------------*/ NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); void USART2_IRQHandler(void); BSP_IntVectSet(BSP_INT_ID_USART2, USART2_IRQHandler); BSP_IntPrioSet(BSP_INT_ID_USART2,2u); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); USART_Cmd(USART2, ENABLE); } /*---------------------中断程序---------------------------*/ void USART2_IRQHandler(void) { unsigned char ch; if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) { USART_ClearFlag(USART2,USART_FLAG_RXNE); USART_ClearITPendingBit(USART2,USART_IT_RXNE); ch = USART_ReceiveData(USART2); BSP_LED_Toggle(2u); } } static void AppTaskStart (void *p_arg) { OS_ERR err; (void)p_arg; BSP_Init(); BSP_Tick_Init(); BSP_LED_Off(0u); while (DEF_TRUE) { BSP_LED_Toggle(1u); OSTimeDlyHMSM(0u, 0u, 0u, 200u, OS_OPT_TIME_HMSM_STRICT, &err); } }[/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-4-22 20:49:40 | 显示全部楼层
看一下我们的UCOSIII例程中的串口中断是怎么写的
开往春天的手扶拖拉机
回复

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2013-9-11
在线时间
13 小时
发表于 2015-4-22 20:51:16 | 显示全部楼层
void USART1_IRQHandler(void)
{
     OSIntEnter();
     if(USART_GetITStatus(USART1, USART_IT_RXNE )==SET)//接收中断
     {
            USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清楚接收中断标志位
            /******在这写你代码******/
     }
     OSIntExit();  
}
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-4-22
在线时间
0 小时
 楼主| 发表于 2015-4-22 21:01:59 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
谢谢你的回复,找了找论坛里的程序,原子哥的程序是从最底层的寄存器写的,能力有点跟不上,找了一点其他人的帖子,感觉我的没有错误,也可能是我的能力不够,找不到,拜托了!
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-4-22
在线时间
0 小时
 楼主| 发表于 2015-4-22 21:15:27 | 显示全部楼层
回复【3楼】王小才:
---------------------------------
你好,我试了一下,跟以前的状况一样。。。


单步运行到BSP_inthandler 中断处理中, isr就是默认的空函数了,但是我确实写了  BSP_IntVectSet(BSP_INT_ID_USART2, USART2_IRQHandler);   ,  已经给USART2的ID赋值我的中断函数了。  会不会是中间某个地方清了?  然后我把这个赋值指令放到主任务中循环的赋值,然后中断进不去了。。。  发送串口数据没有反应,一直执行主任务。。。  大神们,帮帮忙。。  
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 12:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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