完整word版,stm32知识点最终版,推荐文档

完整word版,stm32知识点最终版,推荐文档
完整word版,stm32知识点最终版,推荐文档

1.*嵌入式系统:以计算机技术为基础,以应用为中心,软件硬件可剪裁,适合应用系统对功能可靠性、成本、体积、功耗严格要求的专业计算机系统。

2.*嵌入式系统与传统系统等所区分的三个特征:微处理器通常由32位以上的RISC组成;软件通常是以嵌入式操作系统为核心,外加用户应用程序;具有明显的可嵌入性。

3.*嵌入式系统的应用:智能消费电子中;工业控制中;医疗设备中;信息家电及家庭智能管理系统;网络与通信系统中;环境工程;机器人。

4.*ARM定义的三大分工明确的系列:“A”系列面向尖端的基于虚拟内存的操作系统和用户应用(针对日益增长的运行包括linux、Windows、CE和Android在内的消费电子和无线产品);“R”系列针对实时系统(针对需要运行实时操作系统来惊醒控制应用的系统,包括汽车电子、网络和影像系统);“M”系列对胃控制器和点成本应用提供优化(针对开发费用低功耗低,同时针对性能要求不断增加的嵌入式应用而设计,如汽车车身控制系统和各种大型家电)。

5.ARM Cortex处理器系列是基于ARMv7构架的产品,既有ARM Cortex-M系列,也有高性能的A系列。

6.NEON技术是64/128位SIMD指令集,用于新一代媒体和信号处理应用加速。NEON支持8位,16位,32位,64位整数及单精度浮点SIMD操作,以进行音频,视频、图像和游戏的处理。

7.ARM Cortex-M3处理器的特点:性能丰富成本低,低功耗,可配置性能强,丰富的链接。

8.*STM32F10x处理器分为:101,102,103,105,107。

9.*STM32的总线速度:USB接口速度12Mb/s;USART接口速度4.5Mb/s;SPI接口速度可达18Mb/s;IC接口速度400kHz。

10.STM32系列处理器的优点:先进的内部结构;三种功耗控制;最大程度集成整合;出众及创新的外设。

11.STM32F10x按性能分为:基本型STM32F101,USB基本型STM32F102,增强型STM32F103,互联网型STM32F105、STM32F107系列。

12.STM32F103RBT6系列的命名规则:R-引脚数量、B-Flash大小、T-封装、6-工作温度。

13.*STM32F103按照引脚功能分为:电源、复位、时钟控制、启动配置、输入输出口。

14.STM32F103总线系统包括:驱动单元、被动单元、总线矩阵。

15.最小系统是指仅包含必须的元器件、仅可运行最基本软件的基本系统。

16.典型的最小系统包括:微控制器芯片、供电电路、时钟电路、复位电路、启动配置电路和程序下载电路。

第三章

1.STM32标准库命名则:PPP_Init:根据PPP_InitTypeDef中指定的参数初始化外设ppp;

PPP_DeInit:将外设PPP寄存器重设为缺省值;

PPP_StructInit:将PPP_InitTypeDef结构中的参数设为缺省值;

PPP_Cmd:使能或失能PPP外设;

PPP_ItConfig:使能或失能PPP外设的中断源;

PPP_GetITStatus:判断PPP外设中断发生与否;

PPP_ClearITPendingBit:清除PPP外设中断待处理标志位;

PPP_DMAConfig:使能或者失能PPP外设的DMA接口;

PPP_GetFlagStatus:检查PPP外设的标志位;

PPP_ClearFiag:清除PPP外设的标志位。

2.文件结构:每个C程序通常分为两个文件,一个文件用于保存程序的声明,成为头文件,以.h为后缀。另一个用于保存程序的实现,称为源文件,以.c后缀。

3.C语言的关键字有32个,根据作用分为数据类型、控语言、储存类型、其他关键字。

4.指针:是C语言中广泛使用的一种数据类型.

5.指向数组元素的指针

定义一个整形数组和一个指向整型的指针变量:

Int a [10];

Int*p=NULL;//定义指针式要初始化

P=a;//数组名a为数组第0个元素的地址

//与p=&a[0]等价

P+i和a+i表示a[i]的地址;*(p+i)和*(a+i)表示P+i和a+i内容。

6.结构体:是由基本数据类型构成的,并并一个标识符来命名的各种变量的组合。

7.

定义结构体的格式一般为:

Struct结构名

{

类型变量名;

...

}结构变量;

