扩展IO口的配置
时间:10-02
整理:3721RD
点击:
hunderboard不但传感器众多,还预留了16个IO口以及GND、5V、3.3V电源接口,方便开发我们自己的应用。
这里我准备使用其中5个IO口,做OLED液晶屏的驱动引脚。
一.准备工作
首先看一下扩展IO的具体分配情况。
配置一下PC6-PC10这5个引脚。查看数据手册得知外设中GPIO的基地址是0x4000A000
GPIO口各个寄存器分布图如下
由上图的寄存器图可知,GPIOC的配置寄存器开始的偏移地址是0x060。
至此OK了,准备工作做好了,不要慌,直接干~~
先测试PC6这个IO口,让其输出高电平之前,先量一下这个引脚的电压(此单片机复位输出低电平)。
竟然有0.64V - - ,我这个表应该挺准的,好吧,也算是低电平。
二.配置相关寄存器
开始配置GPIOC-PIN6,然后让他输出高电平。
首先配置GPIO_PC_CTRL寄存器,首先看第28位,其功能是复用模式输入失能,用不着不管他
位20-22,复用功能下电压摆率,用不着不管他
位16,复用功能下驱动能力,不管他
位12,非复用模式输入失能,可以不管他
位4-6,非复用功能下电压摆率,让它默认值就行
位0,非复用功能下驱动能力,默认是10mAw驱动能力
综上,GPIO_PC_CTRL寄存器让它默认值就好了
接着看GPIO_PC_MODEL寄存器
配置PC6,看下图对应配置位
将其配置为推完输出,那么只需要将 24-27位配置为4
故 *(volatile uint32_t *)(0x4000A000+0x060+0x004) &= ~(15<<24);
*(volatile uint32_t *)(0x4000A000+0x060+0x004) |= (4<<24);
接下来看GPIO_PC_DOUT寄存器
PC6对应位6,直接将其置位
*(volatile uint32_t *)(0x4000A000+0x060+0x00C) |= (1<<26);
三.测试结果
将以上配置写到之前的工程,编译下载
测量结果
4号孔输出高电平,至此这个配置就成了。周末忘了带老铁回家,不然要焊接个LED测试
单看工具就很专业,正准备做个IO控制的实例。