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

梧州推广网站服务商急招程序员

梧州推广网站服务商,急招程序员,苏州建设工程质量监督网站,淘宝客源码程序 爱淘宝风格+程序自动采集商品 淘宝客网站模板一、初识定时器TIM 定时器就是计数器#xff0c;定时器的作用就是设置一个时间#xff0c;然后时间到后就会通过中断等方式通知STM32执行某些程序。定时器除了可以实现普通的定时功能#xff0c;还可以实现捕获脉冲宽度#xff0c;计算PWM占空比#xff0c;输出PWM波形定时器的作用就是设置一个时间然后时间到后就会通过中断等方式通知STM32执行某些程序。定时器除了可以实现普通的定时功能还可以实现捕获脉冲宽度计算PWM占空比输出PWM波形编码器计数等。 STM32共11个定时器2个高级控制定时器TIM1和TIM84个通用定时器TIM2~TIM5两个基本定时器TIM6和TIM7两个看门狗定时器和一个系统滴答定时器Systick. 高级定时器TIM1和TIM8的时钟由APB1产生其它六个通用定时器的时钟由APB2产生。它们的最大频率都可以配置成系统时钟的频率。 定时器种类位数计数模式捕获/比较通道应用场景通用定时器 TIM2~TIM516向上向下双向4定时计数PWM,输入捕获输出比较高级定时器 TIM1和TIM816向上向下双向4在通用的基础上多了刹车信号输入死区时间互补输出等工业电机功能基本定时器 TIM6和TIM716向上向下双向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.hkea.cn/news/14401890/

相关文章:

  • 赌求网站开发html5制作网站
  • 沈阳大东区做网站公司上海网站建设代码
  • 装修效果图网站网站建设设计方案书
  • 学做凉菜冷菜的网站天津定制网站建设商店设计
  • 河南省住房建设厅官方网站广告设计公司朋友圈文案
  • 网站站点断开wordpress难吗
  • 专业电子商务网站建设淘宝付费推广
  • 在服务器上布网站怎么做wordpress是什么需要
  • 十个实用网站网址兰溪建设局网站
  • 上海网站建设服务商个人logo设计图片
  • 恒基建设集团网站地址手机网站服务器
  • 自己做的网站邮箱更改密码程序为什么总出错互联网行业最有前景的十大职业
  • 佛山 做网站公司有哪些电商如何推广
  • 格尔木有做网站的吗海珠区建网站
  • html 网站新功能介绍定制网站开发公司电话
  • 深圳观澜网站建设sem是什么仪器
  • 济南做微网站推广郑州网站建设专业公司
  • 单页手机网站源码wordpress is tag
  • 酒店网站建设价格宁波专业的网站建设
  • 先备案 做网站关键对话
  • 云南省建设厅网站二建河北邢台重大新闻
  • 湛江网站建设价格wordpress中文广告
  • 中山一站式营销推广平台子目录安装wordpress
  • seo站内站怎么做广州公司注册地址提供
  • 网站admin目录名怎么改专业网站建设联系电话
  • 站长工具权重局域网内服务器做网站
  • h5可以用什么网站做wordpress 门户模板下载
  • 宁波seo专员seo推广沧州公司电话
  • 企业如何进行网站备案用手机可以做网站吗
  • 南宁企业网站制作哪家好wordpress大型站点