NUCLEO-L053R8 TIM定时器 PWM输出
TIM2 PWM输出测试
今天给大伙分享一个TIM2 PWM输出小实验。
实验开发板:Nucleo-L053R8,即STM32L053R8T6。
开发环境:MDK5
图1 - 工程界面
本次实验测试的是通用定时器TIM2,PWM输出模式。
附上代码:
bsp_tim.h
/**
******************************************************************************
* File Name : bsp_tim.h
* Description : This file provides code for the configuration
* of the TIM instances.
******************************************************************************
*/
#ifndef __BSP_TIM_H
#define __BSP_TIM_H #include "stm32l0xx_hal.h" // 使用宏定义,代码易于移植 #define TIM_CH1_PORT GPIOA
#define TIM_CH1_PIN GPIO_PIN_0 #define TIM_x TIM2
#define TIM_CHANNEL_x TIM_CHANNEL_1
#define TIM_CLK_ENABLE __HAL_RCC_TIM2_CLK_ENABLE() // PWM信号的频率 F = TIM_CLK/((ARR+1)*(PSC+1))
#define TIM_PSC (1-1)
#define TIM_PERIOD (200-1)
#define TIM_PULSE 100 extern void _Error_Handler(void);
void HAL_TIM2_Init(void); #endif /* __BSP_TIM_H */
bsp_tim.c
/**
******************************************************************************
* File Name : bsp_tim.c
* Description : This file provides code for the configuration
* of the TIM instances.
******************************************************************************
*/ #include "bsp_tim.h" static void HAL_TIM2_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct; // TIM2_PWM输出GPIO初始化 PA0 ----> TIM2_CH1
GPIO_InitStruct.Pin = TIM_CH1_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF2_TIM2;
HAL_GPIO_Init(TIM_CH1_PORT, &GPIO_InitStruct);
} static void HAL_TIM2_Mode_Config(void)
{
TIM_HandleTypeDef TIM_HandleStruct;
TIM_MasterConfigTypeDef TIM_MasterStruct;
TIM_OC_InitTypeDef TIM_OC_InitStruct; // 开启定时器时钟
TIM_CLK_ENABLE; TIM_HandleStruct.Instance = TIM_x;
TIM_HandleStruct.Init.Prescaler = TIM_PSC;
TIM_HandleStruct.Init.CounterMode = TIM_COUNTERMODE_UP;
TIM_HandleStruct.Init.Period = TIM_PERIOD;
TIM_HandleStruct.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if (HAL_TIM_PWM_Init(&TIM_HandleStruct) != HAL_OK)
{
_Error_Handler();
} TIM_MasterStruct.MasterOutputTrigger = TIM_TRGO_RESET;
TIM_MasterStruct.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&TIM_HandleStruct, &TIM_MasterStruct) != HAL_OK)
{
_Error_Handler();
} TIM_OC_InitStruct.OCMode = TIM_OCMODE_PWM1;
TIM_OC_InitStruct.Pulse = TIM_PULSE;
TIM_OC_InitStruct.OCPolarity = TIM_OCPOLARITY_HIGH;
TIM_OC_InitStruct.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&TIM_HandleStruct, &TIM_OC_InitStruct, TIM_CHANNEL_x) != HAL_OK)
{
_Error_Handler();
} HAL_TIM_PWM_Start(&TIM_HandleStruct, TIM_CHANNEL_x);
} void HAL_TIM2_Init(void)
{
HAL_TIM2_GPIO_Config();
HAL_TIM2_Mode_Config();
}
main.c
/**
******************************************************************************
* @file main.c
* @author Tuple
* @brief Main program body
******************************************************************************
*/ #include "stm32l0xx_hal.h"
#include "bsp_tim.h" void _Error_Handler(void);
void SystemClock_Config(void); int main(void)
{
//重置所有外围设备,初始化Flash接口和Systick
HAL_Init(); //系统时钟配置
SystemClock_Config(); //TIM2 PWM输出配置
HAL_TIM2_Init(); } void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct; //Configure the main internal regulator output voltage
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); //Initializes the CPU, AHB and APB busses clocks
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = ;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_4;
RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
_Error_Handler();
} //Initializes the CPU, AHB and APB busses clocks
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
{
_Error_Handler();
} HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_SYSCLK, RCC_MCODIV_1); //Configure the Systick interrupt time
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/); //Configure the Systick
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); //SysTick_IRQn interrupt configuration
HAL_NVIC_SetPriority(SysTick_IRQn, , );
} void _Error_Handler()
{
while()
{
}
}
如果你不清楚Nucleo板子上PA0在哪个引脚,请查阅RCC时钟配置实验的Figure 20 --> Figure 20.NUCLEO-L053R8
用两根杜邦线从Nucleo板子上引出PA0、GND,然后用数字示波器来监控PWM输出。实物连接如下:
图2 - 实物连接图
把编译好的程序下载到Nucleo开发板,PWM输出设置成不同的占空比,用示波器监控 PWM输出的波形。下面给大伙展示3组不同占空比的PWM输出波形:
图3 - 占空比25%的PWM波形
图4 - 占空比50%的PWM波形
图5 - 占空比75%的PWM波形
NUCLEO-L053R8 TIM定时器 PWM输出的更多相关文章
- (五)转载:通用定时器PWM输出
1. TIMER输出PWM基本概念 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有 ...
- STM32(7)——通用定时器PWM输出
1.TIMER输出PWM基本概念 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种 ...
- STM32F103ZET6 PWM输出
1.通用定时器的PWM功能 STM32F103ZET6有4个通用定时器,分别是TIM2.TIM3.TIM4.TIM5. 通用定时器由一个可编程预分频器驱动的16位自动装载计数器构成. 通用定时器的很多 ...
- 定时器TIM,pwm
一.定时器 1. 定义 设置等待时间,到达后则执行指定操作的硬件. 2. STM32F407的定时器有以下特征 具有基本的定时功能,也有PWM输出(灯光控制.电机的转速).脉冲捕获功能( ...
- 合宙AIR105(三): 定时器, 定时器中断和PWM输出
目录 合宙AIR105(一): Keil MDK开发环境, DAP-Link 烧录和调试 合宙AIR105(二): 时钟设置和延迟函数 合宙AIR105(三): 定时器, 定时器中断和PWM输出 Ai ...
- 关于普通定时器与高级定时器的 PWM输出的初始化的区别
不管是普通定时器还是高级定时器,你用哪个通道,就在程序里用OC多少.比如CH3对应OC3 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_ ...
- STM32 HAL库学习系列第4篇 定时器TIM----- 开始定时器与PWM输出配置
基本流程: 1.配置定时器 2.开启定时器 3.动态改变pwm输出,改变值 HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); 函数总结: __HAL_TIM ...
- 基于STM32F429和Cube的主从定时器多通道输出固定个数的PWM波形
主从定时器的原理已在上篇博文: 基于STM32F429+HAL库编写的定时器主从门控模式级联输出固定个数PWM脉冲的程序 讲解了,这篇重点就讲如何实现多通道的PWM级联输出. 1.软件环境 Keil5 ...
- STM32F0使用LL库实现PWM输出
在本次项目中,限于空间要求我们选用了STM32F030F4作为控制芯片.这款MCU不但封装紧凑,而且自带的Flash空间也非常有限,所以我们选择了LL库实现.本文我们将说明如何通过LL库实现PWM信号 ...
随机推荐
- C# 转换运算符:implicit(隐式),explicit(显示)
//A类 class Cls1 { public string name; //构造函数 public Cls1(string name) { this.name = name; } //implic ...
- editplus 格式化 js、html、xml、css
没有文件扩展”js”的脚本引擎的问题的解决办法 解决办法如下: 打开注册表编辑器,定位"HKEY_CLASSES_ROOT" > ".js" 这一项,双击 ...
- AutoHotkey的函数对象的Bind方法绑定参数的应用
近期在写Excel数据批处理函数,想提取某列的每个数据是否匹配某某条件的所有单元格. 这种需求比较多,比如判断的值有:单元格值,字体颜色,单元格颜色等等, 判断条件有:相同,不同,正则,或在某多行字符 ...
- eigenMatrix
#include <iostream> using namespace std; #include <ctime> // Eigen 部分 #include <Eigen ...
- Improving cache consistency redis和db的一致性维护
From http://simongui.github.io/2016/12/02/improving-cache-consistency.html A typically web applicat ...
- 在Kubernetes上运行SAP UI5应用(下): 一个例子体会Kubernetes内容器的高可用性和弹性伸缩
上一篇文章 在Kubernetes上运行SAP UI5应用(上),我介绍了如何在Docker里运行一个简单的SAP UI5应用,并且已经成功地将一个包含了这个UI5应用的docker镜像上传到Dock ...
- SDR窃听-监听空中的无线电
A GSM HACK的另一种方法:RTL-SDR 0x00 背景 文中所有内容仅供学习研究,请勿用于非法用途.在绝大多数国家里非法窃听都是严重非法行为. 本文内容只讨论GSM数据的截获,不讨论破解. ...
- 022configparser模块
#配置模块 #创建import configparser config = configparser.ConfigParser() #添加config["DEFAULT"] ...
- git init新建仓库并上传到远端
git init git add README.md git commit -m "first commit" git remote add origin https://gith ...
- Educational Codeforces Round 56 (Rated for Div. 2) D. Beautiful Graph 【规律 && DFS】
传送门:http://codeforces.com/contest/1093/problem/D D. Beautiful Graph time limit per test 2 seconds me ...