今天在配置STM32的时钟和GPIO时,发现了一个现象:GPIO端口的时钟使能信号必须在GPIO的配置之前,否则GPIO就无法正确的输出信号。
发现这个现象的过程也是无心之举,我原本是把打开GPIO端口的时钟语句放在了时钟配置函数当中,因为那个寄存器就是在时钟寄存器那一章节。然而我发现GPIO所对应的LED根本就不能按照程序正确的输出,要么全部是高,要么全部是低电平。
经过对比示例程序我发现我的程序在逻辑上是没有任何的问题的,只是有些配置的语句可能先后顺序有点不一样,但是不影响。最后就定位到了那个RCC_APB2ENR寄存器,这个寄存器中可以配置GPIO端口的时钟使能信号,我发现配置RCC_APB2ENR寄存器的语句放在不同的位置时,程序最后的表现结果不一样,左后就得出了上面的结论。然后,我把原本正常的示例程序按照上面的结论修改配置RCC_APB2ENR寄存器在程序中的位置,发现确实是这样子的,由于数据手册没有看的很仔细,只是按照我以前的开发经验在进行配置,所以不知道数据手册当中有没有后指出。
不管数据手册当中有指出来,并且如果真的是与那个配置语句的位置有关,都让我觉得这个设计真的很奇葩。
今天在配置STM32的时钟和GPIO时,发现了一个现象:GPIO端口的时钟使能信号必须在GPIO的配置之前,否则GPIO就无法正确的输出信号。
发现这个现象的过程也是无心之举,我原本是把打开GPIO端口的时钟语句放在了时钟配置函数当中,因为那个寄存器就是在时钟寄存器那一章节。然而我发现GPIO所对应的LED根本就不能按照程序正确的输出,要么全部是高,要么全部是低电平。
经过对比示例程序我发现我的程序在逻辑上是没有任何的问题的,只是有些配置的语句可能先后顺序有点不一样,但是不影响。最后就定位到了那个RCC_APB2ENR寄存器,这个寄存器中可以配置GPIO端口的时钟使能信号,我发现配置RCC_APB2ENR寄存器的语句放在不同的位置时,程序最后的表现结果不一样,左后就得出了上面的结论。然后,我把原本正常的示例程序按照上面的结论修改配置RCC_APB2ENR寄存器在程序中的位置,发现确实是这样子的,由于数据手册没有看的很仔细,只是按照我以前的开发经验在进行配置,所以不知道数据手册当中有没有后指出。
不管数据手册当中有指出来,并且如果真的是与那个配置语句的位置有关,都让我觉得这个设计真的很奇葩。
举报