[CortexM0--stm32f0308]关于GPIO

    问题描述: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说明验证才行 。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技塑未来-苏导

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值