蜂鸣器实验
1.蜂鸣器硬件连接
蜂鸣器的驱动与LED灯的驱动存在不同,LED灯可以直接用IO口进行驱动但蜂鸣器因驱动电流过大,不适宜用电流直接驱动,因此使用三极管的电流放大效应,实现用小电流驱动蜂鸣器。
驱动信号作用在芯片的PB8口上,其中的R33电阻作用在于过滤干扰电流确保蜂鸣器不会意外发声。
2.蜂鸣器实验代码参考
beep头文件
beep源文件
调用stm32f10x.h是为了调用RCC时钟函数,同时不同的IO口调用的时钟使能函数不同
主函数
led.h头文件与之前的相同,delay与sys的头文件直接引用即可
按键输入实验
1.硬件连接
2.实验代码展示
头文件:
源文件:
其中的key_scan用于检验三个按钮是否按下,再根据模式判断连续按下是否有用,0则是连续按下无效,需要松开下次按才会响应。1则是连续按,连续返回键值
KEY1与KEY0按下时端口信号为0;WK_UP按下时端口信号为一。
主函数
NVIC优先级管理
STM32有84个中断,16个内核中断,68个可屏蔽中断,16个可编程的中断优先级。
NVIC中断优先级分组:
中断分为0~4组,同时对每个中断设置一个抢占优先级与响应优先级
组 | AIRCR[10:8] | IP bit[7:4]分配情况 | 分配结果 |
0 | 111 | 0:4 | 0位抢占优先级,4位响应优先级 |
1 | 110 | 1:3 | 1位抢占优先级,3位响应优先级 |
2 | 101 | 2:2 | 2位抢占优先级,2位响应优先级 |
3 | 100 | 3:1 | 3位抢占优先级,1位响应优先级 |
4 | 011 | 4:0 | 4位抢占优先级,0位响应优先级 |
抢占优先级与响应优先级区别:
1.高抢占优先级可以打断低抢占优先级(优先级越小越高)
2.相同抢占优先级,高响应优先级不可以打断低响应优先级,但二者同时发生时,高响应先执行
3.当两个抢占优先级与响应优先级均相同时,哪个先发生哪个先执行
NVIC中断优先级设置:
中断优先级分组函数:
中断设置相关寄存器
相关函数在core_cm3.h中
如何为每个中断设置优先级呢?
使用NVIC_Init函数即可
中断优先级的设置步骤:
1.设置中断优先级分组(在整个系统中只执行一次)
2.设置每个中断的抢占和响应优先级
3.是否需要挂起或解挂