STM32考试复习(完整版).ppt

上传人:小飞机 文档编号:5449602 上传时间:2023-07-08 格式:PPT 页数:58 大小:2MB
返回 下载 相关 举报
STM32考试复习(完整版).ppt_第1页
第1页 / 共58页
STM32考试复习(完整版).ppt_第2页
第2页 / 共58页
STM32考试复习(完整版).ppt_第3页
第3页 / 共58页
STM32考试复习(完整版).ppt_第4页
第4页 / 共58页
STM32考试复习(完整版).ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《STM32考试复习(完整版).ppt》由会员分享,可在线阅读,更多相关《STM32考试复习(完整版).ppt(58页珍藏版)》请在三一办公上搜索。

1、复习,嵌入式系统定义;与通用计算机系统的区别以应用为中心、以计算机技术为基础,软硬件可裁剪,从而能够适应实际应用中对功能、可靠性、成本、体积、功耗和应用环境有特殊要求的专用计算机系统。嵌入式系统的组成嵌入式处理器;外围设备;操作系统;应用软件嵌入式处理器分类微控制器;微处理器;嵌入式DSP;片上系统,绪论,GPIO,STM32的GPIO有多种工作模式:输入浮空;输入上拉;输入下拉;模拟输入;推挽输出;推挽复用;开漏输出;开漏复用。要知道每种模式具体用在什么场合。GPIO的编程(可能有大题(编程题)用某个IO引脚控制一个LED灯,使其闪烁。要求画出电路图,并编程。,STM32编写程序时要用到哪个

2、模块首先要开启那个模块的时钟void RCC_Configuration(void)SystemInit();/系统时钟配置为72MHZ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG,ENABLE);/打开GPIO时钟,STM32 GPIO例程讲解,void GPIO_Configuration(void

3、)/I/O口线配置 GPIO_InitTypeDef GPIO_InitStructure;/配置输出脚PC0控制LED灯 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOB,STM32 GPIO例程讲解,写0:GPIO_ResetBits(GPIOB,GPIO_Pin_5);写1:GPIO_SetBits(GPIOB,GPIO_Pin_5);读:GPI

4、O_ReadInputDataBit(GPIOB,GPIO_Pin_5);返回值是1(Bit_SET)或者0(Bit_RESET);,STM32 GPIO例程讲解,EXTI(外部中断),中断的定义CPU在正常执行程序的过程中,突然发生了一些需要紧急处理的事件,这些事件通过某种方式触发引起CPU暂停当前正在执行的程序,转去处理突发事件,待突发事件处理完毕后,CPU再返回继续执行刚刚被暂停的程序的过程就称之为中断。,STM32中断优先级分组,优先级越高,数值越低!抢占优先级相同的任务,响应优先级高的先响应,但不能互相抢占;抢占优先级不同的,可以抢占低优先级的CPU。,STM32外部中断的来源,ST

5、M32和I/O口有关的中断一共有16个:,GPIO的管脚GPIOx.0GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线150。这样每个中断线对应了最多7个IO口,以线0为例:它对应了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。而中断线每次只能连接到1个IO口上,这样就需要通过配置来决定对应的中断线配置到哪个GPIO上了。,void RCC_Configuration(void)SystemInit();/系统时钟配置为72MHZRCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO

6、,ENABLE);/打开AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG,ENABLE);/打开GPIO时钟,STM32外部中断例程讲解,void GPIO_Configuration(void)/输入输出管脚配置 GPIO_InitTypeDef GPIO_InitStructure;/配置输出

7、脚PC0控制LED灯 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOC,STM32外部中断例程讲解,void NVIC_Configuration(void)/嵌套向量中断控制器配置 NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/选

8、择优先级组别 NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;/选择中断通道:EXTI线0中断,因为按键连接的是PA0脚 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;/0级抢占式优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;/0级副优先级 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;/使能引脚作为中断源 NVIC_Init(/调用NVIC_Init固件库函数进行设置,STM32外部中

9、断例程讲解,void EXTI_Configuration(void)/调用固件库中的GPIO_EXTILineConfig函数,/其中两个参数分别是中断口和中断口对应的引脚号 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);EXTI_InitStructure.EXTI_Line=EXTI_Line0;/将中断映射到中断/事件源Line0 EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;/中断模式 EXTI_InitStructure.EXTI_Trigger=EXTI_Tr

