============================
2022-8-18
============================
一.温故知新
1.通过讲硬件的手册了解芯片内部结构
CPU使用的是ARM-CORTEX-M3的核心,主频是72MHz
CPU是通过三总线(数据 地址 控制)来访问外设的
在STM32中AHB AHB1 AHB2都是三总线叫做高速总线
在STM32中APB1 APB2也是三总线叫做外设总线
芯片的管脚是多功能复用型的管脚
2.GPIO的输出
驱动LED灯
选择了操作外设的寄存器的开发方式(需要使用C语言的位运算符)
寄存器的真实地址 = 基地址 + 偏移地址
*(volatile unsigned int *)(0x40011000 + 0x0C)
举一反三
驱动蜂鸣器
BEEP PC7
管脚输出高电平,蜂鸣器响
管脚输出低电平,蜂鸣器不响
二.GPIO的输入
输入功能相当于检测,输出功能相当于控制
输入功能分为
上拉输入 管脚在没有外设操作的情况下,默认呈现的是高电平的状态
对于低电平有触发效果
下拉输入 管脚在没有外设操作的情况下,默认呈现的是低电平的状态
对于高电平有触发效果
浮空输入 管脚在没有外设操作的情况下,默认呈现的既不是高也不是低
会对于外界的影响而变化
(当在操作串口外设功能时会用到浮空输入)
驱动开发板上的功能按键
1.查看开发板原理图
KEY0 PC9 上拉输入
KEY1 PC8 上拉输入
KEY2 PA0 下拉输入
KEY0 KEY1在没有按下时应当检测到高电平,按下应当检测到低电平
KEY2在没有按下时应当检测到低电平,按下应当检测到高电平
2.查看芯片的手册
#define GPIOC_IDR *(volatile unsigned int *)(GPIOC_BASE + 0x08)
如何读取第9位的电平高低?
ret = (GPIOC_IDR >> 9) & 0x01;
3.写功能按键的驱动程序
ST的官方固件大部分的参数都是按照位图来定义的
以位图的形式定义
GPIOA 0x0001 0001
GPIOB 0x0002 0010
GPIOC 0x0004 0100
GPIOD 0x0008 1000
GPIOA | GPIOB = 0011
不是以位图的形式定义
GPIOA 0x0001 0001
GPIOB 0x0002 0010
GPIOC 0x0003 0011
GPIOD 0x0004 0100
GPIOA | GPIOB = 0011
三.换一种开发方式
需要调用ST公司的官方固件
手册是辅助大家开发的,千万不要本末倒置
四.演示未来的开发方式
STM32CUBEMX + Keil
===============================
作业
1.把今天讲过的内容完整的复习一遍
2.把<01test>项目工程拷贝一份,用LIB库实现LED灯、蜂鸣器、功能按键
3.完成需求
通过3个功能按键,控制3个LED灯(开关)
当按下抬起KEY0,LED0常亮,当再一次按下抬起KEY0,LED0常灭
当按下抬起KEY1,LED1常亮,当再一次按下抬起KEY1,LED1常灭
当按下抬起KEY2,LED2常亮,当再一次按下抬起KEY2,LED2常灭
===============================