蓝桥杯嵌入式-LED
·
本篇文章是在蓝桥杯嵌入式-任务调度器完整的项目下补充完成的。如果需要代码,直接看第四部分的下载链接。
一、STM32CubMX配置

二、代码方面
2.1 main.c
2.1.1 修改位置

2.1.2 对应代码
GPIOC -> ODR |= 0xFF00;
GPIOD -> BSRR |= 0x01 << 2;
GPIOD -> BRR |= 0x01 << 2;
2.2 task.c
2.2.1 修改位置

2.2.2 对应代码
uint8_t ucLed[8];
void led_disp(uint8_t *ucLed)
{
uint8_t temp = 0x00;
static uint8_t temp_old = 0xff;
for (uint8_t i = 0; i < 8; i++)
temp |= (ucLed[i] << i);
if (temp_old != temp)
{
GPIOC->ODR &= 0x00FF;
GPIOC->ODR |= ((uint16_t)(~temp) << 8);
GPIOD->BSRR = GPIO_PIN_2;
GPIOD->BRR = GPIO_PIN_2;
temp_old = temp;
}
}
void led_proc(void)
{
led_disp(ucLed);
}
task_t scheduler_t[] =
{
{led_proc, 10, 0}
};
三、部分考点介绍
3.1 点亮一个LED
3.1.1 修改位置

3.1.2 对应代码
void led_proc(void)
{
ucLed[0] = 1; // 点亮第一个LED
ucLed[7] = 1; // 点亮第八个LED
led_disp(ucLed); // 更新LED显示
}
3.2 LED灯闪烁
3.2.1 修改位置

3.2.2 对应代码
uint32_t led_start_time = 0;//保存上一次闪烁时间(注意:变量类型必须用uint32_t,与uwTick类型匹配)
void led_proc(void)
{
// LED灯闪烁 - 每1000ms切换一次状态
if(uwTick - led_start_time >= 1000) // 闪烁间隔1000ms,周期2000ms(亮1000ms,暗1000ms)
{
ucLed[2] ^= 1; // 切换LED2状态(异或操作:0变1,1变0)
led_start_time = uwTick; // 更新切换时间
}
led_disp(ucLed); // 更新LED显示
}
四、其他
4.1 STM32CubMX单个引脚配置


4.2 完整代码下载
资料下载:https://pan.quark.cn/s/08f8e6116512
更多推荐
所有评论(0)