嵌入式概述
国内定义: 嵌入式就是以应用为中心 以计算机技术为基础 软硬可裁剪 适用于对体积 ,可靠性 ,功耗
,性能等方面有严格要求的专用计算机系统 要求嵌入式开发人员对嵌入式知识体系有清晰的认知
简单来说处理桌面PC和服务器之外 所有的控制设备都是嵌入式
GPIO
概念
GPIO指的是通用的输入输出端口,可以由用户通过软件控制 ,GPIO引脚需要和外设进行连接,就可以和外设实现通道以及采集数据等功能.
定义
指的是对芯片的某个引脚进行高低电平的输出 以及可以去检测某个引脚的状态 .
电平高于2.4V就表示高电平 低于0.4就表示低电平
引脚说明
查看英文数据手册
电源引脚 :VCC、VDD、VSS、VDDA、VSSA、VREF+等属于电源引脚
晶振引脚 :PC14、PC15、PH0、PH1就属于晶振引脚,也可以作为其他的功能使用
复位引脚 :NRST属于复位引脚
BOOT引脚 :BOOT0是专用引脚,BOOT1就属于功能引脚 (设置芯片的自举模式)
GPIO引脚 :芯片一共有144引脚,但是GPIO引脚有114个
下载引脚 :PA13、PA14、PB3、PB4等都属于下载引脚(JTAG、SWD)
引脚的功能查看英文数据手册
注意:带有FT的IO口 是带有保护二极管 ,可以容忍5V电压(芯片的标准电压为3.3V)
GPIO外设的使用
要用到外设我们需要查看原理图
GPIO外设的开发都是使用函数库来进行开发,我们以GPIOF9为例:
如图所示这是一个LED灯
我们要分析一下这个图
对于简单的外设 直接看原理图就行
- 根据函数库的接口进行开发 参考ST公司提供的函数库帮助手册(相当于man手册)
由于32基本不用写代码我们直接复制代码例程
GPIO的功能描述
GPIO寄存器开发
不管是图形界面还是函数库开发,本质都是对底层寄存器的使用,一般在实时性要求不高的情况,就使用前两种方式,但是对实时性要求比较高的情况下,就需要使用寄存器开发。所以就说明一下使用流程。
GPIO基地址
后面的模式都是查看数据手册
位操作符
~ | & ^ << >>
~ 取反 0变1 1变0
| 按位或 有1则1
1001 0110
1110 0010 -> 1111 0110
&按位与 有 0则0
1001 0110
1110 0010 -> 1000 0010
^按位异或 相同为0 不同为1
1001 0110
1110 0010 -> 0111 0100
<< 左移 高位舍去 低位补0 >>右移
时钟
HSE: High Speed External 高速外部时钟 特点精度非常高
HSL:High Speed Internal 高速内部时钟 频率16MHZ RC振荡器 特点成本低 精度低 易受温度影响
LSE: Low Speed External 低速外部时钟 频率32.768KHZ晶振 特点功耗低 精度高
LSI : Low Speed Internal 低速内部时钟 频率32KHZ振荡器 可以独立驱动看门狗 和 低功耗唤醒
PLL (PLL) 倍频锁相环 由 HSE 或 HSI 振荡器提供时钟信号, 一般可以作为系统时钟使用
51和32时钟的区别 倍频 赫兹不一样 32多了PLL
程序运行的方式
1.轮询系统
是☞指在程序中写了一个死循环 需要运行的功能按照顺序执行 轮询系统是一种简单可靠的方式,一般适用于只需要按照顺序执行的并且没有外部事件的影响
int main ()
{
while(1)
{
}
}
2.前后台系统
相比于轮询系统增加了中断的概念 如果外部事件发生 则在中断进行处理 主程序在轮询系统中运行 中断被称为前台 主程序中的while(1) 就称为后台 中断会终止后台程序的运行 然后跳转到对应的服务函数处理 处理完成后 在继续执行后台的程序
3.多任务系统
相比于前后台系统,多任务系统的外部事件也是在中断中进行响应,但是外部事件的处理是任务中进行处理。任务具有优先级,优先级高的任务先处理,所以程序就会被分割为一个个的任务,任务是一个独立的死循环,并且不能返回,可以由操作系统进行任务的调度,程序段的实时响应能力又得到提升。
外部中断
中断是指CPU来处理和响应外部异常的发生 中断就意味着打断发生
中断源分析
Cortex-M4内核一共支持256个中断,其中有16个内核中断,240个外部中断,只不过对于STM32F407系列来说,只用到了一部分,包含了10个内核中断(不可屏蔽中断,无法通过软件进行控制)、82个外部中断(可屏蔽中断,可以通过软件进行控制)。 共92个。
对于STM32而言 中断分为两类 内核异常 和外部异常 都可以查看下图
NVIC的概述
抢占优先级(主优先级):抢占优先级高的中断可以打断抢占优先级低的中断的执行。
响应优先级(次优先级):在同时发生多个中断的情况下,响应优先级高的先执行。
- 抢占优先级高的中断可以打断抢占优先级低的中断的执行
- 抢占优先级一样高的中断,响应优先级高的中断不可以打断响应优先级低的中断
- 抢占优先级一样高的中断,如果同时发生的情况下响应优先级高的先执行
- 抢占优先级和响应优先级一样高的中断同时发生,则按照向量表中的优先级执行
EXTI概述
EXTI指的是外部中断/事件控制器,一共有23个,每个都有一个内部的边沿检测器,可以检测上升沿或者下降沿,每根线都可以产生事件或者中断。
上升沿:指的是电平信号由低变高的那一刻
下降沿:指的是电平信号由高变低的那一刻
想要搞清楚EXTI的使用流程,必须要看懂EXTI的框图