记录一下蓝桥杯嵌入式各个模块的赛前框架配置
目录
一. LCD
1. 复制模板文件
找到资源数据包对应路径下的lcd模板,复制到要编写的路径下
2. 修改lcd.c文件
打开工程文件,对lcd.c进行修改。
拉到540行对3个函数修改,LCD_WriteReg、LCD_WriteRAM_Prepare、LCD_WriteRAM
三个函数都是一样的修改
3. 下载配置
4. 添加代码
#include "stdio.h"
__IO uint32_t Lcd_uwTick;
char a[21]={0}; //第一行
void lcd(void);
void lcd(void)
{
if(uwTick-Lcd_uwTick<200)return;
Lcd_uwTick=uwTick;
sprintf(a,"hello");
LCD_DisplayStringLine(Line0, (unsigned char *)a);
}
二. LED
1. 引脚配置
追求速度,直接在MX_GPIO_Init()里添加初始化
__HAL_RCC_GPIOD_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
2. 添加代码
void LED_dis(uint8_t a);
void LED_undis(uint8_t a);
void LED_t(uint8_t a);
//主函数里,循环上一步
LED_undis(0xff);
//循环里
LED_dis(0x01);
LED_t(0x02);
HAL_Delay(500);
void LED_dis(uint8_t a)
{
HAL_GPIO_WritePin(GPIOC, a<<8, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
void LED_undis(uint8_t a)
{
HAL_GPIO_WritePin(GPIOC, a<<8, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
void LED_t(uint8_t a)
{
HAL_GPIO_TogglePin(GPIOC, a<<8);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
三. KEY
1. 引脚配置
直接在MX_GPIO_Init()里加
/*Configure GPIO pins : PA0 */
GPIO_InitStruct.Pin = GPIO_PIN_0 ;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pins : PB0 PB1 PB2 */
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
2. 添加代码
key.h
#include "main.h"
void key_scan(void);
extern uint8_t aj;
key.c
#include "key.h"
__IO uint32_t Key_uwTick;
void key_scan(void)
{
if(uwTick-Key_uwTick<200)return;
Key_uwTick=uwTick;
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0)
{
HAL_Delay(100);
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0)
{
aj=1;
}
}
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==0)
{
HAL_Delay(100);
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==0)
{
aj=2;
}
}
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==0)
{
HAL_Delay(100);
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==0)
{
aj=3;
}
}
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0)
{
HAL_Delay(100);
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0)
{
aj=4;
}
}
}
main.c
uint8_t aj;
//循环里
key_scan();
//
void lcd(void)
{
if(uwTick-Lcd_uwTick<200)return;
Lcd_uwTick=uwTick;
sprintf(a,"hello:%d",aj);
LCD_DisplayStringLine(Line0, (unsigned char *)a);
}
3. key.c添加至项目
四. TIM定时器
这时还是得用上STM32CubeMX了
1. 引脚配置
2. 添加代码
(1)复制tim.h和tim.c文件或者新建文件复制内容,添加到项目
(2)再复制stm32g4xx_it.c里的代码
(3)在stm32g4xx_hal_conf.h文件里开启TIM模块
(4)在stm32g4xx_hal_tim.h文件里找到HAL_TIM_PeriodElapsedCallback和HAL_TIM_Base_Start_IT
main.c
#include "tim.h"
MX_TIM6_Init();
HAL_TIM_Base_Start_IT(&htim6);
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM6)
{
lcd();
LED_t(0x02);
}
}