• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

STM32弄一个的音乐播放器,用PWM控制蜂鸣器

武飞扬头像
Bitter tea seeds
帮助1

目录

效果展示 

前言

        一、设计背景

        1.1、知识储备 

        二、系统设计方案

        2.1、实现功能 

        2.2、硬件部分

        2.3、软件部分 

        三、软件设计

         3.1、设计流程图

         3.2、音乐频率的设置

         3.3、编程主要思路

        四、程序设计  


效果展示 

基于STM32用PWM控制蜂鸣器


前言

        音乐播放器项目,我使用PWM输出捕获的方式控制无源蜂鸣器响,这样可以解放主函数的空间,用来控制其他外设。 (PWM的介绍在STM32学习笔记中我做了详细的介绍和应用实例)

        一、设计背景

        1.1、知识储备 

        用到了蜂鸣器、独立按键、LED、PWM输出捕获、引脚重映射、定时器中断等方面的知识。同时还要了解STM32内部时钟树,我用到的开发工具有:STM32 CubeMX和MDK kile5,并且使用的是HAL库进行的编程。为什么不用标准库主要是因为,HAL库是ST公司一直维护和支持更新的库,它的支持性更好,标准库在2011年就已经停止了维护,但是HAL库的调用更抽象,所以我在学习时用标准库,更加形象具体,能快速的打好基础,而做项目则用的HAL库,可以用cubeMX进行图形化编程,效率更高。两种库各有利弊,不存在谁好谁坏。 而且HAL库只是支持ST公司的单片机,这变相限制了开发移植性。

        二、系统设计方案

        2.1、实现功能 

        1.开发板通电,蜂鸣器能正常播放音乐;

        2.通过按键可以向前\向后切换歌曲;

        3.LED指示灯随着按键的按下进行翻转指示;

        2.2、硬件部分

        使用的是正点原子精英开发板,芯片是STM32F103ZET6,内部时钟为72M。蜂鸣器是无源蜂鸣器,无内部振荡电路,可以改变其频率,使其播放音乐。独立按键控制音乐的播放并且可以切歌。LED做为指示灯,用来判断独立按键是否按下。

        2.3、软件部分 

        PE5、PB5为LED引脚,PB7为PWM输出捕获引脚(TIM4、CH2),PE3、PE4为独立按键控制引脚(开启中断),开启定时器TIM2;

学新通

学新通
时钟树设置

        三、软件设计

         3.1、设计流程图

学新通

         3.2、音乐频率的设置

        这个项目的难点就是设置音乐频率,按照我之前使用51单片机制作音乐播放器的经验,音乐频率,主要是音乐的音符,音调和节拍之间的关系。

        音符决定发音单元,音调决定音量的高低,节拍决定音符发音的时间长短。

学新通

         3.3、编程主要思路

        因为我采用PWM和定时器控制蜂鸣器,主要关系是这样的:定时器把握音乐的节拍,PWM把握音调和音符。

        还是得说一下PWM。PWM 周期由定时器分频系数和重装载值共同决定,STM32F103ZET6的主频为72MHZ,设置分频为9,所以最大是8MHZ。而我们所需要的最小频率是262HZ,所以我们只需要计算得到的重装载值不大于定时器的重装载最大值(65535)即可。 

        所以每次转换音符时,动态修改重装载值即可实现 PWM 输出频率的变化,进而控制无源蜂鸣器发声。定时器将进行 ms 中断,判断每拍时间是否到达,到达则播放下一拍。 

        四、程序设计  


 篇幅有限,只能展示部分代码,需要全部代码,请私信博主,谢谢。

