# 开发板采用STM32C8T6,开发环境为KEIL,基于HAL开发,大大提高不同芯片之间的代码移植
主要基于以下两点原因:标准库将不再更新,未来HAL库和LL库将成为主流标准。虽然寄存器版本代码效率比较高,但是对于新手配置各种寄存器不仅烦琐,也会打击学习的积极性,当你学会了HAL库的配置,标准库学起来也没有辣么难,各个版本开发都有各自的优缺点,选择一种适合你的版本进行学习,贪多嚼不烂
# 下载器 采用 ST-link,由于FLYmcu下载程序一直要找hex文件,比较麻烦,本人比较懒,所以比较推荐使用这个下载器,下载速度也不错。
#硬件连接 LED1 PB8 LED2 PB9 蜂鸣器(低电平触发,且含有震荡源)PB8
#有源蜂鸣代码部分,采用低电平触发
#ifndef __BEEP_H_
#define __BEEP_H_
void beep_init(void);
void beep_on(void);
void beep_off(void);
#endif
#include "Beep.h"
#include "sys.h"
/*
*function:蜂鸣器的初始化,开启,关闭
*time:2024-8-1
*retval:none
*/
void beep_init()
{
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_8;
GPIO_InitStruct.Mode =GPIO_MODE_OUTPUT_PP ;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed =GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);
}
void beep_on(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
}
void beep_off(void)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
}
#LED代码
#ifndef __LED_H_
#define __LED_H_
void led_init(void);
void led1_on(void);
void led1_off(void);
void led1_toggle(void);
void led2_on(void);
void led2_off(void);
void led2_toggle(void);
#endif
#include "LED.h"
#include "sys.h"
//初始化GPIO函数
void led_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;//定义结构体变量
//打开时钟
__HAL_RCC_GPIOB_CLK_ENABLE();// 使能GPIOB时钟
//调用GPIO初始化函数
GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9; // LED1对应的引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
GPIO_InitStruct.Pull = GPIO_PULLUP; // 上拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // 高速
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
//关闭LED
}
//点亮LED1的函数
void led1_on(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET); // 拉低LED1引脚,点亮LED1
}
//熄灭LED1的函数
void led1_off(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET); // 拉高LED1引脚,熄灭LED1
}
//翻转LED1状态的函数
void led1_toggle(void)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8);
}
//点亮LED2的函数
void led2_on(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET); // 拉低LED1引脚,点亮LED1
}
//熄灭LED2的函数
void led2_off(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET); // 拉高LED1引脚,熄灭LED1
}
//翻转LED2状态的函数
void led2_toggle(void)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
}
#main函数代码
#include "sys.h"
#include "delay.h"
#include "LED.h"
#include "Beep.h"
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
led_init(); /* LED初始化 */
beep_init();
while(1)
{
beep_on();
led1_on();
led2_off();
delay_ms(1000);
led1_off();
led2_on();
beep_off();
delay_ms(1000);
}
}
LED & Beep
实验结果,每隔一秒钟,两个LED循环闪烁,蜂鸣器响一次
#本次动手总结:及时程序没有错误,一定要检查IO接口接线是否无误,有没有松动,先从硬件排查,其次是软件方面