延续上一篇 ”STM32F103RB 实作笔记(一)- 跑马灯(正点原子 STM32F103 nano开发板)程式解析“,我们今天进行第二个程式解析。
和上一篇一样,进入找到 USER 的档案夹,直接点开 BEEP 项目档,并且进行编译和执行。
硬件配置
先看一下 线路图,可以知道
选择 PB8 来控制这个蜂鸣器。
BEEP 要用低电平 来驱动。
从原厂附上的资源配置图片,表明左下角的 BEEP 是”有源“型式的。
有源型式的 BEEP 在百度查得的说明如下图,就是”给他电力就会直接叫“。
主程式 Main.c
主程式 Main.c 的内容如下:
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "beep.h"
/************************************************
************************************************/
int main(void)
{
Stm32_Clock_Init(9); //
delay_init(72); //
LED_Init(); //
BEEP_Init(); //
while(1)
{
LED0=0;
BEEP=0;
delay_ms(300);//
LED0=1;
BEEP=1;
delay_ms(300);//
}
}
程式很单纯,就是 LED0、BEEP 开 300ms, 然后 关 300ms。比较需要的是了解 LED_Init()、BEEP_Init() 这两个副程式;
先看看 LED_Init(),是在 LED.c 里面
#include "led.h"
//
//
void LED_Init(void)
{
RCC->APB2ENR|=1<<4; //
GPIOC->CRL&=0X00000000; //清除PC0~7设定
GPIOC->CRL|=0X33333333;//设定 PC0~7 的 CNFy=00,MODEy=11·
GPIOC->ODR|=(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7);//PC.0~7
}
上一篇文章没有对 LED_Init() 做解析,这一次就追以下是怎么写的。
第一个是 APB2ENR,把第四 bit 设成 ”1“,就是把 GPIOC 打开。
再过来是把GPIO 的 CRL/CHL 做个设定。
GPIO是用 16 bits脚位 做资料的输出入,CRL/CHL 是控制这些脚位的设定,每个脚位用 4 个 bit 就要 16 * 2 * 2个 bit 来控制,CRL 是低 8 个脚位的控制, CRH 是高 8 个脚位的控制。
CRL/CHL 的设定又分 两种 CNFy[1:0] 和MODEy[1:0]
从程式里面可以看到 GPIOC的输出被设定为:
MODE=11:输出模式,最大速度50MHz
CNF=00:通用推挽输出模式-- ”在输出模式(MODE[1:0]>00)“
然后输出在高电平’1‘。
再看看 BEEP_Init(),是在 BEEP.c 里面
#include "beep.h"
//
//
void BEEP_Init(void)
{
RCC->APB2ENR|=1<<3; // 选择 GPIOB
GPIOB->CRH&=0XFFFFFFF0; //清除 bit 0~3.其他 bit 不变
GPIOB->CRH|=0X00000003;//PB8 设定成 ’0011‘
GPIOB->ODR|=1<<8;//PB8 再设定在高电平输出
}
前面解释完 LED.c 后 再看 BEEP.c 就简单多了。
OK ! 这个程式说明完了!
上一篇:STM32F103RB 实作笔记(四)- LED 7 节显示
下一篇:STM32F103RB 实作笔记(一)- GPIOC LED 跑马灯
推荐阅读最新更新时间:2024-11-12 20:06
设计资源 培训 开发板 精华推荐
- 金朗STM32F103RCT6高教开核心板
- DC1788B-A,使用 LT4275AIDD PoE+ PD 控制器的演示板,符合 IEEE 802.3at/IEEE 802.3af
- DC854D-E、LTC2217IUP 演示板、CMOS 输出、105 Msps、16 位 ADC 1MHz
- AM6TW-4815SZ 15V 6 瓦单路输出 DC-DC 转换器的典型应用
- LT1021CIN8-5 具有升压输出电流和电流限制的电压基准的典型应用
- LTC3839 的典型应用 - 具有差分输出检测功能的快速、准确、两相、单输出降压型 DC/DC 控制器
- LT1171,用户线接口电路的电源
- LT3663IDCB、5V 降压转换器的典型应用
- LT1170HVCT、12V/5A 负至正降压-升压转换器的典型应用
- AD8659ACPZ-RL电压跟随器运算放大器典型应用电路