系列文章目录
目录
目录
一、创建工程
使用stm32CubeMX,创建工程
选择芯片型号为stm32G431RBT6
配置时钟源为外部高速时钟
配置debug为SW
查看产品手册知外部晶振为24Mhz,且没有放置外部低速晶振,因此时钟使能不能使能低速,且低速引脚被LED和LCD使用
故时钟树配置如上
查看手册知LED引脚为PC8-15,在蓝桥杯嵌入式的板子上,控制LED相应的IO口还接了一个锁存器,由PD2控制,所以有关LED和锁存器的口都配置成输出模式
工程名以及编程软件
最后创建工程
二、代码编写
关于锁存器
所以用法也就是,因为 LCD 的引脚也用到了部分 PC8-15,这样使用 LCD 与led 控制就会
有冲突,用锁存器,就可以对 led 与 LCD 进行控制。且建议每次设置完led 后,把 LE
置低锁存。
先将PD2拉高,操作完LED后将PD2拉低
打开keil后的debug配置
1.LED显示函数
/*
函数功能:控制LEDX的亮灭
参数:LED_LOCATION:LED的位置,如LED1_Pin
LED_NUM:LED的电平状态,0-亮,1-灭
*/
void LED_Display(uint16_t LED_LOCATION,uint16_t LED_NUM)
{
HAL_GPIO_WritePin(GPIOC,LED_LOCATION,(LED_NUM == 1 ? GPIO_PIN_SET : GPIO_PIN_RESET));
HAL_GPIO_WritePin(LOCK_GPIO_Port,LOCK_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LOCK_GPIO_Port,LOCK_Pin,GPIO_PIN_RESET);
}
2.LED翻转显示函数
/*
函数功能:翻转LEDX的电平
参数:LED_LOCATION:LED的位置,如LED1_Pin
*/
void MYLED_TogglePin(uint16_t LED_LOCATION)
{
HAL_GPIO_TogglePin(GPIOC,LED_LOCATION);
HAL_GPIO_WritePin(LOCK_GPIO_Port,LOCK_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LOCK_GPIO_Port,LOCK_Pin,GPIO_PIN_RESET);
}
3.主函数
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
//先关闭所有LED
LED_Display(LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin|LED5_Pin|LED6_Pin|LED7_Pin|LED8_Pin,1);
uint8_t i;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//用LED1测试,翻转10次电平后,亮2s,灭2s
for(i = 0; i < 10; i++)
{
MYLED_TogglePin(LED1_Pin);
HAL_Delay(500);
}
LED_Display(LED1_Pin,0);
HAL_Delay(2000);
LED_Display(LED1_Pin,1);
HAL_Delay(2000);
}
/* USER CODE END 3 */
}
4.现象
LED
总结
LED的简单使用就是这样,实际还要结合题目要求编写对应逻辑