如果去掉结构变量,就成为对结构的说明。

8.CMSIS是独立于供应商处理器硬件抽象层。

9.CMSIS软件架构:用户应用层,操作系统及中间件接口层,CMSIS层和硬件层。

10.CMSIS层主要由:核内外设访问层CPAL;中层件访问层MWAL;设备外设访问层DPAL。

11.STN32F10x标准外设库是一个固件函数包。由程序、数据结构、宏组成。

12.Libraries文件夹下是标准库的源代码及启动文件。

13.Startup_stm32f10x_X.s是用汇编写的系统启动文件,X表示不同芯片型号。

14.初始化时钟:执行main()函数前调用SystemInit()函数初始化系统时钟。

15.Project文件夹下是采用标准库写的一个工程模版和例子。(图3-4)

16.Const的作用:声明只读变量。Typedef:给数据类型取别名。Volatile:说明变量在程序执行中。

第四章

1.IO端口的多种模式:输入浮空(什么都不接)、输入上拉(接上拉电阻,输入高电平)、输入下拉、模拟输入(ADC)、开漏输入(本身不输出电压,接上拉电阻)、推挽式输出(直接输出高低电平)、推挽式复用功能、开漏复用功能。

2.GPIO常用库函数:GPIO-init(根据GPIO-Initstruct指定的参数初始化外设GPIOx寄存器)、

GPIO_ReadInputDataBit(读取指定端口管脚的输入)、GPIO_ReadInputData(读取指定的GPIO端口输入)、GPIO_ReadOutputDataBit、GPIO_ReadOutputdata、GPIO_SetBits(设定指定的数据端口位)、GPIO_ResetBits(清除指定的数据端口位)、GPIO_WriteBits(设置或清除指定的数据端口位)、GPIO_Write(向指定GPIO端口写入数据)、GPIO_EXTILineConfig(选择GPIO管脚用作外部中断线路)3.*gpio使用流程:声明GPIO初始化结构体GPIO_InitTypeDef-->使能GPIO端口时钟RCC_APB2PeriphClockCmd--> 填充GPIO初始化结构体参数GPIO_Pin、GPIO_Speed、GPIO_Mode--> 完成GPIO端口设置GPIO_Init。

4.闪烁灯程序流程图:GPIO配置GPIO_Config --> 输出低电平,点亮LED,GPIO_ResetBits--> 延时delay--> 输出高电平,熄灭LED,GPIO_SetBits

第5章.STM32单片机外部中断

一、中断的相关概念

1.中断:单片机执行主程序时,由于某个事件的原因,暂停主程序的执行,调用相应的程序处理该事件,处理完毕后再自动继续执行主程序的过程。

2. 中断的优先级:由中断的嵌套可以看出,不同事件的重要程度不同。重要的事件可以打断相对不重要的事件的处理,用户可以根据自己的需求对不同的事件设定重要级别

3. 中断的嵌套:如果在执行一个中断时又被另一个更重要的事件打断,暂停该中断处理过程转去处理这个更重要的事件,处理完毕后再继续处理本中断的过。低优先级的中断服务可被高优先级中断源中断,反之不能;任何一种中断,一旦响应不会被同级中断源的请求所打断

4. 中断源:可以引起中断的事件称为中断源

5. 中断服务程序与中断向量:为了处理中断而编写的程序称为中断服务程序,对应中断服务程序的入口地址被称为中断向量

6. 中断请求、中断响应、中断处理及中断返回:中断源对主程序或中断服务程序提出中断要求,叫作中断请求;主程序或中断服务程序接受中断请求,进入中断服务程序的过程叫作中断响应;执行中断服务程序的过程叫作中断处理;中断服务程序执行完毕后回到主程序或者次一级别中断服务程序的过程叫作中断返回

7. 中断系统:实现中断处理功能的软件、硬件系统称为中断系统

二、中断控制器

1.STM32F103的中断系统由嵌套中断向量控制器NVIC,外部中断/事件控制器EXTI,各外设中断控制部份

2.配置软硬件中断/事件请求过程:硬件中断选择;硬件事件选择;软件中断/事件选择;外部中断/事件线路映射。图5-4(85页)

三、中断执行过程和中断嵌套:优先级:抢占优先级高的先处理,抢占优先级相同,则响应优先级高的先执行。

四、外部应用中断设计:

