基于HAL库有源蜂鸣器和LED控制

# 开发板采用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接口接线是否无误,有没有松动,先从硬件排查,其次是软件方面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值