免费做字体的网站好,广州市医院网站建设,怎么查icp备案号,2015做微网站多少钱文章目录 一、STM32定时器原理1、基本定时器2、通用定时器#xff08;1#xff09;时钟源#xff08;2#xff09;预分频器PSC#xff08;3#xff09;计数器CNT#xff08;4#xff09;自动装载寄存器ARR 3、高级定时器 二、PWM工作原理三、控制LED以2s的频率周期性地… 文章目录 一、STM32定时器原理1、基本定时器2、通用定时器1时钟源2预分频器PSC3计数器CNT4自动装载寄存器ARR 3、高级定时器 二、PWM工作原理三、控制LED以2s的频率周期性地亮-灭1、STM32CubeMX建立项目2、代码编写3、运行结果 四、STM32输出PWM完成呼吸灯1、STM32CubeMX建立项目2、代码编写3、运行结果4、逻辑分析仪 总结参考资料 一、STM32定时器原理
定时器就是计数器定时器的作用就是设置一个时间然后时间到后就会通过中断等方式通知STM32执行某些程序。定时器除了可以实现普通的定时功能还可以实现捕获脉冲宽度计算PWM占空比输出PWM波形编码器计数等。
STM32的定时器分为基本定时器、通用定时器和高等定时器。 1、基本定时器
功能作为时基定时功能。
2、通用定时器
STM32通用定时器TIMxx2345主要由时钟源、时钟单元、捕获和比较通道等构成核心是可编程预分频驱动的16位自动装载计数器。
1时钟源
当定时器使用内部时钟时定时器的时钟源统称为TIMxCLK。虽然在系统默认的配置中TIMxCLK的时钟频率都是72MHz但其时钟来源并不相同。
定时器TIM2~TIM7挂接在APB1上定时器TIM1和TIM8挂接在APB2上
若外部晶振的频率为8MHz则系统默认的时钟频率为72MHz
APB1预分频器的分频系数设置为2则PCLK136MHzAPB2预分频系数设置为1则PCLK272MHzTIM1和TIM8的时钟频率TIMxCLK72MHzCortex系统时钟由AHB时钟HCLK8分频得到即SysTick的频率为9MHz。
2预分频器PSC
可以以165535之间的任意数值对时钟源CK_PSC的时钟频率进行分频输出CK_CNT脉冲供计数器CNT进行计数。
3计数器CNT
TIMxCNT是一个16位的寄存器计数范围为165535可以向上计数、向下计数或向下向上双向计数。 要得到想要的计数值需要对输入时钟频率进行分频。 当计数值达到设定值时便产生溢出事件溢出时产生中断或DMA请求然后再由自动装载寄存器进行重新加载或更新。 计数器溢出中断属于软件中断执行相应的定时器中断服务程序。
4自动装载寄存器ARR
定时器的定时时间主要取决于定时周期和预分频因子计算公式为 定时时间ARR1×预分频值PSC1/输入时钟频率 或 TTIM_Period 1*TIM_Prescaler 1/TIMxCLK 这里ARR1是因为计数器都是从0开始计数的。
3、高级定时器
功能除具备通用定时器所有功能外还具备带死区控制的互补信号输出、刹车输入等功能 (可用于电机控制、数字电源设计等)。
二、PWM工作原理
PWMPulse Width Modulation脉冲宽度调制是一种利用脉冲宽度即占空比实现对模拟信号进行控制的技术即是对模拟信号电平进行数字表示的方法。 占空比Duty Cycle是指在一个周期内高电平时间占整个信号周期的百分比即高电平时间与周期的比值 占空比Tp/T
STM32的定时器除了TIM6和TIM7其他定时器都可以用来产生PWM输出STM32中每个定时器有4个输入通道TIMx_CH1~TIMx_CH4每个通道对应1个捕获/比较寄存器TIMx_CRRx将寄存器值和计数器值相比较通过比较结果输出高低电平从而得到PWM信号脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。 在PWM的一个周期内定时器从0开始向上计数在0-t1时间段定时器计数器TIMx_CNT值小于TIMx_CCRx值输出低电平 在t1-t2时间段定时器计数器TIMx_CNT值大于TIMx_CCRx值输出高电平 当定时器计数器的值TIMx_CNT达到ARR时定时器溢出重新从0开始向上计数如此循环。
三、控制LED以2s的频率周期性地亮-灭
使用STM32F103的 Tim2~Tim5其一定时器的某一个通道pin连接一个LED用定时器计数方式控制LED以2s的频率周期性地亮-灭。 引脚GPIOB14 定时器Tim2 1、STM32CubeMX建立项目
1配置RCC 2配置SYS 3选择GPIO引脚 4配置定时器Timer 5配置时钟树 由上文定时器定时时间的计算方法可知 TARR1×预分频值PSC1/输入时钟频率 此处 ARR6399 PSC4999 输入时钟频率16 T5000 x 6400/162000000us2s 6创建文件
2、代码编写
1在main文件的main函数中 /* USER CODE BEGIN 2 / … / USER CODE END 2 */之间加入该代码省略号部分 HAL_TIM_Base_Start_IT(htim2);2在main文件的main函数中 /* USER CODE BEGIN 4 / … / USER CODE END 4 */之间加入该代码省略号部分
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{static unsigned char ledState 0;if (htim (htim2)){if (ledState 0)HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_RESET);elseHAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_SET);ledState !ledState;}
}3、运行结果 四、STM32输出PWM完成呼吸灯
接上采用定时器PWM模式让 LED 以呼吸灯方式渐亮渐灭周期为1~2秒自己调整占空比变化到一个满意效果使用Keil虚拟示波器观察 PWM输出波形。
1、STM32CubeMX建立项目
1配置RCC 2配置SYS前两步与上述一致 3配置定时器Timer3 4配置时钟树 5创建文件
2、代码编写
main文件 占空比初始值为0如果小于500也就是PWM周期设置每隔1毫秒占空比加1如果大于500每隔一毫秒减1。 /* USER CODE BEGIN 1 */uint16_t pwmVal0; //PWM占空比 uint8_t dir1; /* USER CODE END 1 */ /* USER CODE BEGIN 2 */HAL_TIM_PWM_Start(htim3,TIM_CHANNEL_1);/* USER CODE END 2 */
while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */while (pwmVal 500){pwmVal;__HAL_TIM_SetCompare(htim3, TIM_CHANNEL_1, pwmVal); //修改比较值修改占空比
// TIM3-CCR1 pwmVal; 与上方相同HAL_Delay(1);}while (pwmVal){pwmVal--;__HAL_TIM_SetCompare(htim3, TIM_CHANNEL_1, pwmVal); //修改比较值修改占空比
// TIM3-CCR1 pwmVal; 与上方相同HAL_Delay(1);}HAL_Delay(200);}/* USER CODE END 3 */
3、运行结果 4、逻辑分析仪
波形 由波形变化可知 波形宽度由宽变窄又由窄变宽对应着LED灯的亮度由暗变亮又从亮变暗与实践结果一致
总结
通过本次实验了解到了可以使用定时器实现时间的控制和如何用PWM完成呼吸灯的设置开心
参考资料
https://blog.csdn.net/Morzart/article/details/134123197?spm1001.2014.3001.5506 https://blog.csdn.net/superSmart_Dong/article/details/134565102?spm1001.2014.3001.5506 https://blog.csdn.net/weixin_55376063/article/details/127595225?spm1001.2014.3001.5502