NUCLEO-F446RE测试板验证DS100示波器功能
目录
概述
1 NUCLEO-F446RE开发板
1.1 认识NUCLEO-F446RE
1.2 功能介绍
2 STM32Cube配置工程
2.1 基本参数配置
2.2 配置PWM接口
2.2.1 配置PWM_CH2参数
2.2.2 配置TIMER-4: PWM_CH1参数
3.3 STM32Cube生成项目
3 PWM功能实现
3.1 代码介绍
3.2 测试代码
3.3 源代码文件
4 测试
5 结论
概述
本文主要介绍使用NUCLEO-F446RE测试板生成PWM波形,分别使用逻辑分析仪和示波器测试该波形的参数,验证DS100参数的准确性。
1 NUCLEO-F446RE开发板
1.1 认识NUCLEO-F446RE
STM32 Nucleo-64板为用户提供了一种经济实惠且灵活的方式,通过选择STM32微控制器提供的各种性能和功耗功能组合来尝试新概念和构建原型。对于兼容的单板,内置或外置SMPS在Run模式下可显著降低功耗。
ARDUINO®Uno V3连接支持和ST morpho头允许STM32 Nucleo开放开发平台的功能轻松扩展,具有广泛的专业屏蔽选择。
STM32 Nucleo-64板不需要任何单独的探头,因为它集成了ST-LINK调试器/编程器。
STM32 Nucleo-64板附带STM32全面的免费软件库和示例,可与STM32Cube MCU包一起使用。
1.2 功能介绍
MCU相关信息:
-
LQFP64或LQFP48封装中的STM32微控制器
1个用户LED与ARDUINO®共享
1个用户和1个复位按钮
32.768 kHz晶体振荡器-
板连接器:-
ARDUINO®Uno V3扩展连接器
用于完全访问所有STM32 I/ o的ST morpho扩展引脚头
灵活的电源选择:ST-LINK USB VBUS或外部电源
全面的免费软件库和示例可与STM32Cube MCU包
支持多种集成开发环境(ide),包括IAR嵌入式工作台®,MDK-ARM和STM32CubeIDE
-调试接口:
-
板载ST-LINK (STLINK/V2-1, STLINK- v3e, STLINK- v2ec或STLINK- v3ec)调试器/编程器,具有USB重新枚举功能:大容量存储,虚拟COM端口和调试端口
2 STM32Cube配置工程
2.1 基本参数配置
在Board Selector中选择板卡,系统会对硬件资源进行配置,包括:LED,按键,调试接口,UART接口,晶振等。
配置完成后会看见如下信息:
2.2 配置PWM接口
1) 配置定时器的时钟
系统定时器对应的时钟参数为: 85M Hz
2)选择PWM输出端口
PC7 ----------------------- TIMER-3: PWM-CH2
-
PB6 ----------------------- TIMER-4: PWM-CH1
其在MCU上的对应位置如下:
2.2.1 配置PWM_CH2参数
step-1: 选择端口和时钟
step-2: 配置参数
IO端口参数:
2.2.2 配置TIMER-4: PWM_CH1参数
step-1: 选择端口和时钟
step-2: 配置参数
IO端口配置
3.3 STM32Cube生成项目
3 PWM功能实现
3.1 代码介绍
设置TIMER-3 PWM的通道号和占空比
设置TIMER-4 PWM的通道号和占空比
3.2 测试代码
代码63行:启动定时器3
代码64行:启动定时器3对应的PWM
代码66行:启动定时器4
代码67行:启动定时器4对应的PWM
代码69行:设置定时器-3对应的PWM占空比
代码70行:设置定时器-4对应的PWM占空比
3.3 源代码文件
/* USER CODE BEGIN Header */
/**
******************************************************************************
* File Name : user_pwm.h
* Description : pwm driver base on stm32f446
******************************************************************************
* @attention
*
* COPYRIGHT: Copyright (c) 2024 tangminfei2013@126.com
* DATE: JUL 05th, 2024
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "user_pwm.h"
#include "tim.h"
#define PWM3_BASE_TIME htim3
#define PWM4_BASE_TIME htim4
static void HAL_TIM3_SetPWM_Pulse( uint32_t Pulse, uint32_t Channel)
{
TIM_OC_InitTypeDef sConfigOC = {0};
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = Pulse;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
if (HAL_TIM_PWM_ConfigChannel(&PWM3_BASE_TIME, &sConfigOC, Channel) != HAL_OK)
{
Error_Handler();
}
}
static void HAL_TIM4_SetPWM_Pulse( uint32_t Pulse, uint32_t Channel)
{
TIM_OC_InitTypeDef sConfigOC = {0};
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = Pulse;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
if (HAL_TIM_PWM_ConfigChannel(&PWM4_BASE_TIME, &sConfigOC, Channel) != HAL_OK)
{
Error_Handler();
}
}
void pwm_ctrl_Init( void )
{
HAL_TIM_Base_Start( &PWM3_BASE_TIME );
HAL_TIM_PWM_Start( &PWM3_BASE_TIME, TIM_CHANNEL_2); // PC7
HAL_TIM_Base_Start( &PWM4_BASE_TIME );
HAL_TIM_PWM_Start( &PWM4_BASE_TIME, TIM_CHANNEL_1); // PB6
HAL_TIM3_SetPWM_Pulse( 500, TIM_CHANNEL_2);
HAL_TIM4_SetPWM_Pulse( 500, TIM_CHANNEL_1);
}
/* End of this file */
4 测试
硬件测试环境如下:
编译代码,下载到板卡中,运行代码。
1) 使用逻辑分析仪捕捉波形,并验证其周期
波形参数如下:
1)占空比: 49.95%
2)频率:1.016k Hz
2) 使用DS100测试波形
波形参数如下:
1)占空比: 49.9%
2)频率:1.02k Hz
5 结论
通过使用逻辑分析仪和示波器分别测试PWM的波形参数,比较二者参数可得:DS100的测试精度还是可以的,其作为入门级的仪器还是能胜任的。