ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:320.95KB ,
资源ID:4526108      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4526108.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(STM32常见知识点.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

STM32常见知识点.docx

1、STM32常见知识点 STM32 嵌入式笔记 常见知识点解析 前言:基础知识开放板硬件资源连接:LED0=PB5 LED1=PE5(通过TIM3控制的LED1的闪烁情况)KEY0 =PE4 KEY1=PE3 KEY2=PE2 KEY_UP=PA0While();当括号里面为1时为真时,这是一个死循环,代码不再向下执行。当括号里面为0 为假,代码继续向下执行。While(1);这是一个死循环,代码不再向下执行。任何美好情感的得到,任何美好事物的创造 从来都是不轻松的 你不可能轻轻松松的实现梦想 获得成功 人类一切美好的东西都是要有称重的 都是会累的其实所谓的爱就是分享 同步的感受这个世界,成熟起

2、来独立和分享你们在同步的观察和感受这个世界 努力让自己独立起来在一起时努力甜蜜,不在一起时各自精彩浮空输入:浮空就是逻辑电平器件的输入引脚不接高电平也不接低电平,由于逻辑电平的内部的结构,当输入引脚悬空时,相当于该引脚接入了高电平。一般实际运用时,该引脚不建议悬空,易受干扰。通俗的讲就是让管教什么也不接,浮空着。模拟输入:模拟输入是指传统方式的输入。数字输入时输入PCM数字信号。即0、1的二进制数字信号,通过数模转换,转换成模拟信号,经前级放大进入功率放大器,功率放大器还是模拟的。推挽输出:可以输出高电平,低电平,连接数字器件,推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极

3、管导通的时候另一个截止。高低电平由IC的电源决定。开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合于做电流型驱动,其吸收电流能力相对较强。复用开漏输出、复用推挽输出:可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)GPIO_Mode_AIN 模拟输入 GPIO_Mode_Out_OD开漏输出PIO_Mode_IN_FLOATING 浮空输入 GPIO_Mode_Out_PP推挽输出GPIO_Mode_IPD 下拉 GPIO_Mode_AF_OD 复用开漏输出GPIO_Mode_IPU 上拉 GPIO_Mode_AF_PP复用推挽输出关于引脚

4、复用与映射的问题:default(默认复用功能) remap(重定义功能)1、例如串口1 的发送接收引脚是PA9,PA10,当我们把PA9,PA10不用作GPIO,而用做复用功能串口1的发送接收引脚的时候,叫端口复用1、GPIO端口时钟使能。RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);2、复用外设时钟使能。比如你要将端口PA9,PA10复用为串口,所以要使能串口时钟。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);2、即一个外设的引脚除了具有默认的端口外,还可以通过设置重

5、映射寄存器的方式,把这个外设的引脚映射到其它的端口。重映射AFIO重映射的步骤:1、使能被映射到的IO端口时钟 2、使能被映射到的外设时钟3、使能AFIO功能的时钟4、进行重映射GPIO_InitTypeDef GPIO_InitStructure; /PWM中重映射的例子TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /使能定时器3时钟RCC_APB2PeriphClo