(1)NVIC_PriorityGroupConfig(设置优先级分组,抢占优先级和响应优先级)例:NVIC_PriorityGroupConfig (NVIC_PriorityGroup_1)设置优先级分组为第一组

(2)NVIC_Init(根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器)

五、EXTI函数库:EXTI_Init(将外设EXTI寄存器重设为缺省值)、EXTI_GetFlagStatus(检查指定的EXTI线路标志位设置与否)、EXTI_ClearFlag(清除EXTI线路挂起标志位)、EXTI_GetITStatus(检查指定的EXTI线路触发请求发生与否)、EXTI_ClearITPendingBits(清除EXTI线路挂起位)。

六、STM32中断的设计

(1)NVIC设置流程:声明NVIC结构体NVIC_InitTypeDef S 选择中断分组NVIC_PriorityGroupConfig()—》选择中断通道S.NVIC_IRQChannel—》设置优先抢占级S.NVIC_IRQChannelPreemptionPriority—》设置响应优先级S.NVIC_IRQChannelSubPriority中断使能S.NVIC_IRQChannelCmd —》调用函数完成配置NVIC_Init()

(2)GPIO外部中断端口配置流程图:声明GPIO和EXTI结构体GPIO_InitTypeDef G EXTI_InitTypeDef E-->GPIO设置-->选择中断管脚GPIO_EXTILineConfig()--> 选择中断线路E.EXTI_Line--> 设置中断请求E.EXTI_Mode --> 设置中断触发方式E.EXTI_trigger --> 中断线路使能E.EXTI_LineCmd --> 完成设置EXTI_Init

(3)中断服务程序处理流程图:进入中断--> 检测中断线请求EXTI_GetITStatus

中断处理内容Func()--> 清除中断信号挂起位EXTI_GetITStatus()--> 中断返回

(4)按键中断控制LED程序流程图:开始--> LED初始化配置LED_Config--> 按键初始化配置KEY_Config--> 输出低电平,点亮LEDGPIO_ResetBits--> 死循环等待按键中断while(1)

进入中断--> 检测中断线请求EXTI_GetITStatus--> LED状态取反GPIO_WriteBits 清除中段线路挂起位EXTI_GetITStatus --> 跳出中断

(5)中断服务程序主要完成什么工作:中段线路状态检测、中断处理内容、中断清除

(6)Stm32最多支持84个中断16个优先级

(7)32中断设计包括NVIC设计、中断端口设置、终端服务程序

第6章.STM32通用定时器

1.STM定时器分类:2个高级控制定时器TIM1 TIM8可分配6个通道的三相PWM发生器(多用于电机控制);4个通用定时器TIM2 TIM3 TIM4 TIM5每个定时器有4个输入捕获/输出比较/PWM/脉冲计数;2个基本定时器TIM6 TIM7 主要用于产生DAC触发信号;还有两个看门狗定时器(窗口和独立)和一个系统滴答定时器。

2.通用定时器的基本功能是定时和计数

3.时钟的选择:内部时钟源(CK_INT)当TIMx_SMCR寄存器的SMS=0;外部时钟源模式1(外部输入引脚TIx)SMS=111;外部时钟源模式2(外部触发输入ETR) ECE=1;内部触发输入(ITR)

4.时基单元:设置定时器/计数器计数时钟的基本单元。包含技术寄存器(TIMx_CNT);预分频器寄存器(TIMx_PSC);自动装载寄存器(TIMx_ARR)

5.计数模式:向上计数模式(TIM_CR1中的CMS=00,DIR=1);向下计数模式(CMS=00,DIR=0);中央对齐模式(CMS=01、11、10)

6.通用定时器使用流程:NVIC设置;定时器中断配置;中断服务程序

7.led亮1秒灭1秒程序流程图:开始—LED初始化配置(LED_Config---NVIC)初始化配置(TIM3_NVIC_Config)----定时器初始化配置(TIM3 _ Config)---输出低电平,点亮LED(GPIO_ResetBits)--- 输出高电平,点亮LED(GPIO_SetBits)---死循环等待中断

进入中断---检测定时中断请求(TIM_GetITStatus())-是—否则中断返回--中断处理内容,改变LED状态—清楚定时中断标志(TIM_ClearITPendingBit)---中断返回

8. 10通用定时器常用库函数

TIM_Cmd使能或失能TIMx外设

TIM_ITConfig使能或者失能指定的TIM中断

TIM_GetTStatus检查指定的TIM中断发生与否

11TIM中断配置

void TIM3_config