10、igger_Falling/设置为下降沿中断 EXTI_InitStructure.EXTI_LineCmd=ENABLE;/中断使能,即开中断 EXTI_Init(/调用EXTI_Init固件库函数,将结构体写入EXTI相关寄存器中,STM32外部中断例程讲解,void EXTI0_IRQHandler(void)if(EXTI_GetITStatus(EXTI_Line0)!=RESET)/将LED1的状态反转 GPIO_WriteBit(GPIOC,GPIO_Pin_0,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_0);/清中断

11、 EXTI_ClearITPendingBit(EXTI_Line0);,STM32外部中断例程讲解,注意:中断服务函数都包含在“stm32f10 x_it.c”文件中,用的时候只需添加指令即可!,串行通信基础,数据通信方式:并行通信与串行通信并行通信:一次传输多位的数据 特点:速度快,适合近距离传输串行通信:数据一位一位地发送特点:硬件简单,占用I/O口资源少,适合距离远,速度要求不高的场合,波特率,单位时间内传送的信息量。以每秒传送的位为单位:电传机:10字符/秒,1个字符11位,波特率为:1011=110(波特),void RCC_Configuration(void)SystemIni

12、t();/系统时钟配置为72MHZRCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);/外设时钟配置,STM32 串口例程讲解,/*Name:UART1_GPIO_Configuration*Deion:Configures the uart1 GPIO ports.*Input:None*Output:None*Return:None*/void UART1_GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;/Configure

13、 USART1_Tx as alternate push-pull GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,STM32 串口例程讲解,/*Name:UART1_Configuration*/void USART_Configuration(void)USART_InitTypeDef USART_InitStructure;/*Configur

14、e the USART1 synchronous paramters*/USART_InitStructure.USART_BaudRate=9600;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowCo

15、ntrol_None;USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;/*Configure USART1 basic and asynchronous paramters*/USART_Init(USART1,STM32 串口例程讲解,/*Name:NVIC_Configuration*Deion:Configures NVIC and Vector Table base location.*Input:None*Output:None*Return:None*/void NVIC_Configuration(void)N

16、VIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(,STM32 串口例程讲解

17、,void USART1_IRQHandler(void)if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)/将数据回送至超级终端 USART_SendData(USART1,USART_ReceiveData(USART1);/等待数据发送完毕 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)=RESET);/等待发送完成 USART_ClearFlag(USART1,USART_FLAG_TXE);/清零发送完成标志位/等待发送完成 USART_ClearITPendingBit(USART1

18、,USART_IT_RXNE);,STM32 串口例程讲解,直接存储器存取DMA,直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速的无需CPU干预的数据传输。把数据传输的任务交给DMA执行,CPU就可以去做别的事情了,提高了CPU的工作效率。,Stm32有两个DMA控制器,其中DMA1有7个通道,DMA2有5个通道,每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。DMA的通道不是随便使用的,有一个预先的分配。,DMA通道和请求,DMA1的通道分配,DMA2的通道分配,int main(void)RCC_Configuration();/系统时钟设置 G

19、PIO_Configuration();/端口初始化 USART_Config(USART1);/串口1初始化 MYDMA_Config(DMA1_Channel4,(u32)while(1);,例程:串口1通过DMA进行数据的发送,void RCC_Configuration(void)SystemInit();/系统时钟配置为72MHZ,DMA编程例程,void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);/A口

20、时钟配置 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;/USART1 TX GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;/复用推挽输出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,/A端口,DMA编程例程,void USART1_Config(void)USART_InitTypeDef USART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);/

21、串口时钟使能 USART_InitStructure.USART_BaudRate=115200;/速率115200 USART_InitStructure.USART_WordLength=USART_WordLength_8b;/数据位8位 USART_InitStructure.USART_StopBits=USART_StopBits_1;/停止位1位USART_InitStructure.USART_Parity=USART_Parity_No;/无校验位 USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlow

22、Control_None;/无硬件流控 USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;/收发模式 USART_Init(USART1,DMA编程例程,void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)DMA_InitTypeDef DMA_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);/*Enable DMA clock*/DMA_InitStru

