当前位置: 首页 > news >正文

泰州企业自助建站系统友情链接查询工具

泰州企业自助建站系统,友情链接查询工具,wordpress上传媒体,土木工程招聘网最新招聘信息一、初识定时器TIM 定时器就是计数器,定时器的作用就是设置一个时间,然后时间到后就会通过中断等方式通知STM32执行某些程序。定时器除了可以实现普通的定时功能,还可以实现捕获脉冲宽度,计算PWM占空比,输出PWM波形&am…

一、初识定时器TIM

        定时器就是计数器,定时器的作用就是设置一个时间,然后时间到后就会通过中断等方式通知STM32执行某些程序。定时器除了可以实现普通的定时功能,还可以实现捕获脉冲宽度,计算PWM占空比,输出PWM波形,编码器计数等。

STM32共11个定时器,2个高级控制定时器TIM1和TIM8,4个通用定时器TIM2~TIM5,两个基本定时器TIM6和TIM7,两个看门狗定时器和一个系统滴答定时器Systick.
高级定时器TIM1和TIM8的时钟由APB1产生,其它六个通用定时器的时钟由APB2产生。它们的最大频率都可以配置成系统时钟的频率。

定时器种类位数计数模式捕获/比较通道应用场景
通用定时器
TIM2~TIM5
16向上,向下,双向4定时计数,PWM,输入捕获,输出比较
高级定时器
TIM1和TIM8
16向上,向下,双向4在通用的基础上,多了刹车信号输入,死区时间互补输出等工业电机功能
基本定时器
TIM6和TIM7
16向上,向下,双向4定时计数

二、基本定时器

(1)计数功能原理

        在上一期文章提到,时钟树提供稳定频率的方波信号,APB1上的时钟线连接了基本定时器和通用寄存器,APB2上的时钟线连接了高级定时器。

        对于实现计数功能,只需要一个寄存器就可以满足,寄存器只需要读到时钟信号的上升沿数值就加1。假如72MHZ的时钟信号作为输入,当该寄存器数值累加到7.2*10^7,就代表时间过去了1秒。但是寄存器通常只有16bit,最多能计数 65536个数。因此在该寄存器前面还要加一个类似的计数器,当计数满足条件时才往后续电路发送高电平,预分频器就可以充当这个角色,其本质也是一个16bit的计数器。当只需要将其设置为n-1,就可以进行n分频,从0开始计数,一直计数到n-1才会向后续电路发送高电平。预分频器最多可以进行65536分频。因此一个由预分频器和一个计数器组合成的定时器,最多可以计数65536^2次。m个定时器串联,就可以计数65536^(2*m)次。 

(2) 自动重装载寄存器

         自动重装载寄存器,它的作用就是实时监控计数器的值是否与自己的值相同。当计数器的值与自己的值相同时,便将计数器重置为0,并触发定时器更新中断。

(3)影子寄存器

        所谓的影子寄存器就是某个寄存器的拷贝。在上图中工作在一线的预分频器和自动重装载寄存器其实都是自己的影子寄存器。当定时器正在工作时,如果重新设置预分频器值或者重新这是自动重装载寄存器的值,那么只有当计数器和自动重装载寄存器的值一样时才会将新值更新到自身影子寄存器中。也就是给定时器设置的新参数值要等下个计数周期才生效。

        自动重装载寄存器可以根据程序员选择是否开启影子寄存器。如果不开启,那么将自动重装载寄存器数值调小时,可能会错过计数器的值,使计数器一路上到65536才会归0。

三、定时程序

(1)准备工作

为了发送数据进行模拟,需打开USART2用于设置模式为“异步”,在NVIC Settings中打开中断,打上√,在DMA Settings,打开DMA传输功能,添加传输通道。

为提高计数精度,将外部时钟源设置为"晶振",在时钟设置界面中的HCLK的频率设置为72MHZ,自动调整其它器件的时钟频率。

对于我使用的STM32F108T6芯片只有4个定时器,即1个高级,3个通用寄存器。虽然没有基本定时器,但是这些定时器都包含了基本定时器功能。只需要对定时器的时钟源选择 Internal Clock (内部时钟源)就算打开了定时器。因为本次模拟的时钟频率是72MHZ,设置预分频器7200,自动重装载寄存器为10000,那么完成一个周期的计数就是1s,也就是1s触发一次定时器更新中断。同第一步类似,TIM也可以开启中断和DMA通道。保存并生成代码。

