问题描述:GPIO对于每颗MCU都需要了解,常见的如LED和Button的控制,GPIO就是用来供MCU输入和输出用。
GPIO简述:STM32的ARM CortexM 系列IC的GPIO设计应当大体相同,其他家的GPIO做法会不一样,GPIO也是由电路构成,不同的IC厂商会有自己的hardware电路的具体实现,包括开出的register和peripheral map都会不同。STM的IC推广很好,对于其GPIO的了解,大体流程以及基本的概念和其他家的都会是相通的,会大有裨益。
这款IC的GPIO对所有pin用port来归类,PortA,PortB等,每一组port有基本的register:
4个配置寄存器:GPIOx_MODER(配置GPIO模式,输入输出等), GPIOx_OTYPER(输出模式,开漏推挽等), GPIOx_OSPEEDR(输出速度配置), GPIOx_PUPDR(上拉,下拉配置);
2个数据寄存器:GPIOx_IDR, GPIOx_ODR(存放Port要输入/输出的数据,是以port为单位的,IDR只读,ODR可读可写);
1个set/reset寄存器:GPIOx_BSRR(简单的将对应pin置1或清0,是ODR的位操作形式。BRR用来set,即置为1。BSRR用来reset,即置为0);
另外:portA和portB有个locking register--GPIOx_LCKR,和2个可选功能寄存器--GPIOx_AFRH, GPIOx_AFRL。
GPIO模式:GPIO是配置用来输入输出的,但是只能是输入或输出中的某一种模式,如果同时输入又输出,那就乱掉了。通过寄存器可以将GPIO模式配置为如下:
Input floating
Input pull-up
Input-pull-down
Analog
Output open-drain with pull-up or pull-down capability
Output push-pull wit h pull-up or pull-down capability
Alternate function push-pull with pull-up or pull-down capability
Alternate function open-drain with pull-up or pull-down capability
这其中关于push-pull, pull-up,pull-down等概念还是比较重要的,可以看下相关电路,在使用GPIO时许多时候都是需要清楚是用推挽,上拉,下拉,开漏等模式的,不然由于设置不对,可能会造成IO工作与预期不符:
如下为GPIO的IO pin的电路结构图:
所有Port都有外部中断的功能,中断部分内容这里不详述。
GPIO输入配置:配置为输入模式时电路如下
GPIO输出配置:配置为输出模式时电路如下
GPIO复用模式配置:与基本的输入输出没有什么区别,只是在IC内部实际连接的是Alternate function output/input了,不再连接到IDR和ODR了。具体复用到何种periperal IO,得看对应的peripheral的功能。
GPIO模拟方式配置:前面的方式都是数字的方式和外设进行通信,数字方式最终表现在IO pin的输入输出都是0和1,数据通过register来读取或写入,而模拟方式则是将IO pin连接到模拟电路,通过电压、电流的方式和外设进行通信了。其配置电路如下:
对于模拟方式而言,Analog input/output在IC内部会连接上ADC/DAC设备的,GPIO的这种Analog模式大概也只有ADC/DAC主要会用到,因为目前的IC的core处理器都是数字模式工作,不可能直接操作Analog信号的。
一点问题:GPIO的Speed配置,从code看分为2M, 10M和50M三种,一般选择50M,但GPIO部分的spec并没有对这里的说明。感觉这里和RCC配置应当是相关的,在discovery开发板,将HSI作为系统时钟源,配置PLL 12倍频HSI/2,得到48M的SYSCLK,AHB 1倍分频,因此HCLK==SYSCLK也为48M,APB 也1倍分频,PCLK==HCLK也为48M。某GPIO pin时钟源设置为RCC_AHBPeriph_GPIOC,即该GPIO是以HCLK做时钟源,因为每个AHB clock cycle从IO pin采数据到IDR/ODR寄存器,因此其速度应当实际为48M。可配置的GPIO速度2M, 10M, 50M中,50M最接近。不过还是得找下spec说明验证才行 。
上一篇:stm32f030-GPIO配置
下一篇:STM32入门学习之ADC(STM32F030F4P6基于CooCox IDE)
推荐阅读最新更新时间:2024-03-16 16:08