牛人的STM32学习笔记(寄存器版本)_第1页
牛人的STM32学习笔记(寄存器版本)_第2页
牛人的STM32学习笔记(寄存器版本)_第3页
牛人的STM32学习笔记(寄存器版本)_第4页
牛人的STM32学习笔记(寄存器版本)_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、 一、GPIO口的配置 STM32的DGPIO口最多可以有7组(GPIOaGPIOg),而每一组GPIO口均有16个双向IO组成。并且没个IO口均可配置成8种模式(4种输入模式,4种输出模式)。不管配置哪个IO口也不论将其配置成哪种模式(但是配置成哪种模式要看具体应用,参考中文参考手册第105页)都可以按以下步骤来进行配置:(1) 使能PORTx(x=AG)时钟 这里就得操作寄存器RCC_APB2ENR(32为寄存器)了15141312111098ADC3ENUSART1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENIOPGEN76543210IOPFENIOPEENIOPD

2、ENIOPCENIOPBENIOPAEN保留AFIOEN RCC_APB2ENR的015位(0632位保留) 第28分别是使能GPIOAGPIOG时钟的,只要将其置“1”即可,如RCC_APB2ENR|=1<<2;就是使能GPIOA的时钟;其余IO口的始终使能一次类推。(2) 对相应的IO模式进行配置,低8位配置GPIOx_CRL;高8位配置GPIOx_CRH3130292827262524CNF71:0MODE71:0CNF61:0MODE61:02322212019181716CNF51:0MODE51:0CNF41:0MODE41:015141312111098CNF31:0

