日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32-IO引脚复用-原理和使用

發布時間:2025/3/12 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32-IO引脚复用-原理和使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.什么是端口復用?

STM32有很多的內置外設(把一些功能ADC\看門狗…集中到芯片里面),這些外設的外部引腳都是與GPIO復用的。也就是說,一個GPIO如果可以復用為內置外設的功能引腳,那么當這個GPIO作為內置外設使用的時候,就叫做復用。

例如串口1 的發送接收引腳是PA9,PA10,當我們把PA9,PA10不用作GPIO,而用做復用功能串口1的發送接收引腳的時候,叫端口復用。

2.STM32引腳可以復用為哪些功能?

可在芯片STM32767IGT6資料中的pin and ball definitions中找到:

STM32(M4內核以上)的端口復用映射原理

STM32系列微控制器IO引腳通過一個復用器連接到內置外設或模塊。該復用器一次只允許一個外設的復用功能(AF)連接到對應的IO口。這樣可以確保共用同一個IO引腳的外設之間不會發生沖突。

每個IO引腳都有一個復用器,該復用器采用16路復用功能輸入(AF0到AF15),可通過GPIOx_AFRL(針對引腳0-7)和GPIOx_AFRH(針對引腳8-15)寄存器對這些輸入進行配置,每四位控制一路復用。

對于每一組GPIO都有GPIO 復用功能低位寄存器 (GPIOx_AFRL) (x = A…K):比如GPIOA有16個IO口,GPIOx_AFRL是32位,可以配置引腳0-7。

GPIOx_AFRL寄存器:

GPIO 復用功能高位寄存器 (GPIOx_AFRH) (x = A…J):

比如配置PA9連接到AF7,那么就是配置GPIOA_AFRH的AFR9,配置成0111 。

3.復用功能配置:

1.系統功能:將I/O連接到AF0,然后根據所用功能進行配置:

  • JTAG/SWD:在各器件復位之后,會將這些引腳指定為專用引腳,可供片上調試模塊立即使用 (不受GPIO控制器控制)
  • RTC_REFIN:此引腳應配置為輸入浮空模式。
  • MCO1和MCO2:這些引腳必須配置為復用功能模式。

2.GPIO:在GPIOx_MODER寄存器中將所需I/O配置為輸出或輸入。

3.外設復用功能:

對于ADC和DAC,在GPIOx_MODER寄存器中將所需I/O配置為模擬通道。對于其它外設:

  • 在GPIOx_MODER寄存器中將所需I/O配置為復用功能
  • 通過GPIOx_OTYPER、GPIOx_PUPDR和GPIOx_OSPEEDER寄存器,分別選擇類型、上拉/下拉以及輸出速度。
  • 在GPIOx_AFRL或GPIOx_AFRH寄存器中,將I/O連接到所需AFx

4.端口復用功能配置過程

以PA9、PA10配置為串口1為例:

1.GPIO端口時鐘使能。
__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIO時鐘

2.復用外設時鐘使能。
比如你要將端口PA9,PA10復用為串口,所以要使能串口時鐘。
__HAL_RCC_USART1_CLK_ENABLE(); //使能串口1時鐘

3.端口模式配置為復用功能。 HAL_GPIO_Init函數。
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //復用推挽輸出

4.配置GPIOx_AFRL或者GPIOx_AFRH寄存器,將IO連接到所需的AFx。HAL_GPIO_Init函數。

GPIO_Initure.Alternate=GPIO_AF7_USART1;//復用為USART1

在文件system-usart.c中可以找到:HAL_UART_MspInit

void HAL_UART_MspInit(UART_HandleTypeDef *huart) {//GPIO端口設置GPIO_InitTypeDef GPIO_Initure;if(huart->Instance==USART1)//如果是串口1,進行串口1 MSP初始化{__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA時鐘__HAL_RCC_USART1_CLK_ENABLE(); //使能USART1時鐘GPIO_Initure.Pin=GPIO_PIN_9; //PA9GPIO_Initure.Mode=GPIO_MODE_AF_PP; //復用推挽輸出GPIO_Initure.Pull=GPIO_PULLUP; //上拉GPIO_Initure.Speed=GPIO_SPEED_FAST; //高速GPIO_Initure.Alternate=GPIO_AF7_USART1; //復用為USART1HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA9GPIO_Initure.Pin=GPIO_PIN_10; //PA10HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA10#if EN_USART1_RXHAL_NVIC_EnableIRQ(USART1_IRQn); //使能USART1中斷通道HAL_NVIC_SetPriority(USART1_IRQn,3,3); //搶占優先級3,子優先級3 #endif }}

總結

以上是生活随笔為你收集整理的STM32-IO引脚复用-原理和使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。