完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
基本概念:
在STM32中有很多内置外设,这些内置外设的操作也是通过140根GPIO引脚的,如果一个GPIO引脚复用为内置外设的功能,那么此时就叫做GPIO的功能复用: 例:串口1的发送和接收引脚可选PA9和PA10复用,当我们不把这两个引脚用作GPIO时,而复用为串口1的收发引脚时,这时就叫做端口的杜复用; STM32(M4内核以上)的端口复用映射原理 IO引脚通过复用器连接到外设或模块,复用器一次仅允许一个外设的复用功能(AF)连接到IO引脚,确保共用一个IO引脚的外设之间不会发生冲突;(一个IO引脚一次只能复用一个外设功能,那么多个IO可以同时复用一个功能吗?) 我们通过复用关系表可以看见,一个IO往往可能复用很多功能,当一个IO可能复用的功能外设都开启了,会不会造成干扰呢?对于STM32F1来说,可能会造成混乱,而F7仅连接到特定外设,不存在互相干扰的情况; 一个功能可以被多个IO复用,当一个IO复用了一个功能之后,其他可复用这个功能的IO还可作GPIO或复用其他功能使用; 功能复用相关的寄存器(AFRL和AFRH) 引脚复用功能选择通过AFRL和AFRH来控制,其中AFRL控制0~7这八个IO口,AFRH控制8~15这八个IO口,在MDK中,AFRL和AFRH被定义成了数组AFR[2]进行配置,其中AFR[0]代表AFRL,AFR[1]代表AFRH,AFR是一个unsigned int类型的数组,即AFRL/AFRH寄存器4bit表示一个IO,一个IO最多可能复用16种外设功能; 例1:将PA9和PA10复用成USART1_TX和USART1_RX功能 RCC-》AHB1ENR|=1《《0; //使能PORTA口时钟 RCC-》APB2ENR|=1《《4; //使能串口1时钟 GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU); //PA9,PA10,复用功能,上拉输出 GPIO_AF_Set(GPIOA,9,7); //PA9,AF7 GPIO_AF_Set(GPIOA,10,7); //PA10,AF7 //GPIOx:GPIOA~GPIOI. 端口 //BITx:0~15 代表IO引脚编号。 //AFx:0~15 代表AF0~AF15.功能编号 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); } /************************************************************** *1、BITx》》3 在前面我们说了,AFRL和AFRH分别控制8个IO口,这样AFR[2] * 刚好可以表示一个端口,二进制3bit可以表示八种状态,即如 * 果超过7则bit4肯定为1,这样就可以用一个函数直接判断使用 * AFR[0]还是AFR[1]了; * 2、(BITx&0X07)*4 一个IO用4个bit表示,故乘4;BITx&0X07 是为了防 * 止误操作,一个AFR只能设置8个IO,故3个bit就可以 * 表示,超过3bit的部分自动清零; ************************************************************** * 总结: * 1、想要使用某个外设,先使能他的时钟(对于复用来说,要使能端口+ * 功能外设); * 2、时钟使能完毕后,要对其进行初始化操作,进行相关配置; * 3、注意:设置寄存器,先清零,再设置; **************************************************************/ 常用复用功能引脚总结: AF0:MCO/SWD/SWCLK/RTC; AF1:TIM1/TIM2; AF2:TIM3~5; AF3:TIM8~11; AF4:I2C1~I2C4; AF5:SPI1~SPI6; AF6:SPI3/SAI1; AF7:SPI2/3/USART1~3/UART5/SPDIFRX; AF8:USART4~8/SPDIFRX/SAI2; AF9:CAN1~2/TIM12~14/LCD/QSPI; AF10:USB_OTG/USB_HS/SAI2/QSPI; AF11:ETH; AF12:FMC/SDMMC/OTG/HS; AF13:DCIM; AF14:LCD; AF15:EVENTOUT; AF0为系统功能,有三种需要特别注意: 1. JTAG/SWD:在器件复位后,会将这些引脚制定为专用引脚,可供片上调试模块使用(不受GPIO控制器控制); 2. RTC_REFIN:此引脚应配置为输入浮空模式; 3. MCO1/MCO2:这些引脚必须配置为复用功能模式; 对于ADC和DAC,在GPIOx_MODER寄存器中将所需IO配置为模拟通道,对于其他外设,只需要配置为复用功能。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1784 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1088 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
729 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1680 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
734浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
559浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 18:45 , Processed in 0.765284 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号