3、MODE31:0CNF21:0MODE21:076543210CNF11:0MODE11:0CNF01:0MODE01:0 GPIOx_CRL(x=AG(端口配置低寄存器x=AE)该寄存器用于配置GPIOx的低8位,具体8种模式的配置见中文参考手册例如: GPIOD->CRL&=0XFFFFF0FF;GPIOD->CRL|=0X00000300;/PD.2推挽输出;其余IO口的低8位以此类推。3130292827262524CNF151:0MODE151:0CNF141:0MODE141:02322212019181716CNF131:0MODE131:0CNF121:0M

4、ODE121:015141312111098CNF111:0MODE111:0CNF101:0MODE101:076543210CNF91:0MODE91:0CNF81:0MODE81:0 GPIOx_CRH(端口配置高寄存器x=AE)该寄存器用于配置GPIOx的高8位,具体8种模式的配置见中文参考手册例如:GPIOA->CRH&=0XFFFFFFF0;;GPIOA->CRH|=0X00000003;/PA8 推挽输出;其余IO口的高8位以此类推。(3) 端口的输入和输出电平配置15141312111098IDR15IDR14IDR13IDR12IDR11IDR10IDR9

5、IDR876543210IDR7IDR6IDR5IDR4IDR3IDR2IDR1IDR0 GPIOx_IDR(端口输入数据寄存器x=AE)该寄存器配置IO口的015位的输入数据,以16位读出。15141312111098ODR15ODR14ODR13ODR12ODR11ODR10ODR9ODR876543210ODR7ODR6ODR5ODR4ODR3ODR2ODR1ODR0 GPIOx_ODR(端口输出数据寄存器x=AE)该寄存器配置IO口的015位的输入初始状态,例如:GPIOA->ODR|=1<<13;/PA13上拉输入一般GPIO口配置可仿以下两个程序:void KEY

6、_Init(void)RCC->APB2ENR|=1<<2; /使能PORTA时钟GPIOA->CRL&=0XFFFFFFF0;/PA0设置成输入 GPIOA->CRL|=0X00000008; GPIOA->CRH&=0X0F0FFFFF;/PA13,15设置成输入 GPIOA->CRH|=0X80800000; GPIOA->ODR|=1<<13; /PA13上拉,PA0默认下拉GPIOA->ODR|=1<<15; /PA15上拉void LED_Init(void)RCC->APB2ENR

7、|=1<<2; /使能PORTA时钟 RCC->APB2ENR|=1<<5; /使能PORTD时钟 GPIOA->CRH&=0XFFFFFFF0; GPIOA->CRH|=0X00000003;/PA8 推挽输出 GPIOA->ODR|=1<<8; /PA8 输出高 GPIOD->CRL&=0XFFFFF0FF;GPIOD->CRL|=0X00000300;/PD.2推挽输出GPIOD->ODR|=1<<2; /PD.2输出高 二、串口通信STM32最多可以提供5路串口,其串口配置主要有以

8、下步骤:(1) 串口时钟使能15141312111098ADC3ENUSART1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENIOPGEN76543210IOPFENIOPEENIOPDENIOPCENIOPBENIOPAEN保留AFIOEN RCC_APB2ENR的015位(1632位保留)在寄存器RCC_APB2ENR里的第14位就是对串口1的时钟使能即:RCC_APB2ENR|=1<<14; /使能串口1时钟 , 那么除串口1的时钟使能在RCC_APB2ENR外其余的时钟使能位在寄存器RCC_APB1ENR里,看下表:3130292827262524保留DA

9、CENPWRENBKPEN保留CANEN保留2322212019181716USBENI2C2ENI2C1ENUART5ENUART4ENUART3ENUART2EN保留15141312111098SPI3ENSPI2EN保留WWDGEN保留76543210保留TIM7ENTIM6ENTIM5ENTIM4ENTIM3ENTIM2EN RCC_APB1ENR例如:RCC_APB1ENR|=1<<17; /使能串口2时钟 ,其余串口时钟使能以此类推。(2) 串口复位即结束复位STM32在使用串口时不管当前该串口出于什么状态都先要将其复位,而复位后要将其结束复位。串口复位主要在寄存器RC

10、C_APB1RSTR(串口1的复位)和寄存器RCC_APB2RSTR(其余串口复位)这两个寄存器如下表15141312111098ADC3RSTUSART1RSTTIM8RSTSPI1RSTTIM1RSTADC2RSTADC1RSTIOPGRST76543210IOPFRSTIOPERSTIOPDRSTIOPCRSTIOPBRSTIOPARST保留AFIORST RCC_APB2RSTR(APB2外设复位寄存器)寄存器RCC_APB2RSTR的第14位是进行串口1的复位如:RCC_APB1RSTR|=1<<14; /将串口1复位 ,然后结束复位RCC_APB1RSTR|=(1<

11、;<14); /结束串口1复位其余串口复位在寄存器 RCC_APB1RSTR里如下表:3130292827262524保留DACRSTPWRRSTBKPRST保留CANRST保留2322212019181716USBRSTI2C2RSTI2C1RSTUART5RSTUART4RSTUART3RSTUART2RST保留15141312111098SPI3RSTSPI2RST保留WWDGRST保留76543210保留TIM7RSTTIM6RSTTIM5RSTTIM4RSTTIM3RSTTIM2TST RCC_APB1RSTR(APB1外设复位寄存器)如: RCC_APB1RSTR|=1<

12、;<17; /复位串口2 RCC_APB1RSTR|=(1<<17); / 结束串口2复位 ,其余串口复位操作以此类推。(3) 串口波特率设置15141312111098DIV_Mantissa11:476543210DIV_Mantissa3:0DIV_Fraction3:0 USART_BRR(波特比率寄存器)该寄存器的15-4位:DIV_Mantissa11:0USARTDIV的整数部分,这12位定义了USART分频器除法因子(USARTDIV)的整数部分;3-0位:DIV_Fraction3:0USARTDIV的小数部分,这4位定义了USART分频器除法因子(USAR

13、TDIV)的小数部分。关于波特率设置在函数void uart_init(u32 pclk2,u32 bound)里已经设置好,并且封装在usart.c文件里面可以直接调用。(4) 串口控制STM32的每个串口都有3个控制寄存器(USART_CR13)控制,例如USART_CR1如下:15141312111098保留UEMWAKEPCEPSPEIE76543210TXEIETCIERXNEIEIDLEIETERERWUSBK USART_CR1(控制寄存器1) 该寄存器3214位保留,第13位使能串口(任何串口在应用的时候都必需将其置“1”)第12位设置字长,当这位为“0”的时候设置串口位8个字

14、长外加n个停止位,这n个停止位在寄存器USART_CR2中第13:12位来决定。PCE为奇偶校验使能位设置为“0”则禁止校验,否则使能校验。PS是交验选择位,设置为“0”则为偶校验,否则为奇校验。PEIE:PE(校验错误)中断使能,该位由软件设置或清除,定义:0(禁止产生中断),1(当USART_SR中的PE为1时,产生USART中断)。TXEIE发送缓冲区空中断使能,(手动),定义:0(禁止产生中断),1(当USART_SR中的TXE为1时,产生USART中断)。TCIE发送完成中断使能,(手动),定义:0(禁止产生中断)1(当USART_SR中的TC为1时,产生USART中断)。RXNEI

15、E接收缓冲区非空中断使能,(手动),定义:0(禁止产生中断),1(当USART_SR中的ORE或者RXNE为1时,产生USART中断)。TE为发送使能位,设置为“1”将开启串口的发送功能。RE为接收使能位,用法同TE。15141312111098保留LINENSTOP1:0CLKENCPOLCPHALBCL76543210保留LBDIELBDL保留ADD3:0 USART_CR2(控制寄存器2)如:USART1->CR1|=0X200C; /1位停止,无校验位. 0X200C=0010 0000 0000 1100B设置成使能串口8个字长1个停止位(USART_CR2中13:12默认为“

16、0”)禁止校验,禁止校验所有中断,使能发送和接收。(5) 数据发送和接收15141312111098保留DR876543210DR7:0 USART_DR(数据寄存器) 发送数据缓存寄存器(向它写数据它会自动发送数据),当接收到数据时则存放接收的数据(6) 串口控制15141312111098保留CTSLBD76543210TXETCRXNELDLEORENEFEPE USART_SR 参考程序: void uart_init(u32 pclk2,u32 bound) float temp;u16 mantissa;u16 fraction; temp=(float)(pclk2*100000

17、0)/(bound*16);/得到USARTDIVmantissa=temp; /得到整数部分fraction=(temp-mantissa)*16; /得到小数部分 mantissa<<=4;mantissa+=fraction; RCC->APB2ENR|=1<<2; /使能PORTA口时钟 RCC->APB2ENR|=1<<14; /使能串口时钟 GPIOA->CRH&=0XFFFFF00F; GPIOA->CRH|=0X000008B0;/IO状态设置 RCC->APB2RSTR|=1<<14; /复

18、位串口1RCC->APB2RSTR&=(1<<14);/停止复位 /波特率设置 USART1->BRR=mantissa; / 波特率设置 USART1->CR1|=0X200C; /1位停止,无校验位. #ifdef EN_USART1_RX /如果使能了接收/使能接收中断USART1->CR1|=1<<8; /PE中断使能USART1->CR1|=1<<5; /接收缓冲区非空中断使能 MY_NVIC_Init(3,3,USART1_IRQChannel,2);/组2,最低优先级 #endif void USART1_

19、IRQHandler(void)u8 res; if(USART1->SR&(1<<5)/接收到数据 res=USART1->DR; if(USART_RX_STA&0x80)=0)/接收未完成if(USART_RX_STA&0x40)/接收到了0x0dif(res!=0x0a)USART_RX_STA=0;/接收错误,重新开始else USART_RX_STA|=0x80;/接收完成了 else /还没收到0X0Dif(res=0x0d)USART_RX_STA|=0x40;elseUSART_RX_BUFUSART_RX_STA&0X

20、3F=res;USART_RX_STA+;if(USART_RX_STA>63)USART_RX_STA=0;/接收数据错误,重新开始接收 以上两个函数已经封装在usart.c中可直接调用 三、外部中断STM32的每一个IO口都可以作为中断输入,要想把IO口作为中断输入则必须将IO口设置成上拉/下拉输入或浮空输入(设置成浮空输入时要接上拉或下拉电阻否则可能导致中断不断触发)。下面总结一下设置IO口为外部中断时的步骤:(1) 将IO口设置成输入模式这个在第一章总结过,这里不多说。(2)开启IO口复用时钟,设置IO口与中断线的映射关系这一步在函数void Ex_NVIC_Config(u8

21、GPIOx,u8 BITx,u8 TRIM) 中已经封装好可直接调用这里说一下IO口的复用时钟使能:15141312111098ADC3ENUSART1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENIOPGEN76543210IOPFENIOPEENIOPDENIOPCENIOPBENIOPAEN保留AFIOEN RCC_APB2ENR RCC_APB2ENR|=0X01; /使能IO口复用时钟(3)开启与该IO口相对应的线上中断/事件,并设置触发条件这一步封装在函数void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM) 中,可以直接调用,