(2)实现定时任务和获取计数器数值:

以下示例代码为开启TIM中断和USART2中断实现,以及开启了自动重装载寄存器的影子寄存器

1.开启定时器

HAL_TIM_Base_Start(&htim);        //用阻塞的方式开始定时器

HAL_TIM_Base_Start_IT(&htim);        //用中断(非阻塞)的方式开始定时器

HAL_TIM_Base_Start_DMA(&htim);    //用DMA(非阻塞)的方式开始定时器

2.中断回调函数

在路径 ~/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c中

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

当计数器数值和自动重装载寄存器值一样时调用

3.读写定时器中寄存器的宏定义操作

__HAL_TIM_GET_ANTORELOAD //获取自动重装载寄存器数值

__HAL_TIM_SET_ANTORELOAD //设置自动重装载寄存器数值

__HAL_TIM_GET_COUNTER        //获取计数器数值

__HAL_TIM_SET_COUNTER        //设置计数器数值

__HAL_TIM_SET_PRESCALER    //设置预分频器数值

4.示例代码

/* USER CODE BEGIN Includes */
#include <string.h>
#include <stdio.h>
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*/
TIM_HandleTypeDef htim4;UART_HandleTypeDef huart2;
DMA_HandleTypeDef hdma_usart2_rx;
DMA_HandleTypeDef hdma_usart2_tx;/* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_DMA_Init(void);
static void MX_USART2_UART_Init(void);
static void MX_TIM4_Init(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
char message2[]="☺☹";
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){if(htim == &htim4){HAL_UART_Transmit_IT(&huart2, (uint8_t*)message2,strlen(message2));}
}
/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_DMA_Init();MX_USART2_UART_Init();//TIM4的初始化MX_TIM4_Init();/* USER CODE BEGIN 2 *///用中断的方式开启定时器HAL_TIM_Base_Start_IT(&htim4);int counter = 0;char message[20];/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){counter = __HAL_TIM_GET_COUNTER(&htim4);sprintf(message,"counter:%d",counter);//每隔100ms发送 counter计数器数值//HAL_UART_Transmit_IT(&huart2, (uint8_t*)message,strlen(message));//延迟100msHAL_Delay(100-1);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

http://www.fp688.cn/news/160554.html

相关文章:

  • 做网站的软件去哪里买优化营商环境心得体会个人
  • 红河做网站的公司软文推广是什么
  • 做擦边球的网站营销广告文案
  • 网站关键词优化实验结果分析免费外链工具
  • 要服务网站建设推广网页
  • window7用jsp做的网站要什么工具线上免费推广平台都有哪些
  • 装修公司口碑好的公司seo资料网
  • 无锡网站开发公司哈尔滨网络公司
  • 建筑材料批发网站和生活app下载安装最新版
  • 网站建设公司市场策划方案企业培训考试
  • 南京网站维护公司有哪些百度链接
  • 举报网站建设工作总结网站搜索优化官网
  • 女性做网站站长工具查询网
  • 一流的网站建设哪家好什么是软文推广
  • 毕业设计代做网站机械成都排名推广
  • 建设部网站关于公租房网站服务器多少钱一年
  • 兰州做网站网站链接交易
  • 东莞东城网站建设公司网络推广的细节
  • 做视频网站需要什么苏州排名搜索优化
  • 苏州高端网站制作机构seo是什么意思 职业
  • 做网站 异地域名核心关键词和长尾关键词举例
  • 赣州网站建设-赣州做网站南宁百度推广代理商
  • 重庆中技互联seo优化排名经验
  • 属于免费的网络营销方式西安关键词优化服务
  • 网站公安备案公告深圳推广公司排行榜
  • seo网站描述黑帽seo培训多少钱
  • 做威客的网站百度seo sem
  • 怎么搜索网站内容新东方雅思培训机构官网
  • 免费的企业建站cms网络营销的方式和手段
  • 网站开发的合同电子商务seo是什么意思