STM32学习笔记之GPIO(四)

STM32之GPIO配置举例`(一)

完成各种配置需参照的表格

STM32 的 IO 口位配置表如表所示:
在这里插入图片描述
STM32 输出模式配置如表所示:
在这里插入图片描述
接下来我们看看端口低配置寄存器 CRL 的描述
在这里插入图片描述
该寄存器的复位值为 0X4444 4444,从上图可以看到,复位值其实就是配置端口为浮空输入模式。从上图还可以得出:STM32 的 CRL 控制着每组 IO 端口(A~G)的低 8 位的模式。每个 IO 端口的位占用 CRL 的 4 个位,高两位为 CNF,低两位为 MODE。这里我们可以记住几个常用的配置,比如 0X0 表示模拟输入模式(ADC 用)、0X3 表示推挽输出模式(做输出口用,50M 速率)、0X8 表示上/下拉输入模式(做输入口用)、0XB 表示复用输出(使用 IO 口的第二功能,50M 速率)。
CRH 的作用和 CRL 完全一样,只是 CRL 控制的是低 8 位输出口,而 CRH 控制的是高 8位输出口。这里我们对 CRH 就不做详细介绍了。

举个例子:
比如我们要设置 PORTC 的 11 位为上拉输入,12 位为推挽输出。

GPIOC->CRH&=0XFFF00FFF;//清掉这 2 个位原来的设置,同时也不影响其他位的设置
GPIOC->CRH|=0X00038000; //PC11 输入,PC12 输出
GPIOC->ODR=1<<11; //PC11 上拉

通过这 3 句话的配置,我们就设置了 PC11 为上拉输入,PC12 为推挽输出。

跑马灯实验

LED.C文件,minif103板载PD2,PA8是led灯直接用了这两个引脚控制板载led

#include "led.h"
//初始化 PA8 和 PD2 为输出口.并使能这两个口的时钟
//LED IO 初始化
void LED_Init(void)
{
RCC->APB2ENR|=1<<2; //使能 PORTA 时钟
RCC->APB2ENR|=1<<5; //使能 PORTD 时钟
GPIOA->CRH&=0XFFFFFFF0; 
GPIOA->CRH|=0X00000003;//PA8 推挽输出
GPIOA->ODR|=1<<8; //PA8 输出高
GPIOD->CRL&=0XFFFFF0FF;
GPIOD->CRL|=0X00000300;//PD.2 推挽输出
GPIOD->ODR|=1<<2; //PD.2 输出高
}

LED.H文件

#ifndef __LED_H
#define __LED_H
#include "sys.h"
//LED 端口定义
#define LED0 PAout(8) // PA8
#define LED1 PDout(2) // PD2
void LED_Init(void); //初始化
#endif

MAIN 函数文件

#include "sys.h"
#include "delay.h"
#include "led.h"
int main(void)
{
	Stm32_Clock_Init(9); //系统时钟设置
	delay_init(72); //延时初始化
	//上面两句初始化的作用是将外设时钟和单片机时钟相匹配
	
	LED_Init(); //初始化与 LED 连接的硬件接口
	while(1)
	{
		LED0=0; LED1=1;
		delay_ms(300);
		LED0=1; LED1=0;
		delay_ms(300);
	} 
}

延时函数的实现是软实现,与单片机引脚资源不冲突,如果想要把延时做的更精确,可以采用硬件计时的方式。TIMX时钟线知识会在后面讲解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值