嵌入式蓝桥杯学习1 点亮LED
cubemx配置
1.新建一个STM32G431RBT6文件
2.在System-Core中点击SYS,找到Debug(设置为Serial Wire)
3.在System-Core中点击RCC,找到High Speed Clock(设置为Crystal/Ceramic Resonator)
4.打开Clock Configuration (时钟树配置),将左侧的Input frequency改为24(要将PLL改为HSE才能改),然后点击PLLCLK,将HCLK(MHz)设置为80,设置完后按回车会自动配置时钟树。
上述为系统内部配置,下面配置使用到的GPIO引脚。
LED使用的引脚为PC8-PC15.
1.将PC8-PC15的引脚都设置为GPIO_Output。
2.将PD2设置为GPIO_Output。
在System-Core中点击GPIO,将PC8-PC15全选中,对输出选项进行配置。
GPIO output level (初始电平) :High(初始化为高电平,使所有LED熄灭)
GPIO mode(输出模式):Output Push Pull (选择推挽输出)、
GPIO Pull-up/Pull-down(上拉/下拉):No pull-up and no pull-down(不需要上下拉)
Maximum output speed(速度):Low(低速节能,PC14和PC15只能选择低速)
点击Project Manager
1.Project name(文件名)(不要有中文)
2.Project Location (文件路径):选择没有中文路径的。
3.Toolchain /IDE:MDK-ARM
点击Code Generator ,在STM32Cube MCU packages and enbedded software packs中选择Copy only the necessary library files (复制必要的库文件,可以大幅度减少工程体积);勾选Generated files 中的Generated peripheral initialization as a pair of '.c/.h' files per peripheral.
点击GENERATE CODE.
配置keli
(先编译一下,看看有没有报错,没报错再接着往下走)
在工程目录下新建一个文件夹(bsp)
在bsp中新建my_main.h、my_main.c
新建一个组命名为bsp,把新建好的文件添加进行。
点击魔术棒,C/C++——Include Path——添加bsp的路径
点击Debug,改为DAP调试器。
点击setting,在Flash download里面勾选Reset and Run。
代码编写
知识补充
PD2 : 74HC573的LE(PD2)端为1时,Q端随D端变化;LE端为0时,Q端不随D端变化
GPIO输出函数:
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin,GPIO_PinState PinState);
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
参数说明:
GPIOx:GPIO名称,取值是GPIOA~GPIOG
GPIO_Pin:GPIO引脚,取值是GPIO_PIN_0 ~ GPIO_PIN_15
GPIO_PIN_All <-l小写
PinState:GPIO引脚状态,取值是GPIO_PIN_RESET或GPIO_PIN_SET
在main.c中添加以下内容
1.在25行添加include“my_main.h”
2.在89行添加setup()
3.while(1)内添加loop()
my_main.h
#ifndef _MY_MAIN_
#define _MY_MAIN_
#include "gpio.h"
#include "main.h"
void setup(void);
void loop(void);
void LED_Disp(uint8_t dsLED);
#endif
my_main.c
#include "my_main.h"
//LED引脚: PC8 - PC15
//uint8_t led_sta=0x10;
uint8_t led_sta=0x01;
/*
电量LED:
1.把PC0-PC15置为高电平
2.原地址在0-7,左移8位送入8-15
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
3.开关锁存器(PD2)
1:熄灭 0:点亮
*/
void LED_Disp(uint8_t dsLED)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);//所有LED熄灭(l小写)
HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);//左移8位:控制C8-C15引脚,值为1的电量
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);//开锁存器
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);//关锁存器
}
//单独控制LED某一位
void LED_chg(uint8_t num,uint8_t sta)
{
//uint8_t pos=0x01;
//pos=pos<<(num-1);
//if(sta==1) led_sta=(led_sta&(~pos))|pos;
//else led_sta=(led_sta&(~pos));
//LED_Disp(led_sta);
uint8_t pos=0x01<<(num-1);
led_sta=(led_sta&(~pos))|(pos*sta);
LED_Disp(led_sta);
}
//程序开始时执行一次
void setup()
{
LED_Disp(0x00);
//HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
//HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET);
}
//反复执行
void loop()
{
//LED闪烁0.0
//HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET);
//HAL_Delay(1000);
//HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET);
//HAL_Delay(1000);
//LED闪烁1.0
//HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8);
//HAL_Delay(500);
//LED闪烁2.0
//LED_Disp(0x02);
//HAL_Delay(500);
//LED_Disp(0x00);
//HAL_Delay(500);
//LED闪烁4.0
//led_sta=(led_sta&0xfe)|0x01;
////0001 0000 led_sta
////1111 1110 0xfe
////0001 0000 作用:最后一位清零 XXXX XXX0
////0000 0001 0x01
////0001 0001 led_sta
//LED_Disp(led_sta);
//HAL_Delay(500);
//led_sta=(led_sta&0xfe)|0x00;
////0001 0001 led_sta
////1111 1110 0xfe
////0001 0000
////0000 0000
////0001 0000
//LED_Disp(led_sta);
//HAL_Delay(500);
//LED交替点亮
// for(int i=0;i<10;i++)
//{
//led_sta=(led_sta&0xfe)|0x01;
//led_sta=(led_sta&0xfd)|0x00;
//LED_Disp(led_sta);
//HAL_Delay(100);
//}
//for(int i=0;i<10;i++)
//{
//led_sta=(led_sta&0xfd)|0x02;
//led_sta=(led_sta&0xfe)|0x00;
//LED_Disp(led_sta);
//HAL_Delay(100);
//}
//流水灯 1.0
//for(int i=0;i<8;i++)
//{
//LED_Disp(0x01<<i);
//HAL_Delay(400);
//}
//for(int i=1;i<7;i++)
//{
//LED_Disp(0x80>>i);
//HAL_Delay(400);
//}
//流水灯 2.0
//for(int i=0;i<8;i++)
//{
//led_sta=(led_sta&0x00)|(0x01<<i);
//LED_Disp(led_sta);
//HAL_Delay(700);
//}
LED_chg(2,1);
HAL_Delay(500);
LED_chg(2,0);
HAL_Delay(500);
}
/*
与&:全1为1。
或|:有1则1。
<<:左移。
*/
原文地址:https://blog.csdn.net/m0_74246768/article/details/144227188
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!