晚上复习得真纠结,一学期都没学过,忍不住看了点单片机。原来不了解这个引脚复用。然后就捋了一遍复用功能是怎么回事。
我看有的芯片引脚上写着“PA9/USART1_TX/TIM1_CH2”字样,很明显这个脚有这么三个功能,可能就是引脚复用吧,但是它同时只可能用其中的一种,那么必定有一个“开关”去选择使用哪个功能。我看了下参考手册引脚复用这部分,发现有个AFIO_MAPR寄存器,意思是复用重映射和调试I/O配置寄存器,第二位上写着USART1_REMAP,然后下面解释是这么说的:
“该位可由软件置’1’或置’0’,控制USART1的TX和RX复用功能在GPIO端口的映像。
0: 没有重映像(TX/PA9,RX/PA10);1: 重映像(TX/PB6,RX/PB7)。”
也就是说这一位是零的话,TX和RX就用的是PA9和PA10这两个腿;如果是1的话,就用的PB6和PB7。然后我看芯片引脚上的PB6和PB7,果然写着
“PB7/I2C1_SDA (7) /FSMC_NADV/USART1_RX”和“PB6/I2C1_SCL/TIM4_CH1/USART1_TX ”。这意思不就是说PB6和PB7这两个脚也能用作TX和RX,我只要把AFIO_MAPR的第二位设为1就行了。但是怎么去设置呢,肯定有个库函数专门去设置所有引脚的复用功能。然后我在固件库使用手册的GPIO复用部分找到这个函数:GPIO_PinRemapConfig(u32 GPIO_Remap, FunctionalState NewState),功能是改变管脚的映射。如果我就用PA9作为TX,就不用调用它,因为默认情况下这一位就是零;如果以后PA9忙着做其他事,我就用PB6做TX,只要调用一下这个函数就行。只要把参数 GPIO_Remap 按照手册上的宏定义格式修改,比如改成GPIO_Remap_USART1,把NewState 改成ENABLE,这不就行了,PB6就可以当TX使用了。
应该就是这么回事吧,如果用PB6作TX,就把它的引脚模式设为复用推挽输出,因为它现在是被复用的(我PB6本身是正常的输入输出,现在给你当TX了就叫复用了)。
(如果您发现我哪里错了,千万给我指出来,可别让我就这么蒙在鼓里)。
|