NUCLEO-F722ZE PWM 输出
通过 UART 接收到底信息,来调节PWM的输出
配置,选择TIM1 CHI 通道来输出
配置好后生成工程,打开工程。
在 main.c 中添加如下
#include “stdio.h”
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
使得 printf() 函数能够通过 串口UART 输出。
UART 接收中断函数,注意 串口初始化后要通过
HAL_UART_Receive_IT(&huart1,ucReceiveData,3);
开启接收中断
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance==USART1)
{
if((ucReceiveData[0] == 0xFE)&&(ucReceiveData[2] == 0xFE))
{
Flag_Change = 1;
ulPulse = ucReceiveData[1];
}
}
}
处理接收到的数据,也就是占空比了。接收到数据后,将 Falg_Change 置 1 ,表示接收到了有效数据。
在 main 函数中添加如下内容:
//开启 PWM 输出
if (HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
while (1)
{
if(Flag_Change) //判断是否接收到数据
{
//接收到了数据,并开始更改 PWM 的占空比,首先先停止 PWM
if (HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
//重新配置PWM
sConfigOC.Pulse = 9999*ulPulse/100;
if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
//开启 PWM 输出
if (HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
Flag_Change = 0; //完成后将 Flag_Change 复位
//串口反馈
printf("** the duty is %d ** \r\n",ulPulse);
//重新开启接收中断
HAL_UART_Receive_IT(&huart1,ucReceiveData,3);
}
HAL_Delay(500);
}
测试:通过串口 占空比 0~100% 可调节
默认占空比 50% 输出波形
通过串口 发送 0xFE 0x01 0xFE 调节占空比位 1% 输出波形
通过串口 发送 0xFE 0x0A 0xFE 调节占空比位 10% 输出波形
通过串口 发送 0xFE 0x14 0xFE 调节占空比位 20% 输出波形
通过串口 发送 0xFE 0x32 0xFE 调节占空比位 50% 输出波形
通过串口 发送 0xFE 0x50 0xFE 调节占空比位 80% 输出波形
通过串口 发送 0xFE 0x01 0xFE 调节占空比位 100% 输出波形
whik 2019-6-6 11:23
测量无处不在 2019-6-6 08:34
curton 2019-6-5 20:49