cllmxdsdo 发表于 2019-8-4 13:09:52

外设时钟使能语句的问题


主芯片使用的是STM32F207ZET6.

如下图所示,TIM3挂载在APB1总线下面的




但是有个疑问,底下外设时钟使能的语句都能使用吗,有什么区别吗?如果要使用TIM3,按道理来说不应该是第二种写法吗
RCC_AHB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);



求大佬的帮助,小弟在此谢过。

斯文人 发表于 2019-8-4 13:25:49

我一般用的下面语句,我建议你跟进去看寄存器配置有何区别,结合STM32参考手册

wenyangzeng 发表于 2019-8-4 15:34:03

RCC_AHB1是寄存器复位寄存器的配置,没有TIM3选项的。


RCC_APB1才是寄存器使能寄存器



这句:RCC_AHB1PenriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); 有点牛头不对马嘴了!楼主有点粗心了。

正确的应该是:RCC_APB1PenriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);













toofree 发表于 2019-8-5 11:36:50

这样肯定是不行的嘛!看一下时钟树。
#define RCC_APB1Periph_TIM3            ((uint32_t)0x00000002)
要是把RCC_APB1Periph_TIM3参数传进RCC_AHB1PeriphClockCmd()函数中,那出大乱子的。
RCC_AHB1PeriphClockCmd()函数中的参数值等于0x00000002那是RCC_AHB1Periph_GPIOB。
#define RCC_AHB1Periph_GPIOB             ((uint32_t)0x00000002)



发表于 2019-8-5 16:56:53

楼主确定一下这句代码从哪儿来的,从代码上看是APB1。
#define __HAL_RCC_TIM3_CLK_ENABLE()   do { \
                                        __IO uint32_t tmpreg = 0x00U; \
                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\
                                        /* Delay after an RCC peripheral clock enabling */ \
                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\
                                        UNUSED(tmpreg); \
页: [1]
查看完整版本: 外设时钟使能语句的问题