22、例如:Ex_NVIC_Config(GPIO_A,0,RTIR); /设置PA(0)上升沿触发 Ex_NVIC_Config(GPIO_A,13,FTIR);/设置PA(13)下降沿触发(4) 配置中断分组(NVIC)并使能中断 这一步封装在函数void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group) 里面可以直接调用,例如:MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); /抢占2,子优先级2,组2这里值得注意的是EXTI0、EXTI

23、1、EXTI2、EXTI3、EXTI4为Line0Line4EXTI15_10为Line15Line10 EXTI9_5为Line9Line5 (5)编写中断服务函数例如: void EXTI15_10_IRQHandler(void) delay_ms(10); /消抖 if(KEY0=0) /按键0 LED0=!LED0; else if(KEY1=0)/按键1 LED1=!LED1; EXTI->PR=1<<13; /清除LINE13上的中断标志位 EXTI->PR=1<<15; /清除LINE15上的中断标志位 四、定时计数器中断STM32共有8个定

24、时计数器,其中TIME1和TIME8是高级定时器,TIME2TIME5是通用定时器,TIME6和TIME7是基本定时器,这里以TIME3为例先总结以下定时计数器的基本用法。定时计数器TIME3中断的配置步骤:(1) TIME3时钟使能3130292827262524保留DACENPWRENBKPEN保留CANEN保留2322212019181716USBENI2C2ENI2C1ENUART5ENUART4ENUART3ENUART2EN保留15141312111098SPI3ENSPI2EN保留WWDGEN保留76543210保留TIM7ENTIM6ENTIM5ENTIM4ENTIM3ENTI

