本例程是使用STM32CubeMX 6.5版本生成带代码
测试单片机型号:STM32F103VET6
- 时钟设置72MHZ
- - 使用定时器1的通道1 和 通道2 配置PWM互补输出
- 分频72分频(定时器频率为 72MHZ / 72 = 1MHZ),计数周期1000,也就是计数到1000溢出,所以,PWM频率就是1KHZ,周期是1ms (1s / 1000)
- PWM占空比设置
注意: 红框是占空比设置,也就是比较器寄存器和计数器寄存器的数值所比较,相同后翻转引脚(大致就是这个意思)其它不要动
最后生成代码,生成的代码在 main 函数中添加一下几个函数,即可成功运行
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();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_TIM1_Init();
MX_ADC1_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); //启动 PWM 通道1信号输出
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2); //启动 PWM 通道2信号输出
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1); //启动 PWM 通道1 互补信号输出
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2); //启动 PWM 通道2 互补信号输出
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,200); //设置 PWM 通道1 占空比
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,800); //设置 PWM 通道2 占空比
printf("start up\n");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
实际照片