23、cture.DMA_PeripheralBaseAddr=cpar;/外设基地址DMA_InitStructure.DMA_MemoryBaseAddr=cmar;/内存基地址DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;/传送数据方向DMA_InitStructure.DMA_BufferSize=cndtr;/传送数据的大小DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;/外设地址不变DMA_InitStructure.DMA_MemoryInc=DMA_Memor

24、yInc_Enable;/内存地址递增DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;/外设数据宽度DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;/内存数据宽度DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;/不循环DMA_InitStructure.DMA_Priority=DMA_Priority_High;/DMA通道的优先级DMA_InitStructure.DMA_M2M=DMA_M

25、2M_Disable;DMA_Init(DMA_CHx,DMA编程例程,30,AD模数模块(Analog-to-Digital Converter),即模拟/数字转换器,主要功能是将连续变量的模拟信号转换为离散的数字信号。由于单片机只能处理数字信号,因此,在对外部的模拟信号进行分析、处理的过程中,必须使用ADC模块将外部的模拟信号转换成单片机所能处理的数字信号。,ADC模数转换模块,分辨率,A/D转换器能分辨的最小模拟电压。例如,某款A/D参考电压是5V,输出8位二进制数可以分辨的最小模拟电压为5V2820mV;而输出12位二进制数可以分辨的最小模拟电压为5V2121.22mV。,输入模拟量与

26、输出数字量之间的关系,STM32的ADC是12位逐次逼近型的模拟数字转换器。它有18个通道,可测量16个外部和2个内部信号源(温度传感器、内部参考电压)。,ADC模数转换模块,ADC编程步骤,1、开启PA口时钟和ADC1时钟,2、复位ADC1,同时设置ADC1分频因子,ADC时钟复位的方法是:ADC_DeInit(ADC1);,分频因子要确保ADC1的时钟(ADCCLK)不要超过14Mhz。这个我们设置分频因子位6,时钟为72/6=12MHz,库函数的实现方法是:,RCC_ADCCLKConfig(RCC_PCLK2_Div6);,3、初始化GPIO和ADC1参数,GPIO_InitStruc

27、ture.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;/模拟输入GPIO_Init(GPIOA,/初始化GPIOA.1,ADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;/ADC工作模式:独立模式ADC_InitStructure.ADC_ScanConvMode=DISABLE;/AD单通道模式ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;/AD单

28、次转换模式ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;/转换由软件而不是外部触发启动ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;/ADC数据右对齐ADC_InitStructure.ADC_NbrOfChannel=1;/顺序进行规则转换的ADC通道的数目1ADC_Init(ADC1,/根据指定的参数初始化外设ADCx,4、使能ADC并校准,使能ADC的方法:ADC_Cmd(ADC1,ENABLE);/使能指定的ADC1校准包括复位校准和AD校准执行

29、复位校准的方法是:ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1);/等待复位校准结束执行ADC校准的方法是:ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1);/等待AD校准结束,5、设置规则组的通道,启动A/D,读取A/D结果,我们这里是规则序列中的第1个转换,同时采样周期为239.5,所以设置为:ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);软件开启

30、ADC转换的方法:ADC_SoftwareStartConvCmd(ADC1,ENABLE);/使能指定的ADC1的软件转换启动功能开启转换之后,就可以获取转换ADC转换结果数据,方法是:ADC_GetConversionValue(ADC1);,DAC数模转换模块,/*名 称:void RCC_Configuration(void)*功 能:时钟配置*入口参数:无*出口参数:无*说 明:*调用方法:无*/void RCC_Configuration(void)SystemInit();/系统时钟配置,void DAC_Init(void)GPIO_InitTypeDef GPIO_InitS

