day04笔记
一、c语言回顾
char arr_t [10];
arr_t是常量,类型是char [10]
typedef char arr_t[10];
arr_t b[2];
b===>二维数组 char b[2] [10];
二、GPIO类设备的驱动
led灯 beep蜂鸣器 button key 按键 remote 红外传感器
2.1 完成beep的驱动程序
a) 粗看看硬件
b) 细看看电路原理图
蜂鸣器的正极接3.3V
负极接到三极管上
将来需要在基极提供一个高电平, 蜂鸣器就响了
PC7 === 三极管的基极
需要将PC7管脚初始化为推挽输出模式
使能C组的时钟
c) 设计接口
beep_init ---> pc7
GPIO_Init
beep_on
beep_off
实验步骤:
1. copy 一份02led, 重命名为03beep
2. 在03beep的mylib中, 新建两个文件 beep.c beep.h
3. 打开03beep的项目工程, 将2中新建的beep.c 添加的项目工程的mylib中
2.2 按键设备的驱动程序
1) 粗看看硬件
三个用户按键
2) 按键的硬件电路原理图
cpu将来要检测按键的状态
按键管脚初始化为输入模式
key0
key1 按下的一瞬间, 管脚上呈现低电平, 默认状态呈现高电平
故, key0和key1管脚应该初始化为上拉输入
key2 按下的一瞬间, 管脚上呈现高电平, 默认状态呈现低电平
故, key2管脚应该初始化为下拉输入
key0 ----- PC9
key1 ----- PC8
key2 ----- PA0
3) 设计驱动程序
button_init
a) 使能GPIOA组和C组的时钟
b) 将PC9 PC8 初始化上拉输入
PA0 初始化为下拉输入
GPIO_Init
button_status
实验步骤:
1. copy一份03beep, 重命名为04button
2. 在04button的mylib中, 新建两个文件, button.c button.h
3. 打开04button的project, 双击mylib, 将2中新建的button.c 添加到项目工程中
需求:三个按键不管谁被按下, 都返回1, 没有被按下的时候, 返回0
typedef enum
{ Bit_RESET = 0,
Bit_SET
}BitAction;
cpu感知外部事件变化的三种方式:轮询 中断 DMA
1024B = 1KB
1024KB = 1MB 1MB = 0x100000 4MB = 0x400000 16M = 0x1000000 64M = 0x4000000 256M = 0x10000000
1024MB = 1GB 4GB = 0x400000000 4G-1 0xFFFFFFFFF
1024G = 1TB
1024TB = 1EB
1024EB = .......
1M 0x100000
4M 0x400000
16M 0x1000000
64M 0x4000000
256M 0x10000000
4G 0x100000000
4G-1 0xFFFFFFFF
发生段错误的原因:1、地址空间漏洞
2、地址空间没有访问权限