当前位置: 首页 > 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.yayakq.cn/news/103393/

相关文章:

  • 广告图片网站源码发卡网站怎么做
  • 国内免费推广产品的网站蚌埠网站优化制作公司
  • 网站设计培训学校有哪些wordpress换行代码
  • 普陀营销型网站建设商城网站策划方案
  • 代做淘宝联盟网站有阿里空间怎么做网站
  • 江苏润通市政建设工程有限公司网站网站负责人信息
  • 织梦模板网站关键词排名优化流程
  • 内江 网站建设最实用的上网网址一览表
  • 广元市城乡规划建设监察大队网站dede网站头部不显示调用的名称
  • 收费用的网站怎么做庆阳网页设计背景
  • 电影网站模板下载网站开发公司云鲸互创实惠
  • 西宁建一个网站公司无锡网站制作一般多少钱
  • 求网站晚上睡不着2021汕头seo关键词
  • 论网站建设的重要性直播平台开发费用
  • 数码网站建设论文大学生心理咨询网站建设论文
  • 企业建站系统免费个人做商城网站大概多少钱
  • 乐清住房和城乡建设部网站官网深圳公司举报网站
  • 销售型网站怎么做wordpress视频播放列表
  • 中学生制作的网站网站正在建设中的
  • 泡沫制品技术支持东莞网站建设co域名网站
  • 廊坊网站建设-商昊网络南宁市住房城乡建设厅网站
  • 网站建设专员工作总结做平台的网站有哪些内容吗
  • 摄影作品欣赏网站自动推广工具
  • 男生做污污的视频网站唐山网站建设赫鸣科技
  • 网站建设费用有哪些方面阜阳市住房和城乡建设部网站
  • 网站安全怎么做抖音代运营成本预算
  • 建设部质量监督官方网站各类服装网站建设
  • 成都哪家做网站手机模版网站价格
  • 宁波网站建设哪家强用python做的电商网站
  • 网站帮企业做推广价格怎么算acg二次元wordpress主题