基本概念
上拉电阻是用来解决总线驱动能力不足时提供电流的。一般说法是上拉增大电流,下拉电阻是用来吸收电流。
复位就是恢复到初始化的状态。
使能:able,使能够 失能:enable,使它不能
IRQ:中断请求,简单理解,当电脑读取光盘资料时,当读取完毕后,硬盘就通知系统相应数据已经读取到内存中,来请求中断。
缺省值:缺省值就是默认值。是指一个属性、参数在被修改前的初始值。计算机软件系统要求用户输入某些值而用户未给定时,系统自动赋予的事先设定的数值
上升沿:数字电路中,从低电平0变为高电平1的那一瞬间
下降沿同理。
1、“stm32f10x_conf.h”中定义如下:
#define _GPIO
#define _GPIOA
#define _GPIOB
#define _GPIOC
#define _GPIOD
要用哪一个,就先定义所用管脚。
GPIO:通用端口输入输出的意思
一、GPIO_INIT
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;选中管脚,见原理图上面的ABCDEFG,要用哪一个模块,就看模块和核心板的哪一个接口相连,这里选择的也就是那个接口
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
选择传输速度,有10.20.50选择
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
选择输入输出方式,有四种输入和四种输出方式
GPIO_Init(GPIOA, &GPIO_InitStructure),指针是指只想structure,给它设定初始化的值
二、1、GPIO_ReadInputData,读取指定GPIO端口输入值
u8 ReadValue;定义ReadValue
ReadValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7);,在原理图上面找到对应端口
2、GPIO_ReadOutputData读取指定GPIO端口输出值
u16 ReadValue;
ReadValue = GPIO_ReadOutputData(GPIOC)
三、GPIO_setbits:控制输出高电平
GPIO_resetbits:控制输出低电平
GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15),一次可以对多个IO口进行设置
GPIO_writebits:一次对一个IO口进行写操作,可以置1或者0,例:
GPIO_writebit(GPIOA, GPIO_Pin_10 ,0)
GPIO_write:向指定端口写入数据,
GPIO_Write(GPIOA, 0x1101);(0x1101是一个16进制数,转化为2进制数后可以看出效果。)
GPIO_PinLockConfig(GPIOA, GPIO_Pin_0 | GPIO_Pin_1)锁定
A外设的第零个端口,在下次系统复位之前不能更改端口位的设置
四、定时器相关知识
例:普通定时器模块为72MHz,分频系数(分配比)为7199,
要得到一个一秒钟的定时。
F=72MHZ/(7299+1)=10KHZ,
T=1/F,
要得到一秒钟,需要设定10000。
1、通用定时器
通过向上、向下或者向上向下双向计数,到达一定范围就溢出来产生中断,从而达到定时的效果。
向上计数模式:从0开始计数到预先设定的一个值
向下计数模式:从预先设定的一个值向下计数直到0
中央对齐模式:从0开始计数到设定的值减一,再从这个值向下计数直到0。
发生下列事件时中断:
寄存器计数的时候有一个范围,如果超出这个范围,寄存器就会溢出,定时器就会中断
计数器启动、停止、初始化等
2、中断
是指cpu执行当前程序时,由于紧急情况,暂时中止当前程序而跳转到其他程序的执行。
有可能在同一时间,同时发生多个中断请求,,这时就要根据优先级来决定谁先中断,谁后中断。具有高抢占式优先级的中断可以在低抢占式优先级中断处理过程中被响应
定时器中断:
外设向CPU发出申请——CPU如果同意——执行中断
服务程序
介绍简单的系统滴答定时器——systick
为系统提供一个精准时基,为硬件电路提供一个中断操作,它是一个24位的定时器,一次最多能够计数2的24次方个脉冲,每接收一个脉冲,从保存的那个数值开始减一,当减为0时,就产生中断,
五、#define _NVIC,用到NVIC寄存器时先定义
1、函数 NVIC_DeInit
将外设NVIC寄存器重设为缺省值,就是为了让缺省值在中间重新初始化
NVIC_DeInit();
2、NVIC_SCBDeInit
将外设SCB寄存器重设为缺省值
NVIC_SCBDeInit();
3、函数 NVIC_PriorityGroupConfig
设置优先级分组:先占优先级和从优先级,在中断的时侯就是根据优先级处理的。
先占优先级:比如在执行一个优先级为10的中断,来了一个优先级为5的中断,那么就会停止执行10的中断,转而执行5的中断,
从优先级:来了两个中断需要同时执行,先执行优先级高的中断,如果已经开始执行一个中断,即使来了一个优先级更高的中断,也不会转而执行那个中断
NVIC_PriorityGroup_0 先占优先级0位、从优先级4位
1 1 3
2 2 2
3 3 1
4 4 0
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
先占优先级为0位,它的优先级就只有0.从优先级为4位,它的优先级就分为0~2^4一共16种情况
4、函数 NVIC_Init
根据指定的参数初始化外设NVIC寄存器
5、NVIC_IRQChannel
用以使能或者失能相应的IRQ,NVIC可以改为其它参数,来指代什么中断
6、函数 NVIC_StructInit
用以把NVIC_Structlnit的参数按照缺省值输入
7、函数 NVIC_SETPRIMASK
使能 PRIMASK 优先级:提升执行优先级至 0
8、 函数 NVIC_RESETPRIMASK
失能 PRIMASK 优先级
9、函数 NVIC_SETFAULTMASK
使能FAULTMASK,提升执行优先级至-1
六、1、AFIO_EVCR
时间控制寄存器,总共有32位,
31:8位----保留,
位7,EVOE:允许事件输出(event output enable),只有设置了该位后,才会连接端口选择和引脚选择位
位6:4,端口选择,ABCDE,分别对应000 001 010 011 100
位3:0,引脚选择,0--15,分别对应0000 0001 0010 0011
0100 0101 0110 0111 1000 1001 1010 1011 1100
1101 1110 1111
等等
七、具体编写程序时相关文件夹的作用。
user文件夹:存放用户应用程序和中断文件,如main.c。
cmsis:存放内核和系统相关代码,系统配置代码
Fwlib:存放stm32标准外设的驱动代码
Startup文件夹:cortex—内核相关启动代码