嵌入式课程设计 —— 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
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);
}
main函数写在下面时钟设置里
工程结构:
==========================================================================
时钟设置:
/*
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;
}
注释乱码了,上截图
时钟设置原理图:
上一篇: 虚拟机连接网络