STM32考试复习(完整版)PPT演示幻灯片_第1页
STM32考试复习(完整版)PPT演示幻灯片_第2页
STM32考试复习(完整版)PPT演示幻灯片_第3页
STM32考试复习(完整版)PPT演示幻灯片_第4页
STM32考试复习(完整版)PPT演示幻灯片_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

复习,1,CompanyLogo,嵌入式系统定义;与通用计算机系统的区别以应用为中心、以计算机技术为基础,软硬件可裁剪,从而能够适应实际应用中对功能、可靠性、成本、体积、功耗和应用环境有特殊要求的专用计算机系统。嵌入式系统的组成嵌入式处理器;外围设备;操作系统;应用软件嵌入式处理器分类微控制器;微处理器;嵌入式DSP;片上系统,绪论,2,CompanyLogo,GPIO,STM32的GPIO有多种工作模式:输入浮空;输入上拉;输入下拉;模拟输入;推挽输出;推挽复用;开漏输出;开漏复用。要知道每种模式具体用在什么场合。GPIO的编程(可能有大题(编程题)用某个IO引脚控制一个LED灯,使其闪烁。要求画出电路图,并编程。,3,CompanyLogo,STM32编写程序时要用到哪个模块首先要开启那个模块的时钟voidRCC_Configuration(void)SystemInit();/系统时钟配置为72MHZRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG,ENABLE);/打开GPIO时钟,STM32GPIO例程讲解,4,CompanyLogo,voidGPIO_Configuration(void)/I/O口线配置GPIO_InitTypeDefGPIO_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,STM32GPIO例程讲解,5,CompanyLogo,写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);,STM32GPIO例程讲解,6,CompanyLogo,EXTI(外部中断),中断的定义CPU在正常执行程序的过程中,突然发生了一些需要紧急处理的事件,这些事件通过某种方式触发引起CPU暂停当前正在执行的程序,转去处理突发事件,待突发事件处理完毕后,CPU再返回继续执行刚刚被暂停的程序的过程就称之为中断。,7,CompanyLogo,STM32中断优先级分组,优先级越高,数值越低!抢占优先级相同的任务,响应优先级高的先响应,但不能互相抢占;抢占优先级不同的,可以抢占低优先级的CPU。,8,CompanyLogo,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、GPIOE.0、GPIOF.0、GPIOG.0。而中断线每次只能连接到1个IO口上,这样就需要通过配置来决定对应的中断线配置到哪个GPIO上了。,9,CompanyLogo,voidRCC_Configuration(void)SystemInit();/系统时钟配置为72MHZRCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,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外部中断例程讲解,10,CompanyLogo,voidGPIO_Configuration(void)/输入输出管脚配置GPIO_InitTypeDefGPIO_InitStructure;/配置输出脚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外部中断例程讲解,11,CompanyLogo,voidNVIC_Configuration(void)/嵌套向量中断控制器配置NVIC_InitTypeDefNVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/选择优先级组别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外部中断例程讲解,12,CompanyLogo,voidEXTI_Configuration(void)/调用固件库中的GPIO_EXTILineConfig函数,/其中两个参数分别是中断口和中断口对应的引脚号GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);EXTI_InitStructure.EXTI_Line=EXTI_Line0;/将中断映射到中断/事件源Line0EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;/中断模式EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling/设置为下降沿中断EXTI_InitStructure.EXTI_LineCmd=ENABLE;/中断使能,即开中断EXTI_Init(/调用EXTI_Init固件库函数,将结构体写入EXTI相关寄存器中,STM32外部中断例程讲解,13,CompanyLogo,voidEXTI0_IRQHandler(void)if(EXTI_GetITStatus(EXTI_Line0)!=RESET)/将LED1的状态反转GPIO_WriteBit(GPIOC,GPIO_Pin_0,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_0);/清中断EXTI_ClearITPendingBit(EXTI_Line0);,STM32外部中断例程讲解,注意:中断服务函数都包含在“stm32f10 x_it.c”文件中,用的时候只需添加指令即可!,14,CompanyLogo,串行通信基础,数据通信方式:并行通信与串行通信并行通信:一次传输多位的数据特点:速度快,适合近距离传输串行通信:数据一位一位地发送特点:硬件简单,占用I/O口资源少,适合距离远,速度要求不高的场合,15,CompanyLogo,波特率,单位时间内传送的信息量。以每秒传送的位为单位:电传机:10字符/秒,1个字符11位,波特率为:1011=110(波特),16,CompanyLogo,voidRCC_Configuration(void)SystemInit();/系统时钟配置为72MHZRCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);/外设时钟配置,STM32串口例程讲解,17,CompanyLogo,/*Name:UART1_GPIO_Configuration*Deion:Configurestheuart1GPIOports.*Input:None*Output:None*Return:None*/voidUART1_GPIO_Configuration(void)GPIO_InitTypeDefGPIO_InitStructure;/ConfigureUSART1_Txasalternatepush-pullGPIO_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串口例程讲解,18,CompanyLogo,/*Name:UART1_Configuration*/voidUSART_Configuration(void)USART_InitTypeDefUSART_InitStructure;/*ConfiguretheUSART1synchronousparamters*/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_HardwareFlowControl_None;USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;/*ConfigureUSART1basicandasynchronousparamters*/USART_Init(USART1,STM32串口例程讲解,19,CompanyLogo,/*Name:NVIC_Configuration*Deion:ConfiguresNVICandVectorTablebaselocation.*Input:None*Output:None*Return:None*/voidNVIC_Configuration(void)NVIC_InitTypeDefNVIC_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串口例程讲解,20,CompanyLogo,voidUSART1_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,USART_IT_RXNE);,STM32串口例程讲解,21,CompanyLogo,直接存储器存取DMA,直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速的无需CPU干预的数据传输。把数据传输的任务交给DMA执行,CPU就可以去做别的事情了,提高了CPU的工作效率。,22,CompanyLogo,Stm32有两个DMA控制器,其中DMA1有7个通道,DMA2有5个通道,每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。DMA的通道不是随便使用的,有一个预先的分配。,DMA通道和请求,23,CompanyLogo,DMA1的通道分配,24,CompanyLogo,DMA2的通道分配,25,CompanyLogo,intmain(void)RCC_Configuration();/系统时钟设置GPIO_Configuration();/端口初始化USART_Config(USART1);/串口1初始化MYDMA_Config(DMA1_Channel4,(u32)while(1);,例程:串口1通过DMA进行数据的发送,voidRCC_Configuration(void)SystemInit();/系统时钟配置为72MHZ,DMA编程例程,26,CompanyLogo,voidGPIO_Configuration(void)GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);/A口时钟配置GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;/USART1TXGPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;/复用推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,/A端口,DMA编程例程,27,CompanyLogo,voidUSART1_Config(void)USART_InitTypeDefUSART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);/串口时钟使能USART_InitStructure.USART_BaudRate=115200;/速率115200USART_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_HardwareFlowControl_None;/无硬件流控USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;/收发模式USART_Init(USART1,DMA编程例程,28,CompanyLogo,voidMYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32cpar,u32cmar,u16cndtr)DMA_InitTypeDefDMA_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);/*EnableDMAclock*/DMA_InitStructure.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_MemoryInc_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_M2M_Disable;DMA_Init(DMA_CHx,DMA编程例程,29,CompanyLogo,30,AD模数模块(Analog-to-DigitalConverter),即模拟/数字转换器,主要功能是将连续变量的模拟信号转换为离散的数字信号。由于单片机只能处理数字信号,因此,在对外部的模拟信号进行分析、处理的过程中,必须使用ADC模块将外部的模拟信号转换成单片机所能处理的数字信号。,ADC模数转换模块,30,CompanyLogo,分辨率,A/D转换器能分辨的最小模拟电压。例如,某款A/D参考电压是5V,输出8位二进制数可以分辨的最小模拟电压为5V2820mV;而输出12位二进制数可以分辨的最小模拟电压为5V2121.22mV。,输入模拟量与输出数字量之间的关系,STM32的ADC是12位逐次逼近型的模拟数字转换器。它有18个通道,可测量16个外部和2个内部信号源(温度传感器、内部参考电压)。,ADC模数转换模块,31,CompanyLogo,ADC编程步骤,1、开启PA口时钟和ADC1时钟,32,CompanyLogo,2、复位ADC1,同时设置ADC1分频因子,ADC时钟复位的方法是:ADC_DeInit(ADC1);,分频因子要确保ADC1的时钟(ADCCLK)不要超过14Mhz。这个我们设置分频因子位6,时钟为72/6=12MHz,库函数的实现方法是:,RCC_ADCCLKConfig(RCC_PCLK2_Div6);,33,CompanyLogo,3、初始化GPIO和ADC1参数,GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;/模拟输入GPIO_Init(GPIOA,/初始化GPIOA.1,34,CompanyLogo,ADC_InitTypeDefADC_InitStructure;ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;/ADC工作模式:独立模式ADC_InitStructure.ADC_ScanConvMode=DISABLE;/AD单通道模式ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;/AD单次转换模式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,35,CompanyLogo,4、使能ADC并校准,使能ADC的方法:ADC_Cmd(ADC1,ENABLE);/使能指定的ADC1校准包括复位校准和AD校准执行复位校准的方法是:ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1);/等待复位校准结束执行ADC校准的方法是:ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1);/等待AD校准结束,36,CompanyLogo,5、设置规则组的通道,启动A/D,读取A/D结果,我们这里是规则序列中的第1个转换,同时采样周期为239.5,所以设置为:ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);软件开启ADC转换的方法:ADC_SoftwareStartConvCmd(ADC1,ENABLE);/使能指定的ADC1的软件转换启动功能开启转换之后,就可以获取转换ADC转换结果数据,方法是:ADC_GetConversionValue(ADC1);,37,CompanyLogo,DAC数模转换模块,38,CompanyLogo,/*名称:voidRCC_Configuration(void)*功能:时钟配置*入口参数:无*出口参数:无*说明:*调用方法:无*/voidRCC_Configuration(void)SystemInit();/系统时钟配置,39,CompanyLogo,voidDAC_Init(void)GPIO_InitTypeDefGPIO_InitStructure;DAC_InitTypeDefDAC_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,40,CompanyLogo,voidDAC1_Set_Vol(u16vol)floattemp;temp=vol;temp/=1000;temp=temp*4095/3.3;DAC_SetChannel1Data(DAC_Align_12b_R,(u16)temp);intmain(void)RCC_Configuration();/系统时钟配置DAC_Init();DAC1_Set_Vol(2000);while(1);,41,CompanyLogo,计数器模式TIM2-TIM5可以由向上计数、向下计数、中央对齐模式。,STM32定时器简介,向上计数模式:计数器从0计数到设定的数值,然后重新从0开始计数并且产生一个计数器溢出事件,这个事件也称为更新事件。向下计数模式:计数器从设定的数值开始向下计数到0,然后自动从设定的数值重新向下计数,并产生一个向下溢出事件,这个事件也称为更新事件。中央对齐模式(向上/向下计数):计数器从0开始计数到设定的数值,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;再从0开始重新计数。,42,CompanyLogo,STM32定时器简介,43,CompanyLogo,(1)RCC配置;voidRCC_Configuration(void)SystemInit();/系统时钟配置为72MHZRCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);/定时器3时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE);/外设时钟使能,STM32定时器例程讲解,44,CompanyLogo,(2)I/O口线配置voidGPIO_Config(void)GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;/选择第11个引脚GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;/配置为推挽输出模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/口线翻转速度最高为50MHzGPIO_Init(GPIOG,STM32定时器例程讲解,45,CompanyLogo,(3)定时器初始化voidTIM3_Init(u16arr,u16psc)TIM_TimeBaseInitTypeDefTIM3_TimeBaseStructure;TIM3_TimeBaseStructure.TIM_Period=arr;/设置自动重装载寄存器的值(设置定时时间)TIM3_TimeBaseStructure.TIM_Prescaler=psc;/设置预分频器的分频值TIM3_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;/计数器向上计数模式TIM3_TimeBaseStructure.TIM_ClockDivision=0 x0;/设置时钟分割TIM_TimeBaseInit(TIM3,/启动定时器3,STM32定时器例程讲解,46,CompanyLogo,(4)NVIC初始化voidNVIC_Configuration(void)NVIC_InitTypeDefNVIC_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,CompanyLogo,(5)定时器中断voidTIM3_IRQHandler(void)staticu8flag=0;if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)/检查TIM3更新中断是否发生if(flag)GPIO_Res

温馨提示

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

评论

0/150

提交评论