STM32F 103C8T6开发板 点亮LED灯
生活随笔
收集整理的这篇文章主要介绍了
STM32F 103C8T6开发板 点亮LED灯
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
每组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口速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure); // 根据设定参数初始化 GPIOB.5GPIO_SetBits(GPIOA,GPIO_Pin_5); // PB.5 输出高 }int main(void){ LED_Init(); // 初始化与LED连接的硬件接口while(1){} }代码运行结果:
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口速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure); // 根据设定参数初始化 GPIOB.5,GPIOB.6,GPIOB.7,GPIOB.8GPIO_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){} }代码运行结果:
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口速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure); // 根据设定参数初始化 GPIOB.5GPIO_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口速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure); // 根据设定参数初始化 GPIOB.5,GPIOB.6,GPIOB.7,GPIOB.8GPIO_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口速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure); // 根据设定参数初始化 GPIOB.5,GPIOB.6,GPIOB.7,GPIOB.8GPIO_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); } }总结
以上是生活随笔为你收集整理的STM32F 103C8T6开发板 点亮LED灯的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 汇编基础题
- 下一篇: 汇编 无条件转移和过程调用指令