STM32的一个库函数是void GPIO_DeInit(GPIO_TypeDef* GPIOx)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32的一个库函数是void GPIO_DeInit(GPIO_TypeDef* GPIOx)相关的知识,希望对你有一定的参考价值。

它的作用是
/*******************************************************************************
* Function Name : GPIO_DeInit
* Description : Deinitializes the GPIOx peripheral registers to their default
* reset values.
* Input : - GPIOx: where x can be (A..G) to select the GPIO peripheral.
* Output : None
* Return : None
*******************************************************************************/
请问,这个Deinitializes是什么意思。。。。哪都查不到这个词,在我看来,这个函数就是重置。。。。那为什么不写成GPIO_Reset呢?

参考技术A GPIO_DeInit(General Purpose Input Output Default Initial) IO 端口缺省值初始化 参考技术B 其实就是把寄存器设置为上电时候的初始值。。。

用这个方法向复位STM32 ((void (*) (void)) 0x08000000) ();不好用!

用上述的方法想复位一下STM32,主要是想让之前的代码再执行一遍,但是寄存器的所有东西都不能变,查到的方法如上,但是现在不好用。想用GOTO实现上述过程,但是想看看大家有没有更好的办法,谢谢走过路过的大侠了!

参考技术A 你的目的是想进行复位是吗?如果是的话使用两个库函数即可:
__set_FAULTMASK(1);
NVIC_SystemReset();
我的STM32是F103系列,即CPU内核为Cortex M3,这两个函数在core_cm3.h里面都有定义,
__set_FAULTMASK(1);是关闭所有中断的意思,目的是在执行NVIC_SystemReset();复位函数过程中不被中断所打断。
两个函数执行后系统复位重新执行代码,包括之前所配置好的外设寄存器也都回到复位状态。

如果你想要保持之前配置好的寄存器不变的话,那么你再程序跳转之前要先初始化堆栈,而且你程序跳转的地址不对,应该这样:
__set_MSP(*(__IO uint32_t*) 0x08000000); 要先初始化堆栈指针
((void (*) (void)) (*(vu32 *)0x08000004) (); 这句才是程序跳转,注意了,是(*(vu32 *)0x08000004本回答被提问者和网友采纳
参考技术B int main()


u8 i=2;

while(i--)


//代码, 这里的代码会执行两次



while(1);


不知道是不是你想要的

以上是关于STM32的一个库函数是void GPIO_DeInit(GPIO_TypeDef* GPIOx)的主要内容,如果未能解决你的问题,请参考以下文章

求助,STM32库函数RCC

用这个方法向复位STM32 ((void (*) (void)) 0x08000000) ();不好用!

单片机STM32开发中常用库函数分析

stm32怎么把函数用变量控制

STM32F0库函数初始化系列:ADC

STM32F0库函数初始化系列:PWM输出