stm32 如何关闭所有的外设时钟
发布网友
发布时间:2022-05-06 13:25
我来回答
共1个回答
热心网友
时间:2022-06-30 18:00
首先你需要知道程序运行到main函数之前都干了些什么:
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
从上面可以知道,到mian函数之前,运行了systeminit()函数
那么我们就可以到这个函数中看看它都做了什么?
原来在这个函数里程序对其时钟进行了初始化!!!对应你的问题,外设时钟,那么我们要问外设都挂在什么上?OK,从datasheet中可以知道外设都挂在APB1/和APB2先进外设总线上,那么是否不给APB1和APB2提供时钟外设就没有时钟呢?答案是否定的,发现配置寄存器中没有这项功能,呵呵。
那么我们只能用库函数来关闭自己想要关闭的外设时钟:
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
APB2总线上外设时钟使能。
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
APB1总线上外设时钟使能
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState)管AHB总线时钟的追问关掉时钟 电流消耗应该会少点吧 主要是想关外设来减少电流消耗 还有更好的办法吗 谢谢!
追答当然,datasheet后面都有介绍 Electrical characteristics章节,好好看看就知道了