简介:
感谢社区提供的板卡评测机会,板子收到后一直没来得及研究,按照视频教程先使用PWM板子输出控制台灯灯条亮度。本次试验供电模块及MOS管按照视频资料链接购买的,灯条从家里闲置的台灯上拆除下来使用。
PWM 输出配置
PWM 的初始化配置 只要在STM32CubeMX 简单配置即可生成 对应通路的初始化配置代码。PWM配置如下。
TIM2 的PWM 通路输出的PAD为PA6
对应在板子的PIN脚如下
按照资料的方式连接电路。
功能验证
硬件接线连接完毕后,我们在代码中添加PWM 初始化配置,及按键按下更新PWM 占空比代码。
初始化代码如下
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(); /* Config code for STM32_WPAN (HSE Tuning must be done before system clock configuration) */ MX_APPE_Config(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* Configure the peripherals common clocks */ PeriphCommonClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_GPDMA1_Init(); MX_RAMCFG_Init(); MX_RTC_Init(); MX_RNG_Init(); MX_ICACHE_Init(); MX_TIM2_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,00); /* USER CODE END 2 */ /* Init code for STM32_WPAN */ MX_APPE_Init(NULL); /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ MX_APPE_Process(); /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }
在按键回调中更新PWM 输出占空比。
extern TIM_HandleTypeDef htim2; static void Button_TriggerActions(void *arg) { ButtonDesc_t *p_buttonDesc = arg; p_buttonDesc->longPressed = BSP_PB_GetState(p_buttonDesc->button); static uint32_t pwm = 0; pwm += 99; if(pwm >= 1000) pwm = 0; __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,pwm); LOG_INFO_APP("Button %d pressed\n", (p_buttonDesc->button + 1)); switch (p_buttonDesc->button) { case B1: UTIL_SEQ_SetTask(1U << TASK_BUTTON_1, CFG_SEQ_PRIO_0); break; case B2: UTIL_SEQ_SetTask(1U << TASK_BUTTON_2, CFG_SEQ_PRIO_0); break; case B3: UTIL_SEQ_SetTask(1U << TASK_BUTTON_3, CFG_SEQ_PRIO_0); break; default: break; } return; } #endif /* USER CODE END FD_LOCAL_FUNCTIONS */ /************************************************************* * * WRAP FUNCTIONS * *************************************************************/ void UTIL_SEQ_Idle( void ) { #if ( CFG_LPM_LEVEL != 0) HAL_SuspendTick(); UTIL_LPM_EnterLowPower(); HAL_ResumeTick(); #endif /* CFG_LPM_LEVEL */ return; }
上电后灯条已经被点亮,示波器查看PA6波形也已经正确输出了PWM信号。
通过板子上的按键也按照预期的调节灯条亮度