25、M2EN RCC_APB1ENR例如: RCC->APB1ENR|=1<<1; /使能TIME3的时钟; RCC->APB1ENR|=1<<2; /使能TIME4的时钟; RCC->APB1ENR|=1<<3; /使能TIME5的时钟; RCC->APB1ENR|=0X01;/使能TIME2的时钟使能;(RCC->APB1ENR|=1<<0;)其余的一次类推。15141312111098ADC3ENUSART1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENIOPGEN76543210IOPFENIO

26、PEENIOPDENIOPCENIOPBENIOPAEN保留AFIOEN RCC_APB2ENR(2) 设置TIM3_ARR和TIM3_PSC的值 这两个位分别设置自动重装值及分频系数15141312111098ARR15:876543210ARR7:0 TIMx_ARR(TIM6和TIM7自动重装载寄存器)15141312111098PSC15:876543210PSC7:0 TIMx_PSC(TIM6和TIM7预分频器)(3) 设置TIM3_DIER允许更新中断15141312111098保留TDE 保留CC4DECC3DECC2DECC1DEUDE76543210保留TIE保留CC4IE

27、CC3IECC2IECC1IEUIE TIMx_DIER例如:TIM3->DIER|=1<<0; /允许更新中断 TIM3->DIER|=1<<6; /允许触发中断(4) 允许TIM3工作(使能TIM3) 15141312111098保留CKD1:076543210ARPECMS1:0DIR OPMURSUDISCEN TIMx_CR1例如:TIM3->CR1|=0x01; /使能定时器315141312111098保留CC4OFCC3OFCC2OFCC1OF保留76543210BIFTIFCOMIFCC4IFCC3IFCC2IFCC1IFUIF TI

28、Mx_SR该寄存器用来标记当前预定时器相关的各种事件/中断是否发生。UIF:更新中断标记,当产生更新事件时该位由硬件置1。例如:if(TIM3->SR&0X0001)/溢出中断(5) TIM3中断分组设置例如:MY_NVIC_Init(1,3,TIM3_IRQChannel,2);/抢占1,子优先级3,组2直接调用该函数就行(6) 编写中断服务程序例如:void TIM3_IRQHandler(void) if(TIM3->SR&0X0001)/溢出中断 LED1=!LED1; TIM3->SR&=(1<<0);/清除中断标志位 参考程序:

