本人初学STM32F10x单片机,之前用过430和28335,接触STM32后发现有些东西实在弄不明白,翻阅资料也没有确切的说明,现在将我遇到的疑问列出来,望资深人士指点迷津!以STM32F103VET 为例
GPIO管脚的复用:复用引脚36 PB1/ADC12_IN9/TIM3_CH4/TIM8_CH3N ,PB1为默认主功能引脚,其他的都是复用,如何来定义这个引脚呢?在28335中每个复用功能都是用特定寄存器来设定的,比如PB1时设00,ADC12_IN9时01,TIM3_CH4时02,TIM8_CH3N时设03,总之是确定的。但是在STM32中却不是这样的,设定为复用引脚如AF_PP后,要使能相应的时钟才能工作。那么我的问题就来了:
1 、仍以36脚为例,GPIO配置为复用,如果单使能ADC时钟,那么引脚被定义为ADC12_IN9,内部连接至ADC模块,这没什么问题;但是如果同时使能了ADC和TIM3时钟(单纯用作1ms标准定时器,无需输入输出),引脚将配置成什么?网上有**讲,当出现这种情况,ADC,TIM3,TIM8只能使能其中一个时钟,也即只能使用其中一种外设,那对于TIM3,TIM8这种可以内部使用的外设不是一种浪费么?
2、已配置好外设时钟,但没有配置引脚的情况,比如使能TIM3做周期定时器处理一些任务,这时候没有必要配置引脚,那这些跟TIM3关联的引脚仍是GPIO通用引脚还是其他情况?
3、还有一种情况,如果引脚配置为复用引脚,但是相应的外设时钟没有启用,一些资料里说此时引脚输出将不确定。是这样吗?
按照我对引脚复用的设计理解,GPIO复用功能就像一个多对一的拨码开关,设定为哪个脚接通就可以了(比如28335的GPIO寄存器一样),跟外设是否启用一点关系都没有,而在STM32里还跟外设时钟有关,难不成是外设时钟推动这个拨码开关不成,这样设计真的让人难以理解,使用28335就没有这种疑问。以上就是困惑我的地方,另外吐槽一下,STM32固件库设计的真不这么样! |