STM32F4外设学习篇(一)

(这里仅对部分外设最基础的概念和操作列出,寄存器也只是列出一部分,详细的学习请参考官方手册和查看源码学习)
对于外设使用,一般需要了解外设的基本概念和原理,了解相关寄存器。
使用时,首先初始化时钟,接着初始化(配置)外设,如果使用到GPIO要初始化相应端口并复用为对应功能,最后如果需要使用中断,应当开启中断,编写中断处理函数。
初始化完成后我们就可以在主逻辑代码中利用相应的库函数使用相应的外设完成我们的功能需求。

一、定时器:

1、前言: STM32F4具有14个定时器,TIM1和TIM8为高级定时器,TIM2 ~ TIM5、TIM9 ~ TIM14为通用定时器,TIM6和TIM7为基本定时器。
定时的基本原理是利用时钟信号,对预设的计数装载值进行倒计数,计数至0产生溢出,可以重装载计数值,这样利用装载的计数值和具体时钟频率就可以知道计数时间了。

通用TIMx定时器功能包括:
● 16位/32位(仅TIM2和TIM5)向上、向下、向上/向下自动装载计数器,TIM9 ~ TIM14只支持向上。
● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1 ~65536之间的任意数值
● 4个独立通道(TIMx_CH1~4,其中TIM9 ~ TIM14最多2个通道)可以用作如下功能:
─ 输入捕获
─ 输出比较
─ PWM生成(边缘或中间对齐模式)
─ 单脉冲模式输出
● 使用外部信号控制定时器和定时器互连的同步电路
● 如下事件发生时产生中断/DMA:
更新: 计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
─ 输入捕获
─ 输出比较

─ 支持针对定位的增量(正交)编码器和霍尔传感器电路(TIM9 ~ TIM14不支持)
─ 触发输入作为外部时钟或者按周期的电流管理(TIM9 ~ TIM14不支持)

2、关键寄存器(通用计时器):
TIMx_CR1: 控制寄存器,比如最低位CEN计数器使能位,控制寄存器的开始计数。
TIMx_DIER: DMA/中断使能寄存器,比如最低位的更新中断允许位UIE,可以设置允许由于更新事件产生的中断。
TIMx_PSC: 预分频寄存器,设置时钟分频因子提供给计数器作为计数器时钟。
TIMx_SMCR: 从模式控制器,可以设置定时器的时钟来源。
TIMx_CNT: 计数器,存储了当前计数器的计数值。
TIMx_ARR: 自动重装载寄存器,存在影子寄存器,可以简单当成将一个寄存器分为两个,影子寄存器不可见(不可操作,实际起作用的寄存器),预设的值可以与影子寄存器实时相通,也可以设置为仅更新发生时才将值传递到影子寄存器。
TIMx_SR: 状态寄存器,标记各种事件和中断是否发生。

3、库函数操作:
下面的代码完成对定时器3的初始化以及使能了定时器更新中断,对于更新事件发生后的中断处理可以在stm32f4xx_it.c文件中编写相应的中断处理函数。

//通用定时器3中断初始化
//arr:自动重装值。
//psc:时钟预分频数
//定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
//Ft=定时器工作频率,即输入时钟频率,单位:Mhz
//这里使用的是定时器3!

void TIM3_Int_Init(u16 arr,u16 psc)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);  ///使能TIM3时钟
	
	TIM_TimeBaseInitStructure.TIM_Period = arr; 	//自动重装载值
	TIM_TimeBaseInitStr
  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值