stm32f103失能所有外设问题

2019-07-21 05:17发布

本帖最后由 redgragon 于 2019-2-15 18:09 编辑

在bootloader跳转前需要失能所有外设,在原子sys.c的v1.9版本中提供了 void MYRCC_DeInit(void)代码如下
[mw_shl_code=c,true]//外部中断禁用函数
//只针对GPIOA~G;不包括PVD,RTC和USB唤醒这三个
//参数:
//GPIOx:0~6,代表GPIOA~G
//BITx:需要禁用的位;
//2017.01.06 Big-Xia添加
void Ex_NVIC_disable(u8 GPIOx,u8 BITx)
{
        EXTI->IMR&= ~(1<<BITx); //  关闭line BITx上的中断
}


//不能在这里执行所有外设复位!否则至少引起串口不工作.                    
//把所有时钟寄存器复位                  
void MYRCC_DeInit(void)
{        
         RCC->APB1RSTR = 0x00000000;//复位结束                        
        RCC->APB2RSTR = 0x00000000;
         
          RCC->AHBENR = 0x00000014;  //睡眠模式闪存和SRAM时钟使能.其他关闭.         
          RCC->APB2ENR = 0x00000000; //外设时钟关闭.                           
          RCC->APB1ENR = 0x00000000;   
        RCC->CR |= 0x00000001;     //使能内部高速时钟HSION                                                                                                                                 
        RCC->CFGR &= 0xF8FF0000;   //复位SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0]                                         
        RCC->CR &= 0xFEF6FFFF;     //复位HSEON,CSSON,PLLON
        RCC->CR &= 0xFFFBFFFF;     //复位HSEBYP                     
        RCC->CFGR &= 0xFF80FFFF;   //复位PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE
        RCC->CIR = 0x00000000;     //关闭所有中断                 
        //配置向量表                                 
#ifdef  VECT_TAB_RAM
        MY_NVIC_SetVectorTable(0x20000000, 0x0);
#else   
        MY_NVIC_SetVectorTable(0x08000000,0x0);
#endif
}[/mw_shl_code]


其中有一行备注  
//不能在这里执行所有外设复位!否则至少引起串口不工作.
请问这句话怎么理解,是这个函数不能用么。。。。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。