music.c程序如下: 

  1.  
    #include "music.h"
  2.  
     
  3.  
    uint16_t C_FREQ[]={0,262,294,330,349,392,440,
  4.  
    494,523,587,659,698,784,880,988,
  5.  
    1046,1175,1318,1397,1568,1760,1976};
  6.  
     
  7.  
    /*-------------------两只老虎--------------------*/
  8.  
     
  9.  
    /*频率*/
  10.  
    uint8_t music_two_tiger_f[]={
  11.  
    1,2,3,1,
  12.  
    1,2,3,1,
  13.  
    3,4,5,
  14.  
    3,4,5,
  15.  
    5,6,5,6,3,1,
  16.  
    5,6,5,4,3,1,
  17.  
    1,5,1,
  18.  
    1,5,1,
  19.  
    };
  20.  
     
  21.  
    /*1/4拍长*/
  22.  
    u16 music_two_tiger_t_echo=150;
  23.  
     
  24.  
    /*长度*/
  25.  
    u16 music_two_tiger_len=(sizeof(music_two_tiger_f)/sizeof(uint8_t));
  26.  
     
  27.  
    /*拍长*/
  28.  
    uint8_t music_two_tiger_t[]={
  29.  
    P_1,P_1,P_1,P_1,
  30.  
    P_1,P_1,P_1,P_1,
  31.  
    P_1,P_1,P_2,
  32.  
    P_1,P_1,P_2,
  33.  
    P_4_3,P_4_1,P_4_3,P_4_1,P_1,P_1,
  34.  
    P_4_3,P_4_1,P_4_3,P_4_1,P_1,P_1,
  35.  
    P_1,P_1,P_2,
  36.  
    P_1,P_1,P_2,
  37.  
    };
  38.  
     
  39.  
    /*-------------------春节序曲--------------------*/
  40.  
     
  41.  
    /*频率*/
  42.  
    uint8_t music_happy_newyear_f[]={
  43.  
    3,2,3,5,5,6,
  44.  
    7,6,7,7,
  45.  
    3,7,6,5,3,5,
  46.  
    6,5,6,5,
  47.  
    5,6,1,6,1,2,
  48.  
    1,6,5,3,
  49.  
    5,6,1,2,1,7,
  50.  
    6,5,6,5,
  51.  
    3,2,3,5,5,6,
  52.  
    1,6,3,1,
  53.  
    };
  54.  
     
  55.  
    /*1/4拍长*/
  56.  
    u16 music_happy_newyear_t_echo=200;
  57.  
     
  58.  
    /*长度*/
  59.  
    u16 music_happy_newyear_len=(sizeof(music_happy_newyear_f)/sizeof(uint8_t));
  60.  
     
  61.  
    /*拍长*/
  62.  
    uint8_t music_happy_newyear_t[]={
  63.  
    P_2_1,P_1,P_2_1,P_2_1,P_1,P_2_1,
  64.  
    P_1,P_2_1,P_2_1,P_2,
  65.  
    P_2_1,P_1,P_2_1,P_2_1,P_1,P_2_1,
  66.  
    P_4_3,P_4_1,P_1,P_2,
  67.  
    P_4_3,P_4_1,P_1,P_2_1,P_1,P_2_1,
  68.  
    P_1,P_2_1,P_2_1,P_2,
  69.  
    P_4_3,P_4_1,P_1,P_2_1,P_1,P_2_1,
  70.  
    P_4_3,P_4_1,P_1,P_2,
  71.  
    P_2_1,P_1,P_2_1,P_2_1,P_1,P_2_1,
  72.  
    P_1,P_2_1,P_2_1,P_2,
  73.  
    };
  74.  
     
  75.  
    /*-------------------难忘今宵--------------------*/
  76.  
     
  77.  
    /*频率*/
  78.  
    uint8_t music_bitter_unforget_f[]={
  79.  
    2,3,2,1,2,3,2,5,
  80.  
    5,5,5,2,4,3,2,
  81.  
    7,1,2,3,1,7,1,2,3,5,
  82.  
    5,4,3,4,3,2,1,
  83.  
     
  84.  
    5,6,5,4,1,3,4,6,5,5,
  85.  
    2,6,5,6,4,6,5,
  86.  
    3,4,3,2,5,3,4,3,2,1,
  87.  
     
  88.  
    5,4,3,4,3,2,1,
  89.  
    6,5,4,1,4,6,5,5,
  90.  
    6,5,4,1,4,6,5,5,
  91.  
     
  92.  
    3,2,1,5,1,3,2,2,
  93.  
    3,2,1,5,1,3,5,5,
  94.  
    3,2,1,5,1,3,1,1,
  95.  
    };
  96.  
     
  97.  
    /*1/4拍长*/
  98.  
    u16 music_bitter_unforget_t_echo=300;
  99.  
     
  100.  
    /*长度*/
  101.  
    u16 music_bitter_unforget_len=(sizeof(music_bitter_unforget_f)/sizeof(uint8_t));
  102.  
     
  103.  
    /*拍长*/
  104.  
    uint8_t music_bitter_unforget_t[]={
  105.  
    P_2_1,P_4_1,P_4_1,P_1,P_2_1,P_4_1,P_4_1,P_1,
  106.  
    P_2_1,P_2_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2,
  107.  
    P_4_1,P_4_1,P_4_1,P_4_1,P_1,P_4_1,P_4_1,P_4_1,P_4_1,P_1,
  108.  
    P_2_1,P_2_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2,
  109.  
     
  110.  
    P_2_1,P_4_1,P_4_1,P_2_1,P_2_1,P_4_1,P_4_1,P_4_1,P_4_1,P_1,
  111.  
    P_2_1,P_2_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2,
  112.  
    P_4_1,P_4_1,P_4_1,P_4_1,P_1,P_4_1,P_4_1,P_4_1,P_4_1,P_1,
  113.  
     
  114.  
    P_2_1,P_2_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2,
  115.  
    P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2_1,P_2,
  116.  
    P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2_1,P_2,
  117.  
     
  118.  
    P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2_1,P_2,
  119.  
    P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2_1,P_2,
  120.  
    P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_4_1,P_2_1,P_2,
  121.  
    };
  122.  
     
  123.  
    struct MUSIC_T music_t;
  124.  
     
  125.  
    u8 B0[]="stop";
  126.  
    u8 B1[]="two tigers";
  127.  
    u8 B2[]="happy newyear";
  128.  
    u8 B3[]="bitter_unforget";
  129.  
     
  130.  
    void music_tea_seeds(u8 n){
  131.  
    switch(n){
  132.  
    case 0:{
  133.  
    music_t.f=NULL;
  134.  
    music_t.t=NULL;
  135.  
    music_t.len=0;
  136.  
    music_t.t_each=0;
  137.  
    music_t.name=B0;
  138.  
    };break;
  139.  
    case 1:{
  140.  
    music_t.f=music_two_tiger_f;
  141.  
    music_t.t=music_two_tiger_t;
  142.  
    music_t.len=music_two_tiger_len;
  143.  
    music_t.t_each=music_two_tiger_t_echo;
  144.  
    music_t.name=B1;
  145.  
    }; break;
  146.  
    case 2:{
  147.  
    music_t.f=music_happy_newyear_f;
  148.  
    music_t.t=music_happy_newyear_t;
  149.  
    music_t.len=music_happy_newyear_len;
  150.  
    music_t.t_each=music_happy_newyear_t_echo;
  151.  
    music_t.name=B2;
  152.  
    };break;
  153.  
    case 3:{
  154.  
    music_t.f=music_bitter_unforget_f;
  155.  
    music_t.t=music_bitter_unforget_t;
  156.  
    music_t.len=music_bitter_unforget_len;
  157.  
    music_t.t_each=music_bitter_unforget_t_echo;
  158.  
    music_t.name=B3;
  159.  
    };break;
  160.  
    case 4:{
  161.  
     
  162.  
    }; break;
  163.  
    case 5:{
  164.  
     
  165.  
    };break;
  166.  
    }
  167.  
    }
  168.  
     
