牛人的STM32学习笔记(寄存器版本)(3)

2019-04-09 23:00

15 保留 7 保留 14 6 13 CC4P 5 CC2P 12 CC4E 4 CC2E 11 保留 3 保留 10 2 9 CC3P 1 CC1P 8 CC3E 0 CC1E

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; //使能预装载寄存器

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;//复用功能输出 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输出寄存器配置依次类推。

以下例子说明如何在TI1 输入的上升沿时捕获计数器的值到TIM1_CCR1寄存器中,步骤如下:

1、使能TIM1时钟:

15 ADC3EN 7 IOPFEN 14 13 USART1EN TIM8EN 6 5 IOPEEN IOPDEN 12 SPI1EN 4 IOPCEN 11 TIM1EN 3 IOPBEN 10 ADC2EN 2 IOPAEN 9 ADC1EN 1 保留 8 IOPGEN 0 AFIOEN

RCC_APB2ENR的0~15位(06~32位保留) RCC->APB2ENR|=1<<11; //使能TIME1的时钟 2、选择有效输入端:

TIM1_CCMR1必须.接到TI1 输入,所以写入TIM1_CCMR1寄存器中的CC1S=01,一旦CC1S=01不为00时,通道被配置为输入,并且TIM1_CCMR1 寄存器变.只读。

15 OC2CE 7 OC1CE 14 13 OC2M[2:0] IC2F[3:0] 6 5 OC1M[2:0] IC1F[3:0] 12 4 11 10 OC2PE OC2FE IC2PSC[1:0] 3 2 OC1PE OC1FE IC1PSC[1:0] 9 8 CC2S[1:0] 1 0 CC1S[1:0] TIM1_CCMR1(捕获/比较模式寄存器1)

TIM1->CCMR1=0X01; //CC1通道选择输入,IC1映射在TI1上

3、根据输入信号的特点,配置输入滤波器为所需的带宽(输入为TI1时TIM1_CCMRx寄存器中的ICxF位)。假设输入信号在最多5 个时钟周期的时间内抖动,我们.配置滤波器的带长于5个时钟周期。因此我们可以(以fDTS 频率)连续采样8次,已确认在TI1上一次真实的边沿变换,即在TIM1_CCMR1寄存器中写入IC1F=0011. 15 OC2CE 7 OC1CE 14 13 OC2M[2:0] IC2F[3:0] 6 5 OC1M[2:0] IC1F[3:0] 12 4 11 10 OC2PE OC2FE IC2PSC[1:0] 3 2 OC1PE OC1FE IC1PSC[1:0] 9 8 CC2S[1:0] 1 0 CC1S[1:0]

TIM1_CCMR1(捕获/比较模式寄存器1) TIM1->CCMR1|=3<<4; //

4、选择TI1 通道的有效转.边沿,在TIM1_CCER寄存器中写入CC1P=0(即上升沿)。 15 保留 7 保留

14 6 13 CC4P 5 CC2P 12 CC4E 4 CC2E 11 保留 3 保留 10 2 9 CC3P 1 CC1P 8 CC3E 0 CC1E TIMx_CCER(捕获/比较使能寄存器) TIM1->CCER&=0<<1; 5、配置输入预分频器。

在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预分频器被禁止(写TIM1_CCMR1 寄存器的IC1PS=00)。 15 OC2CE 7 OC1CE 14 13 OC2M[2:0] IC2F[3:0] 6 5 OC1M[2:0] IC1F[3:0] 12 4 11 10 OC2PE OC2FE IC2PSC[1:0] 3 2 OC1PE OC1FE IC1PSC[1:0] 9 8 CC2S[1:0] 1 0 CC1S[1:0]

TIM1_CCMR1(捕获/比较模式寄存器1) (见第二步)

6、设置TIM1_CCER 寄存器的CC1E=1,允许捕获计数器的值到捕获寄存器中。 15 保留 7 保留 14 6 13 CC4P 5 CC2P 12 CC4E 4 CC2E 11 保留 3 保留 10 2 9 CC3P 1 CC1P 8 CC3E 0 CC1E

TIMx_CCER(捕获/比较使能寄存器) TIM1->CCER|=1<<0; 7、如果需要,通过.置TIM1_DIER 寄存器中的CC1IE 位允许相关中断求,通过置TIM1_DIER寄存器中的CC1DE允许DAM请求。

15 保留 7 BIE 14 TDE 6 TIE 13 COMDE 5 COMIE 12 CC4DE 4 CC4IE 11 CC3DE 3 CC3IE 10 CC2DE 2 CC2IE 9 CC1DE 1 CC1IE 8 UDE 0 UIE 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; //允许捕获中断 TIM1->DIER|=1<<0; //允许更新中断

TIM1->CR1|=1<<0; //使能计数器1

MY_NVIC_Init(1,1,TIM1_IRQChannel,2); //抢占1,子1,组2 }

中断服务程序: 主函数:

五、SPI总线

SPI_CR寄存器的CPOL和CPHA位,能够组合成四种可能的时序关系。CPOL(时钟极性)位控制在没有数据传输时时钟的空闲状态电平,此位对主模式和从模式下的设备都有效。如果CPOL被清’0’,SCK引脚在空闲状态保持低电平;如果CPOL被置’1’,SCK引脚在空闲状态保持高电平。

如果CPHA(时钟相位)位被置’1’,SCK时钟的第二个边沿(CPOL位为0时就是下降沿,CPOL位为’1’时就是上升沿)进行数据位的采样,数据在第二个时钟边沿被锁。如果CPHA位被清’0’,SCK时钟的第一边沿(CPOL位为’0’时就是下降沿,CPOL位为’1’时就是上升沿)进行数据位采样,数据在第一个时钟边沿被锁存。

空闲SCK 0 1 第二个时钟边沿下降沿采样 第二个时钟边沿上升沿采样 第一个时钟边沿下降沿采样 第一个时钟边沿上升沿采样

SPI配置成主模式:

1、使能SPI时钟和PORTA时钟:

CPOL(时钟极性) 0 1 0 1 0 1 CPHA(时钟相位) 1 1 0 0 15 ADC3EN 7 IOPFEN 14 13 USART1EN TIM8EN 6 5 IOPEEN IOPDEN 12 SPI1EN 4 IOPCEN 11 TIM1EN 3 IOPBEN 10 ADC2EN 2 IOPAEN 9 ADC1EN 1 保留 8 IOPGEN 0 AFIOEN RCC_APB2ENR的0~15位(06~32位保留)

RCC->APB2ENR|=1<<2; //PORTA时钟使能 RCC->APB2ENR|=1<<12; //SPI1时钟使能 2、开全双工模式并软件管理NSS: 15 14 BIDIMODE BIDIOE 7 6 LSBFIRST SPE 13 CRCEN 5 12 11 CRCNEXT DFF 4 3 BR[2:0] 10 RXONLY 2 MSTR 9 SSM 1 CPOL SSI 8 0 CPHA

SPI控制寄存器1(SPI_CR1) SPI1->CR1|=0<<10;//全双工模式 SPI1->CR1|=1<<9; SPI1->CR1|=1<<8; //软件nss管理 3、设置SPI为主机并设置数据帧格式: 15 14 BIDIMODE BIDIOE 7 6 LSBFIRST SPE 13 CRCEN 5 12 11 CRCNEXT DFF 4 3 BR[2:0] 10 RXONLY 2 MSTR 9 SSM 1 CPOL SSI 8 0 CPHA


牛人的STM32学习笔记(寄存器版本)(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:罗代黑猪种质资源保护及繁育项目可行性研究报告 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: