其他分享
首页 > 其他分享> > Keil MDK STM32系列(八) 基于抽象外设库HAL的PWM和定时器输出音频

Keil MDK STM32系列(八) 基于抽象外设库HAL的PWM和定时器输出音频

作者:互联网

Keil MDK 系列

配置STM32F401通过PWM和TIM输出音频

机制

配置STM32CubeMX

选择芯片STM32F401CCU6, 创建新项目

系统时钟

PWM(使用TIM2)

8KHz定时中断(使用TM3)

代码修改

通过STM32CubeMX生成代码后, 需要对main.c添加代码

/* USER CODE BEGIN PV */
uint8_t pwm_buf[] = {125, 125, ..., 126, 125}; // 这里是一个长数组, 可以自己通过工具生成
uint8_t *start = pwm_buf, *end = pwm_buf, *lb = pwm_buf, *rb = (pwm_buf + 27451); // 27451是数组长度
/* USER CODE END PV */

main函数

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM2_Init();
  MX_TIM3_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
  HAL_TIM_Base_Start_IT(&htim3);
  /* USER CODE END 2 */

  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
  }
}

添加定时器中断处理函数

/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if(htim->Instance==TIM3)
  {
    __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, *start++);
    if (start == rb) {
      start = lb;
    }
  }
}
/* USER CODE END 4 */

输出效果演示

https://www.bilibili.com/video/BV1pb4y1177L

标签:MDK,HAL,Keil,STM32,TIM,USER,PWM
来源: https://www.cnblogs.com/milton/p/15361189.html