6、ckCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); /使能GPIO外设和AFIO复用功能模块时钟GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); /Timer3部分重映射 TIM3_CH2-PB5 remap(重定义功能)/此方格中的需要进行重映射 MODE 的设置问题:1、LED灯设置为推挽输出。2、KEY0、KEY1、KEY2都是低电平有效,KEY_UP是高电平有效 KEY0、KEY1、KEY2设置为上拉输入、KEY_UP设置为下拉输入。3、u8 KEY_Scan(u8

7、 mode) static u8 key_up=1;/按键按松开标志 if(mode)key_up=1; /支持连按 if(key_up&(KEY0=0|KEY1=0|KEY2=0|WK_UP=1) delay_ms(10);/去抖动 key_up=0; if(KEY0=0)return KEY0_PRES; else if(KEY1=0)return KEY1_PRES; else if(KEY2=0)return KEY2_PRES; else if(WK_UP=1)return WKUP_PRES; else if(KEY0=1&KEY1=1&KEY2=1&WK_UP=0)key_up=

8、1; return 0;/ 无按键按下按键扫描(不支持连续按)的一般思路(按一下加一)u8 KEY_Scan(void) static u8 key_up=1;/仅第一次执行,第二次不会被按下。代表上次按键没有被按下,是松开的。 但是保留上一次的值 if(key_up & KEY按下) delay_ms(10);/延时,防抖 key_up=0;/标记这次key已经按下 /key_up=1,代表按键没有被按下,key_up=0代表按键被按下 if(KEY确实按下) return KEY_VALUE; else if(KEY没有按下) key_up=1;/ 此时的值会被保留在static里面 re

9、turn 没有按下 按键扫描(两种模式合二为一)的一般思路u8 KEY_Scan(u8 mode) static u8 key_up=1; / 此句没有意义 if(mode=1) key_up=1;/支持连续按 key_up=1;代表一直没有按下 key_up一直会等于1 if(key_up & KEY按下) delay_ms(10);/延时,防抖 key_up=0;/标记这次key已经按下 此句没有意义 if(KEY确实按下) return KEY_VALUE; else if(KEY没有按下) key_up=1; 此句没有意义 return 没有按下 比较重要的函数的用法:例题1、带参数的

10、形式u8 Is_Leap_Year(u16 year) if(year%4=0) /必须能被4整除 if(year%100=0) if(year%400=0) return 1;/如果以00结尾,还要能被400整除 能被4、100、400整除 else return 0; /能被4和100整除 但是不能被400整除 else return 1; /仅能被4整除 else return 0; / 都整除不了 for(t=1970;tsyear;t+) /把所有年份的秒钟相加 if(Is_Leap_Year(t) seccount+=31622400;/闰年的秒钟数 else seccount+=

11、31536000; /平年的秒钟数 第一章 中断优先级分组 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; /在misc.c中有NVIC_Init 定位到stm32f10x.h的结构体中 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;/抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; /子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /IRQ通道使能 N

12、VIC_Init(&NVIC_InitStructure); /根据指定的参数初始化VIC寄存器 第二章 串行通信 串行通信的通信方式 同步通信:带时钟同步信号传输。 -SPI,IIC通信接口 异步通信:不带时钟同步信号。 -UART(通用异步收发器),单总线USART_InitTypeDef USART_InitStructure;/结构体 USART_InitStructure.USART_BaudRate = bound;/串口波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;/字长为8位数据格式USART_Ini

13、tStructure.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; /收发模式USART_Init(USART1, &USART_InitStru

14、cture); /初始化串口1 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);/开启串口接受中断 USART_Cmd(USART1, ENABLE);1、void USART1_IRQHandler(void) /串口1中断服务程定位到 startup_stm32f10x.h 2、USART_GetITStatus3、USART_ClearITPendingBit /定位到stm32f10x.usart.c中 串口通信的原理 ABCDEFGHI.(0x0D),(0x0A) 第三章 外部中断的概述以线0位例:它对应了GPIOA.0 ,GPIOB.0

15、,GPIOC.0 .GPIOI.0 .而中断线每次只能连接到1个IO口上,这样就需要通过配置来决定对应的中断线配置到哪个GPIO上了即每个EXTI线对应GPIOA.0 ,GPIOB.0 ,GPIOC.0 .GPIOI.0G个IO引脚 GPIOx.0映射到EXTI0GPIOx.1映射到EXTI1GPIOx.15映射到EXTI15从表中可以看出,外部中断线59分配一个中断向量,共用一个服务函数 外部中断线1015分配一个中断向量,共用一个中断服务函数。IO口外部中断在中断向量表中只分配了7个中断向量,也就是说只能用7个中断服务函数。EXTI0_IRQHandler EXTI1_IRQHandler

16、 EXTI2_IRQHandler EXTI3_IRQHandler EXTI4_IRQHandler EXTI9_5_IRQHandler EXTI15_10_IRQHandler外部中断一般的设置步骤初始化IO口为输入。 / 外部中断初始化、中断优先级分组、 GPIO_Init(); 开启IO口复用时钟。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);设置IO口与中断线的映射关系。 void GPIO_EXTILineConfig();初始化线上中断,设置触发条件等。 EXTI_Init();配置中断分组(NVIC),并使能中断。 N