29、 void Timerx_Init(u16 arr,u16 psc) RCC->APB1ENR|=1<<1;/TIM3时钟使能 TIM3->ARR=arr; /设定计数器自动重装值/刚好1ms TIM3->PSC=psc; /预分频器7200,得到10Khz的计数时钟 /这两个东东要同时设置才可以使用中断 TIM3->DIER|=1<<0; /允许更新中断 TIM3->DIER|=1<<6; /允许触发中断 TIM3->CR1|=0x01; /使能定时器3 MY_NVIC_Init(1,3,TIM3_IRQChannel,

30、2);/抢占1,子优先级3,组2TIME2的CH2模式2的PWM输出:脉冲宽度调制模式可以产生一个由寄存器TIMx_ARR确定频率和由寄存器TIMx_CCRx确定其占空比的PWM波形;使能定时器:RCC->APB1ENR|=1<<0;/使能TIME2的时钟选择通道(共4个通道):在TIMx_CCMRx寄存器中的OCxM位写入110(PWM模式1)或111(PWM模式2);15141312111098OC2CEOC2M2:0OC2PEOC2FECC2S1:0IC2F3:0IC2PSC1:076543210OC1CEOC1M2:0OC1PEOC1FECC1S1:0IC1F3:0I

31、C1PSC1:0 TIMx_CCMR1(捕获/比较模式寄存器1) TIM2->CCMR1|=7<<12; /选择PWM模式2使能预装载寄存器:必须设置TIMx_CCMRx寄存器OCxPE位以使能相应的预装载寄存器;15141312111098OC2CEOC2M2:0OC2PEOC2FECC2S1:0IC2F3:0IC2PSC1:076543210OC1CEOC1M2:0OC1PEOC1FECC1S1:0IC1F3:0IC1PSC1:0 TIMx_CCMR1(捕获/比较模式寄存器1) TIM2->CCMR1|=1<<11; /使能预装载寄存器使能自动重装载的预

32、装载寄存器:最后还要设置TIMx_CR1寄存器的ARPE位,(在向上计数或中心对称模式中)使能自动重装载的预装载寄存器;15141312111098保留CKD1:076543210ARPECMS1:0DIR OPMURSUDISCEN TIMx_CR1 TIMx_CR1|=1<<7; /使能自动装载的预分频寄存器设置极性:OCx的极性可以通过软件在TIMx_CCER寄存器中的CCxP位设置,它可以设置为高电平有效或低电平有效。TIMx_CCER寄存器中的CCxE位控制OCx输出使能;15141312111098保留CC4PCC4E保留CC3PCC3E76543210保留CC2PCC

33、2E保留CC1PCC1E TIMx_CCER(捕获/比较使能寄存器) TIM2->CCER&=0X03; TIM2->CCMR|=1<<4; / /设置极性并输出时能 void Timerx2_Init(u16 arr,u16 psc) RCC->APB1ENR|=1<<0;/使能TIME2的时钟 TIM3->ARR=arr;/设定计数器自动重装值 TIM3->PSC=psc;/预分频器不分频 TIM2->CCMR1|=7<<12; /选择PWM模式2 TIM2->CCMR1|=1<<11; /使

34、能预装载寄存器 TIM2->CR1|=1<<7; /使能自动装载的预分频寄存器 TIM2->CR1|=1<<0; /使能定时器 / TIM2->CCER=0X3303; TIM2->CCER|=1<<4; /设置极性并输出时能 比如利用TIM3的通道TH3产生PWM输出: void PWM_Init(u16 arr,u16 psc) RCC->APB1ENR|=1<<1; /TIM3时钟使能 GPIOA->CRL&=0X0FFFFFFF;/PA7输出GPIOA->CRL|=0XB0000000;/

35、复用功能输出 GPIOA->ODR|=1<<7;/PA7上拉TIM3->ARR=arr;/设定计数器自动重装值 TIM3->PSC=psc;/预分频器不分频TIM3->CCMR1|=7<<12; /CH2 PWM2模式 TIM3->CCMR1|=1<<11; /CH2预装载使能 TIM3->CCER|=1<<4; /OC2 输出使能 TIM3->CR1=0x8000; /ARPE使能 TIM3->CR1|=0x01; /使能定时器3 其余几个定时器的PWM输出寄存器配置依次类推。以下子说明如何在TI

