STM32考试复习(完整版)参考课件.ppt_第1页
STM32考试复习(完整版)参考课件.ppt_第2页
STM32考试复习(完整版)参考课件.ppt_第3页
STM32考试复习(完整版)参考课件.ppt_第4页
STM32考试复习(完整版)参考课件.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、一个LED灯,使其闪烁。要求画出电路图,并编程。,3,Company Logo,STM32编写程序时要用到哪个模块首先要开启那个模块的时钟 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

3、_GPIOG , ENABLE); /打开GPIO时钟 ,STM32 GPIO例程讲解,4,Company Logo,void GPIO_Configuration(void)/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

4、(GPIOB, ,STM32 GPIO例程讲解,5,Company Logo,写0: GPIO_ResetBits (GPIOB, GPIO_Pin_5); 写1: GPIO_SetBits(GPIOB, GPIO_Pin_5); 读: GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5); 返回值是1(Bit_SET)或者0(Bit_RESET);,STM32 GPIO例程讲解,6,Company Logo,EXTI(外部中断),中断的定义CPU在正常执行程序的过程中,突然发生了一些需要紧急处理的事件,这些事件通过某种方式触发引起CPU暂停当前正在执行的程序,转去

5、处理突发事件,待突发事件处理完毕后,CPU再返回继续执行刚刚被暂停的程序的过程就称之为中断。,7,Company Logo,STM32中断优先级分组,优先级越高,数值越低! 抢占优先级相同的任务,响应优先级高的先响应,但不能互相抢占;抢占优先级不同的,可以抢占低优先级的CPU。,8,Company Logo,STM32外部中断的来源,STM32和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

6、、GPIOE.0、GPIOF.0、GPIOG.0。而中断线每次只能连接到1个IO口上,这样就需要通过配置来决定对应的中断线配置到哪个GPIO上了。,9,Company Logo,void RCC_Configuration(void) SystemInit(); /系统时钟配置为72MHZ RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); /打开AFIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |

7、 RCC_APB2Periph_GPIOD| RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG , ENABLE); /打开GPIO时钟 ,STM32外部中断例程讲解,10,Company Logo,void GPIO_Configuration(void)/输入输出管脚配置 GPIO_InitTypeDef GPIO_InitStructure; /配置输出脚PC0控制LED灯 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_

8、Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, ,STM32外部中断例程讲解,11,Company Logo,void NVIC_Configuration(void) /嵌套向量中断控制器配置 NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /选择优先级组别 NVIC_InitStructure.NVIC_IRQChannel = EXT

9、I0_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外部中断例程讲解,12,Company Logo,void EXTI_C

10、onfiguration(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_Trigger

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

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

13、秒,1个字符11位, 波特率为:1011=110(波特),16,Company Logo,void RCC_Configuration(void) SystemInit(); /系统时钟配置为72MHZ RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 |RCC_APB2Periph_GPIOA,ENABLE); /外设时钟配置 ,STM32 串口例程讲解,17,Company Logo,/* * Name : UART1_GPIO_Configuration * Deion : Configures the uart1 GPIO ports. * I

14、nput : None * Output : None * Return : None */ void UART1_GPIO_Configuration(void) GPIO_InitTypeDef GPIO_InitStructure; / Configure 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

