1、文章概述:在跟着野火学习STM32F07课程使,到串口这一章节,我不太理解GPIO_PinAFConfig()函数的意思。后来经过,查找资料,自己计算GPIO_PinAFConfig()函数内的内容,最终理解的GPIO_PinAFConfig()函数的意思是:将外设(形参一)的某个引脚(形参二)用作什么功能(参数三)。那么在这里的意思是将GPIOA的9、10引脚用作USART1。当然,在stm32F07的手册中也说明了PA9和PA10分别作为串口1的TX和RX。
2、怎么发现的问题?在做实验:实现USART1的通信控制RGB中,发现使用到了GPIO_PinAFConfig()这一函数,却无法理解其意思,野火的代码在这里的只有简单的注释。
下面我将野火的代码拷一下:
void USARTx_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_AHB1PeriphClockCmd(USARTx_RX_GPIO_CLK|USARTx_TX_GPIO_CLK,ENABLE);
/* 使能 USART 时钟 */
USARTx_CLOCKCMD(USARTx_CLK, ENABLE);
/* GPIO初始化 */
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/* 配置Tx引脚为复用功能 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = USARTx_TX_PIN ;
GPIO_Init(USARTx_TX_GPIO_PORT, &GPIO_InitStructure);
/* 配置Rx引脚为复用功能 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = USARTx_RX_PIN;
GPIO_Init(USARTx_RX_GPIO_PORT, &GPIO_InitStructure);
/* 连接 PA10 到 USART1__R10*/
// 意思是想把GPIOA的引脚PA10复用成USART1
GPIO_PinAFConfig(USARTx_RX_GPIO_PORT,USARTx_RX_SOURCE,USARTx_RX_AF);
/* 连接 PA9 到 USART1_T9*/
// 意思是想把GPIOA的引脚PA9复用成USART1
GPIO_PinAFConfig(USARTx_TX_GPIO_PORT,USARTx_TX_SOURCE,USARTx_TX_AF);
/* 配置串DEBUG_USART 模式 */
/* 波特率设置:DEBUG_USART_BAUDRATE */
USART_InitStructure.USART_BaudRate = USARTx_BAUDRATE;
/* 字长(数据位+校验位):8 */
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
/* 停止位:1个停止位 */
USART_InitStructure.USART_StopBits = USART_StopBits_1;
/* 校验位选择:偶校验 */
USART_InitStructure.USART_Parity = USART_Parity_No;
/* 硬件流控制:不使用硬件流 */
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
/* USART模式控制:同时使能接收和发送 */
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
/* 完成USART初始化配置 */
USART_Init(USARTx, &USART_InitStructure);
/* 使能串口 */
USART_Cmd(USARTx, ENABLE);
}
代码来自野火
3、解释GPIO_PinAFConfig()函数。
先说我弄懂后的最终理解,即GPIO_PinAFConfig()函数在这里的意思是将GPIOA的9、10引脚用作USART1。
(1)USART1的写和读引脚如下所示,其中PA9用作TX(写),PA10用作RX(读)。将PA9和PA10 GPIO初始化后,我们需要将其复用为USART1(我的理解是告诉芯片,我要用这两个引脚当串口1的读写接口了)。
图一
(2)在AFRH9[3:0]和AFRH10[3:0]这里的取值就是用来描述PA9和PA10 要被复用成什么功能,这里每个引脚都是4位来描述,取值0~15分别选择AF0~AF15,每个AFx都有其意思,如图三所示。AF7表示串口1、2、3。所以这里AFRH9[3:0]和AFRH10[3:0]都要置为0b0111。那么这里只需要使用GPIO_PinAFConfig()函数就可以将GPIOA的AFRH寄存器的AFRH9[3:0]和AFRH10[3:0]置为0b0111。
图二
图三 文章来源:https://www.toymoban.com/news/detail-524601.html
4、在理解这块内容的时候看了下面的这篇文章,对此表示感谢。大家也可以去看看,该作者对这个函数内容进行了详细的解释。对于STM32F4库函数中GPIO_PinAFConfig()函数的解读-爱码网 (likecs.com)文章来源地址https://www.toymoban.com/news/detail-524601.html
到了这里,关于对于STM32F4库函数中GPIO_PinAFConfig()函数的解读,对复用功能的理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!