31、tructure;DAC_InitTypeDef DAC_InitType;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);/外设时钟使能/*GPIO的配置*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;GPIO_Init(GPIOA,void DAC1_Set_Vol(u16 vol)float temp;temp=vo

32、l;temp/=1000;temp=temp*4095/3.3;DAC_SetChannel1Data(DAC_Align_12b_R,(u16)temp);int main(void)RCC_Configuration();/系统时钟配置 DAC_Init();DAC1_Set_Vol(2000);while(1);,计数器模式 TIM2-TIM5可以由向上计数、向下计数、中央对齐模式。,STM32定时器简介,向上计数模式:计数器从0计数到设定的数值,然后重新从0开始计数并且产生一个计数器溢出事件,这个事件也称为更新事件。向下计数模式:计数器从设定的数值开始向下计数到0,然后自动从设定的数值

33、重新向下计数,并产生一个向下溢出事件,这个事件也称为更新事件。中央对齐模式(向上/向下计数):计数器从0开始计数到设定的数值,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;再从0开始重新计数。,STM32定时器简介,(1)RCC配置;void RCC_Configuration(void)SystemInit();/系统时钟配置为72MHZ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);/定时器3 时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE);/外设

34、时钟使能,STM32 定时器例程讲解,(2)I/O口线配置void GPIO_Config(void)GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;/选择第11个引脚 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;/配置为推挽输出模式 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/口线翻转速度最高为50MHz GPIO_Init(GPIOG,STM32 定时器例程讲解,(3)定时器初始化void

35、 TIM3_Init(u16 arr,u16 psc)TIM_TimeBaseInitTypeDef TIM3_TimeBaseStructure;TIM3_TimeBaseStructure.TIM_Period=arr;/设置自动重装载寄存器的值(设置定时时间)TIM3_TimeBaseStructure.TIM_Prescaler=psc;/设置预分频器的分频值 TIM3_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;/计数器向上计数模式 TIM3_TimeBaseStructure.TIM_ClockDivision=0 x0

36、;/设置时钟分割 TIM_TimeBaseInit(TIM3,/启动定时器3,STM32 定时器例程讲解,(4)NVIC初始化void NVIC_Configuration(void)NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);/中断优先级分组(0组)NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;/选择定时器3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;/设置

37、抢占优先级的大小 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;/设置从优先级的大小 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;/中断使能 NVIC_Init(,STM32 定时器例程讲解,(5)定时器中断void TIM3_IRQHandler(void)static u8 flag=0;if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)/检查TIM3更新中断是否发生 if(flag)GPIO_ResetBits(GPIOG,GPIO_Pin_11);f

38、lag=0;else GPIO_SetBits(GPIOG,GPIO_Pin_11);flag=1;TIM_ClearITPendingBit(TIM3,TIM_IT_Update);/清除TIM3更新中断标志,STM32 定时器例程讲解,PWM,PWM(脉宽调制):只对一个方波序列信号的占空比按要求进行调制,而不改变信号的幅度和周期。,占空比为10%的PWM输出0.9V的模拟信号,供电电压为9V,占空比为50%的PWM输出4.5V的模拟信号,占空比为70%的PWM输出6.3V的模拟信号,调制频率为周期的倒数。要想取得调光灯(保持点亮)的效果,必须提高调制频率。,PWM的生成过程,在STM32

39、中,每一个通道都有一个捕获/比较寄存器CCRx,生成PWM时将计数器的值与捕获/比较寄存器中的值进行比较。计数器从0开始向上计数,起始时,通道输出一个固定的电平(高电平或低电平),当计数到与捕获/比较寄存器中的值相等时,电平翻转;当计数到与自动重载寄存器中的值相等时,电平再次翻转,计数器从0开始重新计数。,RTC工作原理:概述,RTC(Real Time Clock),即实时时钟,它的主要作用是为系统提供当前的时间和日期。,I2C串行总线概述,I2C总线是PHLIPS公司推出的一种简单、双向二线制同步串行总线。,I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。,I2C串

40、行总线设备,总线的寻址,I2C总线的寻址,地址信号:为从机地址,占7位,如下表所示,称之为“寻址字节”,各字段含义如下:,器件地址(DA3-DA0):是IIC总线接口器件固有的地址编码,由器件生产厂家给定。如IIC总线EEPROM AT24C的器件地址为1010等。引脚地址(A2、A1、A0):由IIC总线接口器件的地址引脚A2、A1、A0的高低来确定,接电源者为1,接地者为0。读写控制位(R/W):1表示主设备读,0表示主设备写。7位地址和读写控制位组成1个字节。,起始和终止信号,SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。,起始、终止信号,串行E2PROM的扩展,串行E2PROM典型产品,AT24C01:128字节(1288位)AT24C02:256字节(2568位)AT24C04:512字节(5128位)AT24C08:1K字节(1K8位)AT24C16:2K字节(2K8位),ATMEL公司的AT24C系列:,使用SPI通信需要4个引脚,分别为:,作SPI主机时,SSEL要接上拉电阻,SPI,看门狗,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号