野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12151|回复: 1

关于中断的问题,中断里面的函数执行不下去

[复制链接]
发表于 2017-1-4 20:03:45 | 显示全部楼层 |阅读模式
本帖最后由 Huanjl 于 2017-1-4 20:12 编辑

一个按键中断,按一下key1去执行里面的函数,执行到printf ( "\r\n正在配置 ESP8266 ......\r\n" );这句就不往下执行了?为什么啊?因为ESP8266_Rst ();这句里面也有中断么?还是因为延时的中断(bsp_SysTick.c)?求解答!!!!我觉得问题出在延时上了!调试把延时屏蔽就能往下运行!怎么设置他们三个的优先级?按键中断,延时中断,和串口中断?还是别的修改方法?

void EXTI0_IRQHandler (void)
{
        if(EXTI_GetITStatus(EXTI_Line0) != RESET)
        {
                printf("\r\n按键测试\r\n");
                printf ( "\r\n正在配置 ESP8266 ......\r\n" );
                ESP8266_Rst ();
                printf ( "\r\n测试0\r\n" );
                ......
        }
        EXTI_ClearITPendingBit(EXTI_Line0);
}



wifi串口的中断
void macESP8266_USART_INT_FUN ( void )
{        
        uint8_t ucCh;
        
        if ( USART_GetITStatus ( macESP8266_USARTx, USART_IT_RXNE ) != RESET )
        {
                ucCh  = USART_ReceiveData( macESP8266_USARTx );
               
                if ( strEsp8266_Fram_Record .InfBit .FramLength < ( RX_BUF_MAX_LEN - 1 ) )                       //预留1个字节写结束符
                        strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ++ ]  = ucCh;

        }
                  
        if ( USART_GetITStatus( macESP8266_USARTx, USART_IT_IDLE ) == SET )                                         //数据帧接收完毕
        {
    strEsp8266_Fram_Record .InfBit .FramFinishFlag = 1;
               
                ucCh = USART_ReceiveData( macESP8266_USARTx );                                                              //由软件序列清除中断标志位(先读USART_SR,然后读USART_DR)
        
                ucTcpClosedFlag = strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "CLOSED\r\n" ) ? 1 : 0;        
  }        

}

回复

使用道具 举报

 楼主| 发表于 2017-1-4 21:01:33 | 显示全部楼层
我按照百度,把core_cm3.h中的
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
    if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
    SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */
    NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);
    SysTick->VAL = 0;
    SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
        SysTick_CTRL_TICKINT_Msk |
        SysTick_CTRL_ENABLE_Msk;
    return (0); /* Function successful */
}

(1<<__NVIC_PRIO_BITS) - 1改成0了,成功了。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-14 01:05 , Processed in 0.026187 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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