36、1 输入的上升沿时捕获计数器的值到TIM1_CCR1寄存器中,步骤如下:1、 使能TIM1时钟:15141312111098ADC3ENUSART1ENTIM8ENSPI1ENTIM1ENADC2ENADC1ENIOPGEN76543210IOPFENIOPEENIOPDENIOPCENIOPBENIOPAEN保留AFIOEN RCC_APB2ENR的015位(0632位保留) RCC->APB2ENR|=1<<11; /使能TIME1的时钟2、选择有效输入端: TIM1_CCMR1必须.接到TI1 输入,所以写入TIM1_CCMR1寄存器中的CC1S=01,一旦CC1S=0

37、1不为00时,通道被配置为输入,并且TIM1_CCMR1 寄存器变.只读。15141312111098OC2CEOC2M2:0OC2PEOC2FECC2S1:0IC2F3:0IC2PSC1:076543210OC1CEOC1M2:0OC1PEOC1FECC1S1:0IC1F3:0IC1PSC1:0 TIM1_CCMR1(捕获/比较模式寄存器1) TIM1->CCMR=0X01; /CC1通道选择输入,IC1映射在TI1上3、 根据输入信号的特点,配置输入滤波器为所需的带宽(输入为TI1时TIM1_CCMRx寄存器中的ICxF位)。假设输入信号在最多5 个时钟周期的时间内抖动,我们.配置滤

38、波器的带长于5个时钟周期。因此我们可以(以fDTS 频)连续采样8次,已确认在TI1上一次真实的边沿变换,即在TIM1_CCMR1寄存器中写入IC1F=0011.15141312111098OC2CEOC2M2:0OC2PEOC2FECC2S1:0IC2F3:0IC2PSC1:076543210OC1CEOC1M2:0OC1PEOC1FECC1S1:0IC1F3:0IC1PSC1:0 TIM1_CCMR1(捕获/比较模式寄存器1) TIM1->CCMR1|=3<<4; /4、 选择TI1 通道的有效转.边沿,在TIM1_CCER寄存器中写入CC1P=0(即上升沿)。15141

39、312111098保留CC4PCC4E保留CC3PCC3E76543210保留CC2PCC2E保留CC1PCC1E TIMx_CCER(捕获/比较使能寄存器) TIM1->CCER&=0<<1; 5、 配置输入预分频器。 在本中,我们希望捕获发生在每一个有效的电平转换时刻,因此预分频器被禁止(写TIM1_CCMR1 寄存器的IC1PS=00)。 15141312111098OC2CEOC2M2:0OC2PEOC2FECC2S1:0IC2F3:0IC2PSC1:076543210OC1CEOC1M2:0OC1PEOC1FECC1S1:0IC1F3:0IC1PSC1:0

40、TIM1_CCMR1(捕获/比较模式寄存器1) (见第二步)6、 设置TIM1_CCER 寄存器的CC1E=1,允许捕获计数器的值到捕获寄存器中。15141312111098保留CC4PCC4E保留CC3PCC3E76543210保留CC2PCC2E保留CC1PCC1E TIMx_CCER(捕获/比较使能寄存器) TIM1->CCER|=1<<0;7、如果需要,通过.置TIM1_DIER 寄存器中的CC1IE 位允许相关中断求,通过置TIM1_DIER寄存器中的CC1DE允许DAM请求。15141312111098保留TDECOMDECC4DECC3DECC2DECC1DEU

41、DE76543210BIETIECOMIECC4IECC3IECC2IECC1IEUIE TIMx_DIER(TIM1和TIM8 DMA/中断使能寄存器) TIM1->DIER|=1<<1; TIM1->DIER|=1<<0; 捕获函数: void Tim1_th1_cap_Init(u16 arr,u16 psc) RCC->APB2ENR|=1<<11; /使能TIME1的时钟 RCC->APB2ENR|=1<<2; /就是使能GPIOA的时钟 RCC->CHL&=0XFFFFFFF0; RCC->CHL|=0X00000004; /设置PA8为浮空输入 TIM1->ARR=arr;TIM1->PSC=psc; TIM1->CCMR1=0X01; /CC1通道选择输入,IC1映射在TI1上 TIM1->CCMR1|=3<<4; / TIM1->CCER&=0<<1; /上升沿触发 TIM1->CCER|=1<<0; /捕获使能 TIM1->DIER|=1<<1;

温馨提示

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

评论

0/150

提交评论