17、VIC_Init(); 编写中断服务函数。 EXTIx_IRQHandler();清除中断标志位 EXTI_ClearITPendingBit();外部中断常用库函数void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); /设置IO口与中断线的映射关系 exp: GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);/ 解释:中断线EXTI2与GPIOE连接了void EXTI_Init(EXTI_InitTypeDef* EXTI_Ini

18、tStruct); /初始化中断线:触发方式等ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);/判断中断线中断状态,是否发生void EXTI_ClearITPendingBit(uint32_t EXTI_Line);/清除中断线上的中断标志位KEY0 KEY1 KEY2设置为下降沿触发 KEY_UP设置为上升沿触发设置IO口与中断线的映射关系:按键对应GPIOE.0 GPIOE.2 GPIOE.3 GPIOE.4所以设置IO口与中断映射的时候,只能设置成 EXTI_Line0、EXTI_Line2、EXTI_Line3、EXTI_Line4即映射

19、号与所使用的IO号要一一对应。 第四章 定时器高级定时器:TIM1 TIM8 带死区控制盒紧急刹车,可应用于PWM电机控制通用定时器:TIM2TIM5 通用。定时计数,PWM输出,输入捕获,输出比较基本定时器:TIM6、TIM7 主要应用于驱动DAC通用定时器的特点: 4个独立的通道(1、输入捕获 2、输出比较3、PWM生成(边缘或中间对齐模式) 4、单脉冲模式输出) APB1时钟可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用1个定时器控制另外一个定时器)的同步电路。时钟的计算方法:除非APB1的分频系数是1,否则通用定时器的时钟等于APB1时钟的2倍。默认调用SystemI

20、nit函数情况下:SYSCLK=72 初始化的时候APB1的时钟为2分频,所以APB1为36MHZAHB时钟=72MAPB1时钟=36M所以APB1的分频系数=AHB/APB1时钟=2所以,通用定时器时钟CK_INT=2*36M=72M定时时间:t=(arr+1)(pcs+1)/Tclk 计数器时钟可以由下列时钟源提供:1、内部时钟(CK_INT)2、外部时钟模式1:外部输入脚(TIx)3、外部时钟模式2:外部触发输入(ETR)4、内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。定时器的一般编写方法/

21、定时器的序号是可以随便用的 1、能定时器时钟。 RCC_APB1PeriphClockCmd();2、初始化定时器,配置ARR,PSC。 TIM_TimeBaseInit(); 3、开启定时器中断,配置NVIC。 void TIM_ITConfig();/更新中断函数 NVIC_Init(); /设置中断优先级分组4、使能定时器。 TIM_Cmd();5、 编写中断服务函数。 TIMx_IRQHandler();/才是定时器定时的时间函数(比如LED0每隔1s钟闪烁)void TIM3_Int_D(u16 arr,u16 psc) TIM_TimeBaseInitTypeDef TIM_Tim

22、eBaseStructure; NVIC_InitTypeDef NVICInitInstructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); / 定时器 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_Period=arr;/重装在值 TIM_TimeBaseStructure.TIM_Prescal