15、_PP; GPIO_Init(GPIOA, ,STM32 串口例程讲解,18,Company Logo,/* * Name : UART1_Configuration */ void USART_Configuration(void) USART_InitTypeDef USART_InitStructure; /* Configure the USART1 synchronous paramters */ USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLe

16、ngth_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No ; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /* Configure USART1 basic and asynchron

17、ous paramters */ USART_Init(USART1, ,STM32 串口例程讲解,19,Company Logo,/* * Name : NVIC_Configuration * Deion : Configures NVIC and Vector Table base location. * Input : None * Output : None * Return : None */ void NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVI

18、C_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 串口例程讲解,20,Company Logo,void USART1_IRQHandler(void) if(US

19、ART_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,USART_IT_RXNE); ,STM32 串口

20、例程讲解,21,Company Logo,直接存储器存取DMA,直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速的无需CPU干预的数据传输。把数据传输的任务交给DMA执行,CPU就可以去做别的事情了,提高了CPU的工作效率。,22,Company Logo,Stm32有两个DMA控制器,其中DMA1有7个通道,DMA2有5个通道,每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。 DMA的通道不是随便使用的,有一个预先的分配。,DMA通道和请求,23,Company Logo,DMA1的通道分配,24,Company Logo,DMA2的通道分配,25,

21、Company Logo,int main(void) RCC_Configuration(); /系统时钟设置 GPIO_Configuration();/端口初始化 USART_Config(USART1);/串口1初始化 MYDMA_Config(DMA1_Channel4,(u32) while (1); ,例程:串口1通过DMA进行数据的发送,void RCC_Configuration(void) SystemInit(); /系统时钟配置为72MHZ ,DMA编程例程,26,Company Logo,void GPIO_Configuration(void) GPIO_InitT

22、ypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA , ENABLE); /A口时钟配置 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编程例程,27,Company Logo,voi

23、d USART1_Config(void) USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 , ENABLE);/串口时钟使能 USART_InitStructure.USART_BaudRate = 115200; /速率115200 USART_InitStructure.USART_WordLength = USART_WordLength_8b;/数据位8位 USART_InitStructure.USART_StopBits = USART_StopBits_1;

24、 /停止位1位 USART_InitStructure.USART_Parity = USART_Parity_No;/无校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; /无硬件流控 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;/收发模式 USART_Init(USART1, ,DMA编程例程,28,Company Logo,void MYDMA_Config(DMA_Channel_TypeD

25、ef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr) DMA_InitTypeDef DMA_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); /* Enable DMA clock */ DMA_InitStructure.DMA_PeripheralBaseAddr = cpar; /外设基地址DMA_InitStructure.DMA_MemoryBaseAddr = cmar; /内存基地址DMA_InitStructure.DMA_DIR = DMA_DIR_Periphera

26、lDST;/传送数据方向DMA_InitStructure.DMA_BufferSize = cndtr; /传送数据的大小DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; /外设地址不变 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; /内存地址递增 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; /外设数据宽度 DMA_InitStructure.DMA

27、_MemoryDataSize = DMA_MemoryDataSize_Byte; /内存数据宽度 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; /不循环DMA_InitStructure.DMA_Priority = DMA_Priority_High; /DMA通道的优先级DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA_CHx, ,DMA编程例程,29,Company Logo,30,AD模数模块(Analog-to-Digital Converter),即模拟/数字转换器,

28、主要功能是将连续变量的模拟信号转换为离散的数字信号。由于单片机只能处理数字信号,因此,在对外部的模拟信号进行分析、处理的过程中,必须使用ADC模块将外部的模拟信号转换成单片机所能处理的数字信号。,ADC模数转换模块,30,Company Logo,分辨率,A/D转换器能分辨的最小模拟电压。例如,某款A/D参考电压是5V,输出8位二进制数可以分辨的最小模拟电压为5V2820mV;而输出12位二进制数可以分辨的最小模拟电压为5V2121.22mV。,输入模拟量与输出数字量之间的关系,STM32的ADC是12位逐次逼近型的模拟数字转换器。它有18个通道,可测量16个外部和2个内部信号源(温度传感器、

29、内部参考电压)。,ADC模数转换模块,31,Company Logo,ADC编程步骤,1、开启PA口时钟和ADC1时钟,32,Company Logo,2、复位ADC1,同时设置ADC1分频因子,ADC时钟复位的方法是: ADC_DeInit(ADC1);,分频因子要确保ADC1的时钟(ADCCLK)不要超过14Mhz。这个我们设置分频因子位6,时钟为72/6=12MHz,库函数的实现方法是:,RCC_ADCCLKConfig(RCC_PCLK2_Div6);,33,Company Logo,3、初始化GPIO和ADC1参数,GPIO_InitStructure.GPIO_Pin =GPIO_

30、Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;/模拟输入 GPIO_Init(GPIOA, /初始化GPIOA.1,34,Company Logo,ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;/ADC工作模式:独立模式 ADC_InitStructure.ADC_ScanConvMode = DISABLE;/AD单通道模式 ADC_InitStructure.ADC_ContinuousConvMode = D

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

32、d(ADC1, ENABLE);/使能指定的ADC1 校准包括复位校准和AD校准 执行复位校准的方法是: ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1);/等待复位校准结束 执行ADC校准的方法是: ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1);/等待AD校准结束,36,Company Logo,5、设置规则组的通道,启动A/D,读取A/D结果,我们这里是规则序列中的第1个转换,同时采样周期为239.5,所以设置为: A

33、DC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); 软件开启ADC转换的方法:ADC_SoftwareStartConvCmd(ADC1, ENABLE);/使能指定的ADC1的软件转换启动功能 开启转换之后,就可以获取转换ADC转换结果数据,方法是: ADC_GetConversionValue(ADC1);,37,Company Logo,DAC数模转换模块,38,Company Logo,/* * 名 称:void RCC_Configuration(void) * 功 能:时钟配置 * 入口参数:无 * 出

34、口参数:无 * 说 明: * 调用方法:无 */ void RCC_Configuration(void) SystemInit();/系统时钟配置 ,39,Company Logo,void DAC_Init(void) GPIO_InitTypeDef GPIO_InitStructure; DAC_InitTypeDef DAC_InitType; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE); /外设时钟使能 /*GPIO的配置

35、*/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; GPIO_Init(GPIOA, ,40,Company Logo,void DAC1_Set_Vol(u16 vol) float temp; temp=vol; temp/=1000; temp=temp*4095/3.3; DAC_SetChannel1Data(DAC_Align_12b_R,(u16)temp); int main(void) RCC_Configuration(); /系统时钟配置 DAC_In

36、it(); DAC1_Set_Vol(2000); while (1); ,41,Company Logo,计数器模式 TIM2-TIM5可以由向上计数、向下计数、中央对齐模式。,STM32定时器简介,向上计数模式:计数器从0计数到设定的数值,然后重新从0开始计数并且产生一个计数器溢出事件,这个事件也称为更新事件。 向下计数模式:计数器从设定的数值开始向下计数到0,然后自动从设定的数值重新向下计数,并产生一个向下溢出事件,这个事件也称为更新事件。 中央对齐模式(向上/向下计数):计数器从0开始计数到设定的数值,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;再从0开始重新计

37、数。,42,Company Logo,STM32定时器简介,43,Company Logo,(1) RCC配置; void RCC_Configuration(void) SystemInit(); /系统时钟配置为72MHZ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /定时器3 时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG , ENABLE); /外设时钟使能 ,STM32 定时器例程讲解,44,Company Logo,(2) I/O口线配置 void GPIO_Config

38、(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 定时器例程讲解,45,Company Logo,(3)定时器初始化 void TIM3_Init(u16 a

39、rr,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;/设置时钟

40、分割 TIM_TimeBaseInit(TIM3, /启动定时器3 ,STM32 定时器例程讲解,46,Company Logo,(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; /设置抢占优先级的大小 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /设置从优先级的大小 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/中断使能 NVIC_Init( ,STM32 定时器例程讲解,47,Company Logo,(5)定时器中断 void TIM3_IRQHandler(void) static u8 flag=0; if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论