TIM_TimeBaseInitTypeDef TIM_TIM_BaseStructure;//声明定时器时基结构体

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//开启定时器TIM1时钟

TIM_TimeBaseStructure.TIM_Prescaler=(799-1);//设置预分频值

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CoundterMode_Up;//设置技术模式为向上

TIM_TimeBaseStructure.TIM_Period=1000;//设置计数值

TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct);//完成时基设置

TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_Trigger,ENABLE);//失能或者失能指定的TIM中断

TIM_Cmd(TIM3,ENABLE);}

TIM_Period*(TIM_Prescaler+1)/系统时钟=中断时间

9. 主要功能介绍:外部事件计数,输入捕获,输出比较,单脉冲输出,正交编码器,霍尔传感器输入,输出比较信号死区产生,刹车信号输入功能

第七章

1.串行通信:是数据字节的各位一位一位的一次传送的通信方式。速度慢占用传输线条数少,适于远距离传输。

2.并行通信:数据字节各位同时传送的通信方式。速度快,占用传输线条数多,适用于近距离通信。

3.串行通信方式:单工通信,半双工通信,全双工通信。

4.波特率:即数据的传输速度,串行通信中,每秒传送的二进制数的位数称为波特率。波特率的倒数是每一位数的传输时间。

5.STM32的USART的结构特性:stm32由3-5个的全工的一步串行通信USART接口,可实现设备之间的串行数据传输。USART外部引脚包括接收数据输入(RX)、发送数据输出(TX)、清除发送(nCTS)、发送请求(nRTS)和发送器时钟输出(CK),通过这些引脚可以与其他外部设备通信。

