初级会员

- 积分
- 117
- 金钱
- 117
- 注册时间
- 2019-8-3
- 在线时间
- 20 小时
|
10金钱
基于STM32F407(寄存器版)的GPIO复用功能的部分配置粘贴:
//GPIO复用设置
//BITx:0~15,代表IO口的引脚编号
//AFx:0~15 代表 AF0~AF15
//AF0:MCO/SWD/SWCLK/RTC AF1:TIM1/TIM2; AF2:TIM3~5; AF3:TIM8~11
//AF4:I2C1~I2C3; AF5:SPI1/SPI2; AF6:SPI3; AF7:USART1~3;
//AF8:USART4~6; AF9;CAN1/CAN2/TIM12~14 AF10:USB_OTG/USB_HS AF11:ETH
//AF12:FSMC/SDIO/OTG/HS AF13 CIM AF14: AF15:EVENTOUT
void GPIO_AF_Set(GPIO_TypeDef* GPIOx,u8 BITx,u8 AFx)
{
GPIOx->AFR[BITx>>3]&=~(0X0F<<((BITx&0X07)*4));
GPIOx->AFR[BITx>>3]|=(u32)AFx<<((BITx&0X07)*4);
}
我的理解是:每个PIN对应4个bit位,每4个bit位可以表示AF0~AF15中的任何一个。
我的疑惑是:1)为什么要左移3?BITx>>3?
2)为什么要&0X07?
|
最佳答案
查看完整内容[请看2#楼]
比如是GPIO_AF_Set(GPIOA,10,7);//PA10,AF7
1.这个是确定你要复用的是高位的IO还是低位的IO的,当要把10号IO复用是,就是高位的,
0为低位,1为高位,10>>3=>0x001;即是高位的
2.BITx&0X07=>0x001,10进制就是2*4=8,0x0f
|