0
点赞
收藏
分享

微信扫一扫

STM32F 103C8T6开发板 点亮LED灯

eelq 2022-06-01 阅读 69

每组IO口含下面7个寄存器。7个寄存器可以控制一组GPIO的16个IO口。

  • GPIOx_CRL:端口配置低寄存器
  • GPIOx_CRH:端口配置高寄存器
  • GPIOx_IDR:端口输入寄存器
  • GPIOx_ODR:端口输出寄存器
  • GPIOx_BSRR:端口位设置 / 清除寄存器
  • GPIOx_BRR:端口位清除寄存器
  • GPIOx_LCKR:端口配置锁存寄存器

注:IO口输出高电平,LED灭,输出低电平,LED点亮。

头文件:stm32f10x.h

注:操作IO口必须引入的源文件和头文件。

初始化函数:

  • void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

4个设置输出电平函数:

  • void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
  • 作用:设置某个IO口输出为高电平(1)。实际操作BSRR寄存器
  • void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
  • 作用:设置某个IO口输出为低电平(0)。 实际操作BSRR寄存器
  • void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
  • 作用:用来设置IO口输出电平。
  • void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
  • 作用:用来设置IO口输出电平。

1.点亮LED灯

#include "stm32f10x.h"

void LED_Init(void){
 GPIO_InitTypeDef  GPIO_InitStructure;
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  // PB,PE端口时钟
// 可以一次初始化一个IO组下的多个IO,前提是这些IO口的配置方式一样。
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;  // LED0-->PB.5 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   // 推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // IO口速度为50MHz
 GPIO_Init(GPIOA, &GPIO_InitStructure);  // 根据设定参数初始化 GPIOB.5
 GPIO_SetBits(GPIOA,GPIO_Pin_5);  // PB.5 输出高
}

int main(void){
LED_Init();    // 初始化与LED连接的硬件接口
while(1){
}
}

代码运行结果:
STM32F 103C8T6开发板 点亮LED灯_初始化

2.点亮全部的LED灯

#include "stm32f10x.h"

void LED_Init(void){
 GPIO_InitTypeDef  GPIO_InitStructure;
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  // PB,PE端口时钟
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;  // LED0-->PB.5 端口配置,LED1-->PB.6 端口配置,LED2-->PB.7 端口配置,LED3-->PB.8 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   // 推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // IO口速度为50MHz
 GPIO_Init(GPIOA, &GPIO_InitStructure);  // 根据设定参数初始化 GPIOB.5,GPIOB.6,GPIOB.7,GPIOB.8
 GPIO_SetBits(GPIOA, GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8);  // PB.5,PB.6,PB.7,PB.8 输出高
}

int main(void){
LED_Init();    // 点亮全部的led灯
while(1){
}
}

代码运行结果:

STM32F 103C8T6开发板 点亮LED灯_#include_02

3.LED等闪烁

#include "stm32f10x.h"

void delay_ms(uint16_t t){ // 延迟函数
      uint16_t i; 
      for(;t>0;t--)
             for(i = 0;i<7500;i++);
}

void LED_Init(void){
 GPIO_InitTypeDef  GPIO_InitStructure;
 
void LED_Init(void){
 GPIO_InitTypeDef  GPIO_InitStructure;
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  // PB,PE端口时钟

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;  // LED0-->PB.5 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   // 推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // IO口速度为50MHz
 GPIO_Init(GPIOA, &GPIO_InitStructure);  // 根据设定参数初始化 GPIOB.5
 GPIO_SetBits(GPIOA,GPIO_Pin_5);  // PB.5 输出高
}

int main(void){

LED_Init();    // 初始化与LED连接的硬件接口
while(1){
GPIO_SetBits(GPIOA, GPIO_Pin_5); // 输出低电平,点亮led灯
delay_ms(1000); // 调用延迟函数
GPIO_ResetBits(GPIOA, GPIO_Pin_5); // 输出高电平,熄灭led灯
delay_ms(1000);
}
}

4.流水灯实现左移

#include "stm32f10x.h"

void delay_ms(uint16_t t){ // 延迟函数
      uint16_t i; 
      for(;t>0;t--)
             for(i = 0;i<7500;i++);
}

void LED_Init(void){
 GPIO_InitTypeDef  GPIO_InitStructure;
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  // PB,PE端口时钟
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;  // LED0-->PB.5 端口配置,LED1-->PB.6 端口配置,LED2-->PB.7 端口配置,LED3-->PB.8 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   // 推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // IO口速度为50MHz
 GPIO_Init(GPIOA, &GPIO_InitStructure);  // 根据设定参数初始化 GPIOB.5,GPIOB.6,GPIOB.7,GPIOB.8
 GPIO_SetBits(GPIOA, GPIO_Pin_5);  // PB.5
}

int main(void){
LED_Init();    // 初始化与LED连接的硬件接口
while(1){
GPIO_SetBits(GPIOA, GPIO_Pin_5); // 输出低电平,点亮led灯
delay_ms(100); // 调用延迟函数
GPIO_ResetBits(GPIOA, GPIO_Pin_5); // 输出高电平,熄灭led灯
delay_ms(100);
GPIO_SetBits(GPIOA, GPIO_Pin_6); 
delay_ms(100); // 调用延迟函数
GPIO_ResetBits(GPIOA, GPIO_Pin_6); 
delay_ms(100);
GPIO_SetBits(GPIOA, GPIO_Pin_7); 
delay_ms(100); // 调用延迟函数
GPIO_ResetBits(GPIOA, GPIO_Pin_7); 
delay_ms(100);
GPIO_SetBits(GPIOA, GPIO_Pin_8); 
delay_ms(100); // 调用延迟函数
GPIO_ResetBits(GPIOA, GPIO_Pin_8); 
delay_ms(100);
}
}

5.流水灯实现右移

#include "stm32f10x.h"

void delay_ms(uint16_t t){ // 延迟函数
      uint16_t i; 
      for(;t>0;t--)
             for(i = 0;i<7500;i++);
}

void LED_Init(void){
 GPIO_InitTypeDef  GPIO_InitStructure;
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  // PB,PE端口时钟
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;  // LED0-->PB.5 端口配置,LED1-->PB.6 端口配置,LED2-->PB.7 端口配置,LED3-->PB.8 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   // 推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // IO口速度为50MHz
 GPIO_Init(GPIOA, &GPIO_InitStructure);  // 根据设定参数初始化 GPIOB.5,GPIOB.6,GPIOB.7,GPIOB.8
 GPIO_SetBits(GPIOA, GPIO_Pin_8);  // PB.8
}

int main(void){
LED_Init();    // 初始化与LED连接的硬件接口
while(1){
GPIO_SetBits(GPIOA, GPIO_Pin_8); // 输出低电平,点亮led灯
delay_ms(100);// 调用延迟函数
GPIO_ResetBits(GPIOA, GPIO_Pin_8); // 输出高电平,熄灭led灯
delay_ms(100);
GPIO_SetBits(GPIOA, GPIO_Pin_7); 
delay_ms(100);
GPIO_ResetBits(GPIOA, GPIO_Pin_7); 
delay_ms(100);
GPIO_SetBits(GPIOA, GPIO_Pin_6); 
delay_ms(100);
GPIO_ResetBits(GPIOA, GPIO_Pin_6);
delay_ms(100);
GPIO_SetBits(GPIOA, GPIO_Pin_5); 
delay_ms(100);
GPIO_ResetBits(GPIOA, GPIO_Pin_5); 
delay_ms(100);
}
}

举报

相关推荐

0 条评论