【STM32】4.核心板的电路原理与驱动编程
课时1.核心板电路分析
1.1核心板元器件分解电路图
课时2.点亮LED灯
2.1先玩一玩LED灯的示例程序
切换一下1或2号LED灯,通过0或1来控制一下亮灭,通过延时来控制一下闪烁频率。
了解了这3要素之后,再去研究LED控制程序。
2.2LED初始化
所有IO端口在使用之前必须初始化,初始化的内容包括
(1)是IN还是OUT
(2)端口号是多少
(3)如果是输出,输出的速率是多大
初始化程序如下:
各行含义如下:
(1)GPIO初始化参数的结构体声明,结构体内容包括端口号、速度和模式;
(2)在时钟层面上启动IO端口,GPIO是连接到APB2高速总线上的,所以要在APB2高速总线上启动一些功能。指令中启动了GPIOA、GPIOB和GPIOC
(3)3~4行设置了GPIO的端口号、速度和模式,其中
LED1和LED2是对GPIO_Pin_0和GPIO_Pin_1的宏定义以便修改维护,这里指定了LED1和LED2而其他GPIO不会被设置,
输入输出模式设置为Out_PP推挽输出模式(大电流),
只有输出模式时需要设置的速度设置为50MHz
(4)运行GPIO的初始化库函数,第一个参数LEDPORT是对GPIOB的宏定义(PB组),第二个参数是上面设定的结构体
2.3LED设置
使用了库函数GPIO_WriteBit
输入三个参数:(1)哪一组端口(2)端口号(3)输出状态是置位还是清零,用的是BitAction枚举
2.4对GPIO的操作方式
按bit读写、按16bit一组进行读写、直接写0x
宏定义的层层封装
2.5呼吸灯
在一个宽度为n毫秒的时间内,亮的时长从1迭代到n,而灭的时常从n迭代到1,这样就是一个渐亮的过程;到达最亮后,反过来就是渐灭的过程。
课时3.读取GPIO
3.1读取按键,控制LED
注意Key1和Key2是接到PA组的
3.2读取按键,锁存控制LED
读到按键信号时,取反当前输出状态即可,输出之后需要进入循环等待按键松开
课时4.Flash读取程序
4.1存储的分布
用户可以读写页0~页127,每次读写都是以页为单位进行,每页内存为1Kb
4.2操作原则
课时5.蜂鸣器驱动程序
5.1有源和无源蜂鸣器
5.2蜂鸣器工作逻辑
下图有误,蜂鸣器应该接在集电极上,以防干扰控制信号的幅值。
当PB5控制引脚为高电平时蜂鸣器不工作、为低电平时蜂鸣器工作。
通过控制PB5的PWM来控制蜂鸣器的声音。
课时6.MIDI音乐播放程序
6.1MIDI音乐的组成
音调和时常,其中音调由频率控制
控制蜂鸣器按规律切换频率和时长,就能播放出MIDI音乐。参考示例程序。
课时7.USART驱动程序
7.1发送
USART有USART1、2、3这3个串口,分别有以下几种发送数据的方式:
(1)USART_SendData,一次只能发送一个字节;
(2)printf(格式化字符串),这里和stdio中的printf是不同的,而是STM32自带的串口打印函数,根据usart.h中的宏定义决定printf函数默认用USART几来输出;
(3)自定义的USART1_printf(格式化字符串),其实内部是使用方法(1)遍历输出字节,只是免去了方法2串口选择的麻烦;
7.2接收
首要问题是如何知道有数据发送过来,一种方式是查询寄存器的标志位,一种是通过中断响应函数被调用来知道。
7.3控制程序
所谓控制,就是明确在单片机一侧需要做的2方面事情,1是报告2是响应。
(1)报告,当单片机上有某信号发生时要从串口发送什么出去;
(2)是从串口收到某数据后要如何处理。
7.4小tip定义全局变量
在c中定义变量,在.h文件中将其声明为extern,则其他程序在引用该.h文件时就可使用该变量。
课时8.RTC原理与驱动程序
8.1RTC与后备寄存器
STM32的RTC是实时时钟,其驱动时钟有3个来源。
后备寄存器是当Vdd没有供电时,可以由Vbat供电来保存20个字节的用户应用程序。
RTC和后备寄存器不会被系统或电源复位源复位,当从待机模式唤醒时也不会被复位。
8.2如何记录时间
8.3RTC驱动程序分析
(1)RTC的复位逻辑分为首次上电初始化和普通初始化。当第一次上电或后备电源掉电后,才需要首次上电初始化。
通过读取、判断备用寄存器的数值是否为之前设定的数值来判断RTC是否发生了掉电,从而决定不同的初始化逻辑。
(2)可以启动RTC的秒中断或闹钟中断。
(3)一些时间计算函数,照用即可。
课时9.RCC设置程序分析
9.1什么是RCC
时钟和复位程序的缩写。
可以设置单片机的时钟输入源、CPU各种总线的时钟频率。
9.2时钟树
SYSCLK左侧展示如何通过RCC的配置产生主频,右侧是如何使用主频。