23、er=psc;/预分频值 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);/更新中断 第五章 PWMSTM32的定时器除了TIM6和TIM7,其他的人定时器都可以产生PWM输出。其中高级定时器TIM1和TIM8最多可以产生7路的PWM输出。通用的PWM可以产生多达4路的PWM输出。复用功能 没有重映射部分重映射完全重映射TIM3_CH1PA6PB4PC6TIM3_CH2PA7PB5PC7TIM3_CH3PB0PB0PC8TIM3_CH4PB1PB1PC9使能定时器3和相

24、关IO口时钟。 1、使能定时器3时钟:RCC_APB1PeriphClockCmd(); 2、使能GPIOB时钟:RCC_APB2PeriphClockCmd(); 3、 初始化IO口为复用功能输出。函数:GPIO_Init(); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 4、这里我们是要把PB5用作定时器的PWM输出引脚,所以要重映射配置, 所以需要开启AFIO时钟。同时设置重映射。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_P

25、artialRemap_TIM3, ENABLE); 5、初始化定时器:ARR,PSC等:TIM_TimeBaseInit(); 6初始化输出比较参数:TIM_OC2Init();7使能预装载寄存器TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); 8.、使能定时器。TIM_Cmd();9、不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare2();/主函数中写此句在板载的实例中,PB5连接到LEDO 引脚PB5中的remap项中有TIM3_CH2,所以需要进行重映射 第六章 红外遥控的部分 STM32正点原子 NEC遥控指

26、令的数据格式为:同步码头、地址码、地址反码、控制码、控制反码均是8位数据格式 NEC码的位定义:一个脉冲对应560us的连续的载波,一个逻辑1传输需要2.25ms(560us脉冲+1680us低电平),一个逻辑0的传输需要1.125ms(560us脉冲+560us低电平) 而遥控接收头在收到脉冲的时候为电平,在没有脉冲的时候为高电平,这样,我们在接受头端收到的信号为:逻辑1应该是560us低+1680us高,逻辑0应该是560us低+560高连发码:如果一帧数据在发送完毕之后,按键仍然没有放开,则发射重复码,即连发码,可以通过统计连发码的次数标记按键按下的长短次数。C51单片机红外遥控: 红外

27、基带信号发送协议引导码 + 8位客户码1 + 8位客户码2 + 8位操作码 + 8位操作反码用户真正须要的只有操作码 客户码 操作码客户码和操作码都为8位的二进制编码NEC的uPD6121G编码芯片定义的0,1如下:0: 0.56ms的高电平+0.565ms的低电平1: 0.56ms的高电平+1.685ms的低电平同样这样的数码0, 1的占空比也可以自已定义#include#define uchar unsigned char#define uint unsigned intsbit ir=P32;uchar irtime;uchar irdata33;/数据/引导码 +8位用户码1+8位用户

28、码2+8位操作码+8位操作反码uchar bitnum;/位的数值uchar startflag;uchar irok;uchar ircode4; /引导码、用户码1、用户码2、操作码、操作反码 uchar irprosok;/红外码值处理uchar disnum8;sbit dula=P26;sbit wela=P27;uchar code table_du=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar code table_we=0xfe,0xfd,0xff,0x

29、ff,0xef,0xdf;void timer0init(void) /256*(1/12m)*12=0.256ms 一共irtime的时间 TMOD=0x02; TH0=0x00; TL0=0x00; ET0=1; EA=1; TR0=1;/有四个码 ,一个码8位void irpros(void)/红外码值处理 / 红外码值处理 处理0码4.4 和1码 8.8 取中间值6 uchar mun,k,i,j; k=1; for(j=0;j4;j+)/有四个码 ,操作码,操作反码 for(i=0;i1; if(irdatak6)/说明是高电平 1;/设置时间 mun=mun | 0x80;/最高位置 k+; ircodej=mun;/提取出来的值,放在ircode里面保存起来 irprosok=1;/标志位 说明红外处理已经结束void irwork(void) / 红外码值转换 4个码在开发板上显示出来 disnum0=ircode0/16;/16进制数 disnum1=ircode0%16; disnum2=ircode

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1