6. USART的基本配置流程:声明GPIO和USART初始化结构体(GPIO_InitTypeDef G USART_InitTypeDef U)-->开启串口、串口所用IO时钟(RCC_APB2PeriphClockCmd())-->设置IO引脚功能为复用推挽输出和浮空输出和浮空输入-->设置波特率(https://www.360docs.net/doc/be2551062.html,ART_BandRate)-->设置数据格式:数据位、停止位、校验位(https://www.360docs.net/doc/be2551062.html,ART_WordLength https://www.360docs.net/doc/be2551062.html,ART_StopBits https://www.360docs.net/doc/be2551062.html,ART_Parity)-->设置串口模式(https://www.360docs.net/doc/be2551062.html,ART_Mode)-->完成串口设置(USART_Init())-->使能串口(USART_Cmd())。

7.串行通信接口抗干扰的方式:采用标准串行接口(RS-232C),TTL电平通信接口,RS-485双机通信接口。

第八章

1.DMA:用来提供外设与外设之间、外设与寄存器之间、存储器与存储器之间的高速数据传输,无需CPU干预,数据可以通过DMA 快速传输,节省CPU的资源

2.DMA使用流程:NVIC设置,DMA模式及中断配置,中断服务。

3.DMA的传输过程包括:DMA请求,DMA响应,DMA传输,DMA结束

4.总线矩阵有两个主要特征:循环优先调度,多层结构和总线挪用。

第九章模数转化器ADC

ADC性能指标:分辨率、量化误差、偏移误差、满刻度误差、线性度、绝对精度、相对精度、转换速率。

按转换过程不同:ADC可以分为:逐次逼近性、双积分型、电压--频率变换型。

第十一章SPI

1.SPI接口定义:他只需要4条线:串行时钟线(SCK),主机输入/从设备输出引脚(MIOS),主机输出/从设备输入引脚(MOSI),低电平有效的从基选择线。

2.SPI是一个环形总线结构,由NSS,SCK,MISO,MOSI,构成,

3.*结构体类型自定义:

typedef struct

{

Long num;

Char name[10];

Char sex;

}STUDENT ;//定义结构体类型为STUDENT

Int main()

{

STUDENT stu1 stu[0];//定义STUDENGT类型的变量stu1和数组stu }

4.*条件编译示例

#include

#define DEBUG //此时#ifdef DEBUG为真

//#define DEBUG 0 //此时为假

Int main()

{

#ifdef DEBUG

Printf(“Debugging/n”);

#esle

Printf (“Not Debugging/n);

#endif

Printf(“Running/n”)

System(“pause”)

Return0

}

5.elif示例

#include

#define TWO

int main()

{

#ifdef ONE

Printf(“1/n”)

#elif defined TWO

Printf(“2/n”)

#else

Printf(“3/n”)

#endif

System(“pause”)

Return 0

}

程序:

void GPIO_Config(void)//GPIO配置

{

GPIO_InitTypeDef GPIO_InitStructure;//声明GPIO初始化结构体

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//使能PD口时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//配置端口PD2

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//输出速率50MHZ

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出

GPIO_Init(GPIOD, &GPIO_InitStructure);//调用函数使PD口初始化

}

(AIN模拟输入,IN_FLOATING浮空输入,IPD下拉输入,IPU上拉输入,Out_OD开漏输出,Out_PP推挽输出,AF_OD 复用开漏输出,AF_PP 复用推挽输出)

void key_Config(void)//按键中断配置(还要有NVIC配置)

{

GPIO_InitTypeDef GPIO_InitStructure;//声明GPIO初始化结构体

EXTI_InitTypeDef EXTI_InitStructure;//结构体

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//使能PA口时钟,并使能复用时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//配置端口PA15

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入

GPIO_Init(GPIOA, &GPIO_InitStructure);//调用函数使PA口初始化

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource15);//选择中断管脚

EXTI_InitStructure.EXTI_Line = EXTI_Line15;//中断线路

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断请求

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发(Rising上升)

EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断线使能

EXTI_Init(&EXTI_InitStructure);// 调用函数完成设置

}

void NVIC_Config(void)//NVIC配置

{

NVIC_InitTypeDef NVIC_InitStructure;//声明结构体

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//选择中断分组

NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;//选择中断通道(EXTI9_5_IRQn,EXTI0_IRQn—EXTI4_IRQn,TIM3_ IRQn)NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//设置抢占优先级

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//设置相响应优先级

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//中断使能

NVIC_Init(&NVIC_InitStructure);// 调用函数完成中断设置

}

void EXTI15_10_IRQHandler(void)//中断程序

{

if(EXTI_GetITStatus(EXTI_Line15)!=RESET)//判断是否中断

{ //加上中断后的程序

EXTI_ClearITPendingBit(EXTI_Line15);//清除中断标志位

}

}

void USART_Config(void)//串口通信配置

{GPIO_InitTypeDef GPIO_InitStructure;//声明结构体

USART_InitTypeDef USART_InitStructure;//声明结构体

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);//使能PA ,USART1口时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//配置端口PA9

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//输出速率50MHZ

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//推挽输出

GPIO_Init(GPIOA, &GPIO_InitStructure);//调用函数使PA口初始化

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//配置端口PA10

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//输出速率50MHZ

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入

GPIO_Init(GPIOA, &GPIO_InitStructure);//调用函数使PA口初始化

USART_https://www.360docs.net/doc/be2551062.html,ART_BaudRate = 9600; //设置串口通信波特率

USART_https://www.360docs.net/doc/be2551062.html,ART_WordLength = USART_WordLength_8b;//字长8位

USART_https://www.360docs.net/doc/be2551062.html,ART_StopBits = USART_StopBits_1;//一个停止位

USART_https://www.360docs.net/doc/be2551062.html,ART_Parity = USART_Parity_No;//无奇偶风险位

USART_https://www.360docs.net/doc/be2551062.html,ART_HardwareFlowControl =USART_HardwareFlowControl_None; //无硬件数据流控制

USART_https://www.360docs.net/doc/be2551062.html,ART_Mode = USART_Mode_Rx |USART_Mode_Tx;//接收|发送模式

USART_Init(USART1, &USART_InitStructure);//初始化串口

USART_Cmd(USART1, ENABLE); //使能串口

}

if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET)//判断接收寄存器非空

{

i= USART_ReceiveData(USART1);//接收数据

}

USART_SendData(USART1,i);//发送数据

while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待数据发送完成

void TIM3_Config(void)//定时器配置(加上NVIC配置)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//声明TIM结构体

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//开启定时器TIM3时钟

TIM_TimeBaseStructure.TIM_Prescaler = 7200;//分频值

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//设置计数器为向上计数

TIM_TimeBaseStructure.TIM_Period = 10000;//设置计数值

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);//完成时基设置

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//使能中断类型(更新中断TIM_IT_Update,触发中断TIM_IT_Trigger)

TIM_Cmd(TIM3,ENABLE);//使能TIM3

}

void TIM3_IRQHandler(void)//中断程序

{

if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)// 判断是否中断

{

TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除中断标志位

GPIO_WriteBit(GPIOD,GPIO_Pin_2,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2))));//led管脚取反};

}

相关主题
相关文档
最新文档