day03笔记
一、不管是MCU还是SOC都可以构成一个微型计算机系统
STM32F103RBT6=CPU+内存+硬盘+外设
startup_stm32f10x_md.s 维护了cpu的异常向量表
二 、回顾c语言
1、变量的声明和定义
int var;//声明
int var=2020;//定义
2、 计算机中没有数据类型:数据类型说白了就是计算机访问内存的一种规则,以及这种规则需要遵循的方式
3、指针就是地址,地址就是编号。指针也是一种数据类型。
SRAM 静态内存 cpu内部 cache :64KB 32M 缓存
DRAM 动态内存 cpu外部
四、cpu通过总线与外设通信
1、什么是总线:
(1)冯诺依曼体系结构:取指令和取数据用同一根总线
(2)哈弗体系结构板:取指令和取数据用不同的总线
cpu从内存中取指令
2、计算机体系结构中根据功能不同,划分出三种不同总线,简称三总线
控制总线:控制传输时序
数据总线:传输数据
地址总线:传输地址
在stm32中:
系统内部的高速总线:AHB(AHB1 AHB2)
外设总线:APB(APB1 APB2)
注:由于在stm32中,cpu是通过APB1 APB2和外设通信的,所以将来想要驱动某个外设时,首先需要通过APB1或APB2使能改组时钟
五、GPIO管脚资源
1、STM32F103RBT6开发板上有5组GPIO管脚,每组有16个管脚。
2、管脚复用:
对于一个GPIO管脚而言,最多可以有8种功能
(1)输入功能:
a、上拉输入:默认状态下,管脚上呈高电平。
b、下拉输入:默认状态下,管脚上呈低电平。
c、浮空输入:默认状态下,管脚上电平状态不确定。
(2)输出功能
a、开漏输出:管脚上只能输出低电平,不能输出高电平
b、推挽输出:既能输出高电平,也能输出低电平。
(3)复用功能
a、开漏复用
b、推挽复用
(4)模拟功能:输入模拟功能
输入相当于检测,输出相当于控制!
六、点灯大法
1、粗看看硬件:看看开发板上有没有对应硬件
2、细看看电路原理图:看明白电路原理图
led本质上就是发光二极管,二极管具有单向导通性,电流只能由阳极流向阴极
led灯阴极接地,只需要控制led阳极输出高低电平就可以控制灯的亮灭
3、驱动LED灯的亮灭
3.1 通过APB2总线是能C组的时钟
3.2 pc1/2/3管脚输出高低电平
管脚初始化推挽输出
3.3 实现的接口
int main (void) {
//硬件的初始化
while (1) {
//业务逻辑
}
}
3.4 实验步骤
a) copy一份 01test的目录, 到day03下面,重命名为02led
b) 在02led的mylib中, 新建两个文件, led.c led.h
c) 打开02led的project目录下, 打开02led的项目工程, 双击mylib, 将b) 中
新建的led.c填到mylib中
d) 双击fwlib, 将固件库中的stm32f10x_gpio.c 添加到fwlib中
e) 开始写代码
f) 点击第三行菜单栏的“魔法棒”, ---》点击“debug” ---》 点击“settings” --->
只要存在“IDCODE” ---> 证明上位机已经识别到下位机了 ----》 点击“download”
---》 观察实验现象
置位 ----> 1----> 高电平
清0 ----> 0----> 低电平