===========================
2022-8-17
===========================
一.温故知新
从表象到里象的方式去了解设备
1.从外观入手
开发板上外接了哪些模块、使用芯片的型号
2.画图了解芯片内部结构
CPU + 内存 + 硬盘 + 外设
3.介绍了ARM公司和ST公司
ARM-CORTEX-A 针对高端应用(手机 平板电脑 安卓电视)
ARM-CORTEX-R 针对实时操作系统(军工、航天、医疗)
ARM-CORTEX-M 针对工控领域(智能终端设备)
4.通过手册了解芯片
最新选型手册 : 外设数量、存储大小、封装形式
5.开发方式
6.搭建模板项目工程
二.通过硬件的手册了解芯片内部的结构
打开<STM32RBT6\DataSheet\STM32>目录下<STM32F103RB.pdf>
P19 芯片内部的结构
1.STGM32F103RBT6芯片使用的CPU是ARM-CORTEX-M3主频是72MHz
2.CPU是通过三总线来访问外设的
3.三总线包括 : 数据总线(传输数据) 地址总线(传输地址) 控制总线(控制读写)
--------------------------------------------------------
例子 :
在某工程中,要求给地址为0xaa55的空间复制一个整型的数据,
数据为0x55aa
0xaa55 = 0x55aa;.//不可以,因为左值是一个常量
*(volatile unsigned int *)(0xaa55) = 0x55aa;
--------------------------------------------------------
4.在STM32芯片中AHB AHB1 AHB2都是三总线,叫做高速总线
APB1 APB2也是三总线,叫做外设总线
5.GPIO的管脚是从0开始计数的
GPIOxy
[x = A B C D]
[y = 0 1 2 ... 15]
6.大部分的外设都是连接到了外设总线上,所以当某个外设工作时
需要先通过相应的外设总线打开外设的时钟,该外设才能工作
P23 芯片的管脚
GPIOA [0 - 15]
GPIOB [0 - 15]
GPIOC [0 - 15]
GPIOD [0 1 2]
P26 芯片管脚的复用
芯片的管脚是多功能复用型的管脚
输入功能
上拉输入
下拉输入
浮空输入
输出功能
推挽输出
开漏输出
复用功能
推挽复用
开漏复用
模拟功能
模拟输入
三.GPIO外设之输出功能
输入功能相当于是检测,输出功能相当于是控制
输出功能分为推挽输出和开漏(漏级)输出
推挽输出 : 管脚既可以输出高电平,也可以输出低电平
开漏输出 : 管脚只能输出低电平,输出不了高电平
LED->PC9管脚
如果PC9管脚输出高电平,LED灯灭
如果PC9管脚输出低电平,LED灯亮
01LED灯
问题 : 芯片的管脚是多功能复用型的管脚,如何给管脚选择输出功能?
答 : 可以通过操作GPIO外设的寄存器来选择输出的功能
问题 : GPIO都有哪些寄存器?
答 : 可以通过查询芯片的手册了解GPIO的寄存器以及操作方式
打开<STM32RBT6\DataSheet\STM32>目录下<STM32F10x中文参考手册.pdf>
寄存器的真实地址 = 基地址 + 偏移地址
例如 :
GPIOC_CRL的真实地址 = GPIOC组的基地址 + CRL寄存器的偏移地址
= 0x40011000 + 0x00
因为需要操作PC9管脚,所以需要使用端口配置高寄存器
GPIOC_CRH的真实地址 = GPIOC组的基地址 + CRH寄存器的偏移地址
= 0x40011000 + 0x04
#define GPIOC_CRH *(volatile unsigned int *)(0x40011000 + 0x04)
GPIOC_CRH |= (3 << 4);//把PC9管脚配置为输出功能并且为50MHz的输出速率
-----------------------------------------------------------------------------
3 00000000 00000000 00000000 00000011
3<<4 00000000 00000000 00000000 00110000
|
GPIOC_CRH xxxxxxxx xxxxxxxx xxxxxxxx xx##xxxx
=
GPIOC_CRH xxxxxxxx xxxxxxxx xxxxxxxx xx11xxxx
-----------------------------------------------------------------------------
GPIOC_CRH &= ~(3 << 6);.//把PC9管脚配置为推挽输出
-----------------------------------------------------------------------------
3 00000000 00000000 00000000 00000011
3<<6 00000000 00000000 00000000 11000000
~(3<<6) 11111111 11111111 11111111 00111111
&
GPIOC_CRH xxxxxxxx xxxxxxxx xxxxxxxx ##11xxxx
=
GPIOC_CRH xxxxxxxx xxxxxxxx xxxxxxxx 0011xxxx
-----------------------------------------------------------------------------
#define GPIOC_ODR *(volatile unsigned int *)(0x40011000 + 0x0C)
GPIOC_ODR &= ~(1 << 9);//把PC9管脚输出低电平(亮灯)
GPIOC_ODR |= (1 << 9);//把PC9管脚输出高电平(灭灯)
四.通过开发板原理图查看芯片的管脚
打开<STM32RBT6\开发板原理图>目录下<MCU.pdf>和<Periph.pdf>
LED0 PC1
LED1 PC2
LED2 PC3
输出高电平,灯亮
输出低电平,灯灭
需要操作GPIOC_CRL(端口配置低寄存器)以及
GPIOC_ODR(端口输出数据寄存器)
五.写程序驱动LED灯
1.通过开发板原理图找到LED灯连接的管脚
2.分析模块的工作方式
3.把最近的一个项目工程拷贝一份重命名一下
4.在<02led/mylib>目录中新建<led.c>和<led.h>
5.在<02led/project>目录中找到项目工程文件,并且打开
6.在Keil的左边侧边栏中的mylib组内添加led.c文件
六.举一反三
大家通过<02led>的项目工程,尝试着搭建<03beep>的项目工程
效果
在流水灯的基础上加入蜂鸣器
0 1 2
0->1->2->0->1->2
灯亮的同时蜂鸣器响,灯灭的同时蜂鸣器关闭
=================================
作业
1.把今天讲过的内容完完整整的复习一遍
2.把举一反三的内容做出来
3.刷题
课外
自己找音乐的编码把音乐通过蜂鸣器播放出来
=================================