配置MM32微控制器引脚复用功能
文章目录
Introduction
使用过NXP(FSL)微控制器的开发者在配置引脚复用功能,仅在PORT模块中,对应引脚的的PCR寄存器的MUX字段中选定该引脚的复用功能即可。但笔者最近在使用MM32微控制器(MM32F3270)过程中,在配置引脚复用功能上遇到了一些麻烦。MM32微控制器在用户接口的设计上,走的是近似ST的风格,相对于NXP将GPIO(一个通用的控制GPIO的外设)和PORT(同具体芯片相关的复用功能)两个模块分开,分别用于管理仅作为数字IO信号的输入输出,和端口的电气特性,MM32的GPIO外设混合了GPIO和PORT的功能,并把PORT中的引脚异步中断的功能,又分散到了EXTI模块和SYSCFG模块(SYSCFG_EXTICRn)中。
本文整理如何在MM32微控制器上配置引脚复用功能。
现在看来,后续还需要专门整理一下如何使用MM32的引脚中断,要混合GPIO、EXTI、SYSCFG等三个模块才能把引脚中断配起来。
Algorithm
配置MM32的引脚复用功能,需要同时配置GPIO模块的电气特性相关寄存器(CR)和复用功能选择寄存器(AFR),句柄这两个部分的设定需要按照特定搭配起来,才能正常工作。
GPIOx_CR寄存器
这里的x指代A、B、… 、H,每个端口都有。CR寄存器分为高8位(CRH)和低8位(CRL),总共对应一个端口的16个引脚。CRH和CRL合起来的64个bit位,每4个bit对应一个引脚,但在手册中,将这4个bit分成了两个区域(CNFn和MODEn)进行描述。

本文换一种更清爽的描述方式:
| MODE | Description |
|---|---|
| 0b0000 | 模拟输入模式(Analog Input) |
| 0b0100 | 浮空输入模式(Floating Input),可用于模拟信号,也可以用于数字信号 |
| 0b1000 | 数字上拉/下拉输入模式(需要写入ODR寄存器向端口输出电平以选择上拉或者下拉)(Pull-Up or Pull-Down) |
| 0b1100 | 未使用 |
| 0b0001 | 数字推挽输出模式(Digital Push-Pull Output) |
| 0b0101 | 数字开漏输出模式(Digital Open-Drain Output) |
| 0b1001 | 复用功能推挽输出模式(Mux Push-Pull Output) |
| 0b1101 | 复用功能开漏输出模式(Mux Open-Drain Output) |
当选定“数字上拉/下拉输入模式”时,至于是上拉,还是下拉,根据手册上的描述,需要用户通过ODR寄存器向输出端口上写个电平控制信号。GPIO_ODR寄存器是当指定GPIO引脚为GPIO输出时,控制输出引脚的电平。看样子,这里的上下拉配置,实际上是要用GPIO模块自己的输出电路(虽然软件上未使能)拉动自己的输入信号。这让我想起了多年前51单片机端口电路的用法,51单片机的P0上所有的引脚都是开漏的,本身并没有输入输出的配置,并且需要外部上拉电路,默认是输出功能,但当需要使用输入功能时,必须先向引脚写1,然后才能读数,也是用自己的输出电路给自己的输入做了个上拉。
GPIOx_AFR寄存器
GPIOx_AFR寄存器也为高8位(AFRH)和低8位(AFRL),总共64个bit位,每4位对应一个引脚。每个引脚可以配置成16个复用功能中的一个。其中可选的复用功能,就要在datasheet文档中的引脚复用功能表格查阅了。
这里要注意:
- 如果要使用GPIO功能,必须将对应引脚的
AFRn写成0xF,哪怕GPIOx_CR寄存器中配置该引脚是数字输入输出模式也不行,下一节会专门讲这种映射关系的约束情况。 - 并不是所有引脚的
AFRn的默认值都是0xF。例如JTAG(还包含SWD未使用的引脚)、BOOT0和ISP相关功能引脚,上电后的默认值都是对应的功能引脚。因此建议哪怕是使用GPIO功能,也例行将其对应的AFRn值指定为0xF。

GPIOx_CR & GPIOx_AFR寄存器
前文提到,对于某一个引脚,只有其CR[MODE]和AFR[AFRn]按照某种特定的配置组合,才能起作用。
关于这些特定的配置组合,千万注意,不能主观从字面上想当然地认为在AFR[AFRn]中选定为复用功能,复用功能的信号就能正常工作了。必须要明确是复用输出功能模式和输入模式:
- 对复用功能的输出信号,需指定复用推挽输出模式
- 对复用功能的输入信号,需指定浮动输入模式。注意,这个浮空输入模式,不仅在复用功能时用到,在GPIO功能时也会用到。
- 对复用功能的输入信号,也可指定为数字上拉/下拉输入模式。这个模式本应该仅支持GPIO功能。
实际上,这也是迷惑我多次并严重影响开发效率的问题点。这种映射关系不具备通用性,仅能通过具体特例展现出来。
TIM
| TIM引脚 | TIM功能(AFR[AFRn] | 引脚电气特性(CR[MODE]) |
|---|---|---|
| TIM_CHn | 输入捕获通道n | 浮空输入模式 |
| TIM_CHn | 输出比较通道n | 复用推挽输出模式 |
| TIM_CHnN | 互补输出比较通道n | 复用推挽输出模式 |
| TIM_BKIN | 刹车输入 | 浮空输入模式 |
| TIM_ETR | 外部时钟输入 | 浮空输入模式 |
UART
| UART引脚 | UART功能(AFR[AFRn]) | 引脚电气特性(CR[MODE]) |
|---|---|---|
| UART_TX | 串行发送 | 复用推挽输出模式 |
| UART_RX | 串行接收 | 浮空输入模式(或数字上拉输入模式) |
| UART_RTS | 硬件流控 | 复用推挽输出模式 |
| UART_CTS | 硬件流控 | 浮空输入模式(或数字上拉输入模式) |
SPI_MASTER
| SPI引脚 | SPI功能(AFR[AFRn]) |
|---|
MM32微控制器引脚复用配置详解

本文详细介绍了MM32微控制器的引脚复用配置,包括GPIOx_CR和GPIOx_AFR寄存器的使用,以及各种外设如TIM、UART、SPI、I2C、CAN、ADC、FSMC、QSPI、DAC和SDIO的引脚配置。配置过程中需要注意特定的模式匹配,以确保复用功能的正确工作。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



