欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

嵌入式课程设计 —— GPIO接口编程

程序员文章站 2022-07-03 12:29:06
...

GPIO口编程:

嵌入式开发里面的 LED点灯 相当于 C语言的Hello World

STM32 GPIO 口名称: PA PB PC .... PF PG ...   一般每个端口有16个引脚(每个引脚对应一个GPIO口)

1.查看电路图

LED0 ---> PF9 

LED1 ---> PF10

嵌入式课程设计 —— GPIO接口编程

2.如何控制GPIO口的高低电平

软件控制硬件:配置寄存器来控制硬件工作。

需要配置的寄存器:(手册GPIO)

端口模式寄存器(GPIO_MODER):用来设置GPIO口的工作模式

上拉/下拉电阻寄存器(GPIO_PUPDR):设置上拉/下拉电阻

输出数据寄存器(GPIO_ODR):每个bit用来设置一个引脚的高低电平

/* myled.c
 GPIO LED驱动
LED0 --> PF9
LED1 --> PF10
*/
 
#include"sys.h"
/*
初始化PF9 PF10为输出工作模式
上拉电阻使能 初始化为高电平
推挽输出方式
*/
void InitLedGpio(void)
{	//打开GPIOF的时钟信号
	RCC->AHB1ENR |= (0x1<<5);
	//设置PF9-10为输出工作方式
	GPIOF->MODER &= (~(0xf<<18));//左移8位,按位取反,使清零
	GPIOF->MODER |= (0x5<<18);   //置0101
	
	//配置PF9-10 为推挽工作模式
	GPIOF->OTYPER &= (~(0x3<<9));
	
	//配置PF9-10 上拉电阻使能
	GPIOF->PUPDR &= (~(0xf<<18));
	GPIOF->PUPDR |= (0x5<<18);
	
	GPIOF->ODR |= (0x3<<9);
}
 
//打开LED灯,PF9-10 设为低电平
void TurnOnLed(void)
{
	GPIOF->ODR &= (~(0x3<<9));
}
//打开LED灯,PF9-10 设为高电平
void TurnOffLed(void)
{
	GPIOF->ODR |= (0x3<<9);
}

嵌入式课程设计 —— GPIO接口编程

main函数写在下面时钟设置里

工程结构:

嵌入式课程设计 —— GPIO接口编程

==========================================================================

时钟设置:

/*
main.c
*/

#include"sys.h"
#include"usart.h"
#include"delay.h"
#include<stdio.h>
int count = 0;

//声明LED相关函数

void InitLedGpio(void);
void TurnOnLed(void);
void TurnOffLed(void);
int main(void)
{
	/*
	//init sys clock
	*/
	Stm32_Clock_Init(336,8,2,7);
	
	//init sys 
	delay_init(168);
	
	//
	uart_init(84,115200);
	InitLedGpio();
	while(1){
		delay_ms(300);
		TurnOnLed();
		delay_ms(500);
		TurnOffLed();
		delay_ms(200);
		printf("this is my first program\n");
	}
	
	return 0;
}

注释乱码了,上截图

嵌入式课程设计 —— GPIO接口编程

嵌入式课程设计 —— GPIO接口编程

时钟设置原理图:

嵌入式课程设计 —— GPIO接口编程

相关标签: 嵌入式