学新通

beep.c

  1.  
    #include "beep.h"
  2.  
    #include "music.h"
  3.  
    #include "tim.h"
  4.  
     
  5.  
    #define TEA_VOL 99
  6.  
     
  7.  
    /*
  8.  
    蜂鸣器根据频率发声音
  9.  
    note_f:频率,取值来自于数组
  10.  
    vol:声音,取值范围区间:[0,100]
  11.  
    */
  12.  
     
  13.  
    void my_passive_buzzer_set(uint16_t note_f)
  14.  
    {
  15.  
    /*计算自动重装载值,计算新的频率*/
  16.  
    uint16_t Autoreload=(80000.0/(float)C_FREQ[note_f])-1;
  17.  
    /*计算音量*/
  18.  
    uint16_t volume=(((float)Autoreload)/100.0)*TEA_VOL;
  19.  
    /*设置自动重装载值*/
  20.  
    __HAL_TIM_SET_AUTORELOAD(&htim4,Autoreload);
  21.  
    /*设置音量*/
  22.  
    __HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_2,volume);
  23.  
    /*情况计算值*/
  24.  
    __HAL_TIM_SET_COUNTER(&htim4,0);
  25.  
    }
  26.  
     
  27.  
    u32 paly_delay_ms=0;
  28.  
    void my_buzzer_play()
  29.  
    {
  30.  
    static u8 last_flg=255;//记录上一首歌
  31.  
     
  32.  
    /*歌曲切换*/
  33.  
    if(last_flg!=music_t.now_flg)
  34.  
    {
  35.  
    music_t.now_len=0;
  36.  
    music_code_get(music_t.now_flg);
  37.  
    last_flg=mymusic_t.now_flg;
  38.  
    }
  39.  
    if(music_t.now_flg==0)
  40.  
    {
  41.  
    passive_buzzer_set(0);
  42.  
    return;
  43.  
    }
  44.  
    if(paly_delay_ms==0)
  45.  
    {
  46.  
    paly_delay_ms=music_t.t_each*music_t.t[music_t.now_len];
  47.  
    passive_buzzer_set(music_t.f[music_t.now_len]);
  48.  
     
  49.  
    if(music_t.now_len>=(music_t.len-1))
  50.  
    {
  51.  
    music_t.now_len=0;
  52.  
    }else
  53.  
    {
  54.  
    music_t.now_len ;
  55.  
    }
  56.  
    }else
  57.  
    {
  58.  
    paly_delay_ms--;
  59.  
    }
  60.  
    }
  61.  
     
  62.  
    /*定时器1ms中断*/
  63.  
    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  64.  
    {
  65.  
    if(htim->Instance == TIM2)
  66.  
    {
  67.  
    buzzer_play();
  68.  
    }
  69.  
    }
  70.  
     
  71.  
     
学新通

tim.c

  1.  
    /* USER CODE BEGIN Header */
  2.  
    /**
  3.  
    ******************************************************************************
  4.  
    * @file tim.c
  5.  
    * @brief This file provides code for the configuration
  6.  
    * of the TIM instances.
  7.  
    ******************************************************************************
  8.  
    * @attention
  9.  
    *
  10.  
    * Copyright (c) 2022 STMicroelectronics.
  11.  
    * All rights reserved.
  12.  
    *
  13.  
    * This software is licensed under terms that can be found in the LICENSE file
  14.  
    * in the root directory of this software component.
  15.  
    * If no LICENSE file comes with this software, it is provided AS-IS.
  16.  
    *
  17.  
    ******************************************************************************
  18.  
    */
  19.  
    /* USER CODE END Header */
  20.  
    /* Includes ------------------------------------------------------------------*/
  21.  
    #include "tim.h"
  22.  
     
  23.  
    /* USER CODE BEGIN 0 */
  24.  
     
  25.  
    /* USER CODE END 0 */
  26.  
     
  27.  
    TIM_HandleTypeDef htim2;
  28.  
    TIM_HandleTypeDef htim4;
  29.  
     
  30.  
    /* TIM2 init function */
  31.  
    void MX_TIM2_Init(void)
  32.  
    {
  33.  
     
  34.  
    /* USER CODE BEGIN TIM2_Init 0 */
  35.  
     
  36.  
    /* USER CODE END TIM2_Init 0 */
  37.  
     
  38.  
    TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  39.  
    TIM_MasterConfigTypeDef sMasterConfig = {0};
  40.  
     
  41.  
    /* USER CODE BEGIN TIM2_Init 1 */
  42.  
     
  43.  
    /* USER CODE END TIM2_Init 1 */
  44.  
    htim2.Instance = TIM2;
  45.  
    htim2.Init.Prescaler = 7200-1;
  46.  
    htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  47.  
    htim2.Init.Period = 9;
  48.  
    htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  49.  
    htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  50.  
    if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  51.  
    {
  52.  
    Error_Handler();
  53.  
    }
  54.  
    sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  55.  
    if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  56.  
    {
  57.  
    Error_Handler();
  58.  
    }
  59.  
    sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  60.  
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  61.  
    if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  62.  
    {
  63.  
    Error_Handler();
  64.  
    }
  65.  
    /* USER CODE BEGIN TIM2_Init 2 */
  66.  
     
  67.  
    /* USER CODE END TIM2_Init 2 */
  68.  
     
  69.  
    }
  70.  
    /* TIM4 init function */
  71.  
    void MX_TIM4_Init(void)
  72.  
    {
  73.  
     
  74.  
    /* USER CODE BEGIN TIM4_Init 0 */
  75.  
     
  76.  
    /* USER CODE END TIM4_Init 0 */
  77.  
     
  78.  
    TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  79.  
    TIM_MasterConfigTypeDef sMasterConfig = {0};
  80.  
    TIM_OC_InitTypeDef sConfigOC = {0};
  81.  
     
  82.  
    /* USER CODE BEGIN TIM4_Init 1 */
  83.  
     
  84.  
    /* USER CODE END TIM4_Init 1 */
  85.  
    htim4.Instance = TIM4;
  86.  
    htim4.Init.Prescaler = 9-1;
  87.  
    htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  88.  
    htim4.Init.Period = 65535-1;
  89.  
    htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  90.  
    htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  91.  
    if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
  92.  
    {
  93.  
    Error_Handler();
  94.  
    }
  95.  
    sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  96.  
    if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
  97.  
    {
  98.  
    Error_Handler();
  99.  
    }
  100.  
    if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
  101.  
    {
  102.  
    Error_Handler();
  103.  
    }
  104.  
    sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  105.  
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  106.  
    if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  107.  
    {
  108.  
    Error_Handler();
  109.  
    }
  110.  
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
  111.  
    sConfigOC.Pulse = 0;
  112.  
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  113.  
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  114.  
    if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  115.  
    {
  116.  
    Error_Handler();
  117.  
    }
  118.  
    /* USER CODE BEGIN TIM4_Init 2 */
  119.  
     
  120.  
    /* USER CODE END TIM4_Init 2 */
  121.  
    HAL_TIM_MspPostInit(&htim4);
  122.  
     
  123.  
    }
  124.  
     
  125.  
    void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
  126.  
    {
  127.  
     
  128.  
    if(tim_baseHandle->Instance==TIM2)
  129.  
    {
  130.  
    /* USER CODE BEGIN TIM2_MspInit 0 */
  131.  
     
  132.  
    /* USER CODE END TIM2_MspInit 0 */
  133.  
    /* TIM2 clock enable */
  134.  
    __HAL_RCC_TIM2_CLK_ENABLE();
  135.  
     
  136.  
    /* TIM2 interrupt Init */
  137.  
    HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
  138.  
    HAL_NVIC_EnableIRQ(TIM2_IRQn);
  139.  
    /* USER CODE BEGIN TIM2_MspInit 1 */
  140.  
     
  141.  
    /* USER CODE END TIM2_MspInit 1 */
  142.  
    }
  143.  
    else if(tim_baseHandle->Instance==TIM4)
  144.  
    {
  145.  
    /* USER CODE BEGIN TIM4_MspInit 0 */
  146.  
     
  147.  
    /* USER CODE END TIM4_MspInit 0 */
  148.  
    /* TIM4 clock enable */
  149.  
    __HAL_RCC_TIM4_CLK_ENABLE();
  150.  
     
  151.  
    /* TIM4 interrupt Init */
  152.  
    HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0);
  153.  
    HAL_NVIC_EnableIRQ(TIM4_IRQn);
  154.  
    /* USER CODE BEGIN TIM4_MspInit 1 */
  155.  
     
  156.  
    /* USER CODE END TIM4_MspInit 1 */
  157.  
    }
  158.  
    }
  159.  
    void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
  160.  
    {
  161.  
     
  162.  
    GPIO_InitTypeDef GPIO_InitStruct = {0};
  163.  
    if(timHandle->Instance==TIM4)
  164.  
    {
  165.  
    /* USER CODE BEGIN TIM4_MspPostInit 0 */
  166.  
     
  167.  
    /* USER CODE END TIM4_MspPostInit 0 */
  168.  
     
  169.  
    __HAL_RCC_GPIOB_CLK_ENABLE();
  170.  
    /**TIM4 GPIO Configuration
  171.  
    PB7 ------> TIM4_CH2
  172.  
    */
  173.  
    GPIO_InitStruct.Pin = GPIO_PIN_7;
  174.  
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  175.  
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  176.  
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  177.  
     
  178.  
    /* USER CODE BEGIN TIM4_MspPostInit 1 */
  179.  
     
  180.  
    /* USER CODE END TIM4_MspPostInit 1 */
  181.  
    }
  182.  
     
  183.  
    }
  184.  
     
  185.  
    void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
  186.  
    {
  187.  
     
  188.  
    if(tim_baseHandle->Instance==TIM2)
  189.  
    {
  190.  
    /* USER CODE BEGIN TIM2_MspDeInit 0 */
  191.  
     
  192.  
    /* USER CODE END TIM2_MspDeInit 0 */
  193.  
    /* Peripheral clock disable */
  194.  
    __HAL_RCC_TIM2_CLK_DISABLE();
  195.  
     
  196.  
    /* TIM2 interrupt Deinit */
  197.  
    HAL_NVIC_DisableIRQ(TIM2_IRQn);
  198.  
    /* USER CODE BEGIN TIM2_MspDeInit 1 */
  199.  
     
  200.  
    /* USER CODE END TIM2_MspDeInit 1 */
  201.  
    }
  202.  
    else if(tim_baseHandle->Instance==TIM4)
  203.  
    {
  204.  
    /* USER CODE BEGIN TIM4_MspDeInit 0 */
  205.  
     
  206.  
    /* USER CODE END TIM4_MspDeInit 0 */
  207.  
    /* Peripheral clock disable */
  208.  
    __HAL_RCC_TIM4_CLK_DISABLE();
  209.  
     
  210.  
    /* TIM4 interrupt Deinit */
  211.  
    HAL_NVIC_DisableIRQ(TIM4_IRQn);
  212.  
    /* USER CODE BEGIN TIM4_MspDeInit 1 */
  213.  
     
  214.  
    /* USER CODE END TIM4_MspDeInit 1 */
  215.  
    }
  216.  
    }
  217.  
     
  218.  
    /* USER CODE BEGIN 1 */
  219.  
     
  220.  
    /* USER CODE END 1 */
学新通

        谢谢支持~

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhegbieg
系列文章
更多 icon
同类精品
更多 icon
继续加载