鸿蒙开发板Hi3861_通过GPIO12 PWM蜂鸣器播放<涛声依旧>-——基于code-2.0-CANARY

//通过PWM蜂鸣器实验-A12连接, A12接长脚,蜂鸣器短脚接GND

编译报错参考:

https://blog.csdn.net/txwtech/article/details/119853772

//通过PWM蜂鸣器实验-A12连接, A12接长脚,蜂鸣器短脚接GND
//,by txwtech
#include <stdio.h> 
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "iot_gpio.h"
#include "hi_io.h"
#include "iot_pwm.h"
#include "hi_pwm.h"
#include "hi_time.h"
int count1=0;

//音符对照表:
//https://www.cnblogs.com/developer-huawei/p/13959852.html
static const uint16_t g_tuneFreqs[]={
    0,
    
    38223, // 1 1046.5,-
    34052, // 2 1174.7,--
    30338, // 3 1318.5,--
    28635, // 4 1396.4,--
    25511, // 5 1568,---
    22728, // 6 1760,---
    20249, // 7 1975.5,---  
    51021,//  8,5_低音 783.99,   40M=40*1000*1000, 40M/783.99=51021
    45454,//  9,6_     880.00
    40495,//  10,7_     987.77    
    
};
static const uint8_t g_scoreNotes[] = {
    // 《两只老虎》简谱
    1, 2, 3, 1,    1, 2, 3, 1,   3, 4, 5,  3, 4, 5,
    5, 6, 5, 4, 3, 1,  5, 6, 5, 4, 3, 1,   1, 8, 1,  1, 8, 1,
};
static const uint8_t g_scoreNotes_txwtech[] = {
    // 《涛声依旧》简谱
    6,6,3,5,  6,5,5,
    1,2,3,3,  3,5,6,5,3,2,3,0,
    6,5,3,5, 1, 9,8,8,
    9,1,2,2,   2,6,3,      5,6,5,
   
    

};

// 曲谱时值
static const uint8_t g_scoreDurations[] = {
    4, 4, 4, 4,    4, 4, 4, 4,   4, 4, 8,  4, 4, 8,
    3, 1, 3, 1, 4, 4,  3, 1, 3, 1, 4, 4,   4, 4, 8,  4, 4, 8,
};
//txwtech
static const uint8_t g_scoreDurations_txwtech[] = {
    4, 4, 4, 4,  2,2,4,    
    2, 2, 4, 4,   2, 4, 1, 1, 2,2, 8,1,
    4,4,2,2,     4, 2, 2, 4,
    2,2,4,4,       2,4, 2,    2, 2, 8,
};

static void GpioTask(void *arg)
{
    (void) arg;

    uint32_t tune;
    uint16_t freqDivisor;
    uint32_t tuneInterval;
   hi_gpio_init();
   hi_io_set_func(HI_IO_NAME_GPIO_12,HI_IO_FUNC_GPIO_12_PWM3_OUT);  
  // 
   hi_pwm_init(HI_PWM_PORT_PWM3);  
  //  hi_pwm_set_clock(PWM_CLK_160M);   
   hi_pwm_set_clock(PWM_CLK_XTAL);  
   //while(1)
   {
    
       IotGpioValue val=IOT_GPIO_VALUE0;
       IoTGpioGetOutputVal(HI_IO_NAME_GPIO_12,&val);
        count1=sizeof(g_tuneFreqs)/sizeof(g_tuneFreqs[0]);
       printf("count is:  %d\n",count1);
       

       printf("execute pwm,value: %d\n",val);
       if(0)
       {
         for(size_t i=0;i<sizeof(g_scoreNotes)/sizeof(g_scoreNotes[0]);i++)
          {
            tune=g_scoreNotes[i];//简谱标记
            freqDivisor=g_tuneFreqs[tune];//对应的频率
            tuneInterval=g_scoreDurations[i]*(125 * 1000);//声音的延迟
            hi_pwm_start(HI_PWM_PORT_PWM3,freqDivisor/2,freqDivisor);
          //osDelay(tuneInterval);
            hi_udelay(tuneInterval);
            hi_pwm_stop(HI_PWM_PORT_PWM3);
          }
       }

       if(1)
       {
        for(size_t i=0;i<sizeof(g_scoreNotes_txwtech)/sizeof(g_scoreNotes_txwtech[0]);i++)
        {
           tune=g_scoreNotes_txwtech[i];//简谱标记---
           freqDivisor=g_tuneFreqs[tune];//对应的频率
           tuneInterval=g_scoreDurations_txwtech[i]*(125 * 1000);//声音的延迟---
          hi_pwm_start(HI_PWM_PORT_PWM3,freqDivisor/2,freqDivisor);
          
          hi_udelay(tuneInterval);
          hi_pwm_stop(HI_PWM_PORT_PWM3);
         }
       }


       //验证音准
      // for(size_t i=0;i<sizeof(g_tuneFreqs)/sizeof(g_tuneFreqs[0]);i++)
      //  {
          // tune=g_tuneFreqs[i];//简谱标记---
         // freqDivisor=tune;
         // hi_pwm_start(HI_PWM_PORT_PWM3,freqDivisor/2,freqDivisor);
          
         // hi_udelay(3*125 * 1000);
         // hi_pwm_stop(HI_PWM_PORT_PWM3);
        // }


       
      
       
       
       
   }
}
static void GpioEntry(void)
{
    osThreadAttr_t attr={0};
    attr.name="GpioTask";
    attr.stack_size=4096;
    attr.priority=osPriorityNormal;
    if(osThreadNew(GpioTask,NULL,&attr)==NULL)
    {
        printf("[GpioEntry] create GpioTask failed!\n");
    }
}
SYS_RUN(GpioTask);
//SYS_RUN(GpioEntry);

build.gn

static_library("pwm_tone_test") {
    sources = [ "pwm_tone_test.c"]

    include_dirs = [
        
        "//third_party/cmsis/CMSIS/RTOS2/Include",
         "//utils/native/lite/include",
        "//kernel/liteos_m/components/cmsis/2.0",
        "//base/iot_hardware/peripheral/interfaces/kits",
        "//device/hisilicon/hispark_pegasus/sdk_liteos/include"
        ]
}

app目录build.gn

# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//build/lite/config/component/lite_component.gni")

lite_component("app") {
    features = [
        "pwm_tone_test",
    ]
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
安富莱_STM32-V6开发板 emWin教程(v2.0) 安富莱_STM32-V6开发板是一款基于STM32系列芯片的开发板,搭载emWin图形库,本为v2.0。emWin是一种灵活、高效的嵌入式图形界面库,可以在各种嵌入式系统中用于开发用户界面。 emWin教程(v2.0)为用户提供了详细的使用指南,使他们能够快速上手并成功运用emWin库开发功能强大的图形界面。 教程主要包括以下内容: 1. emWin库的基本概念:介绍emWin库的功能和特点,包括图形绘制、文本显示、控件等。 2. 开发环境准备:教程会详细指导用户在使用STM32-V6开发板前需要做的准备工作,如下载安装MDK-ARM集成开发环境、配置开发板等。 3. 库安装和配置:教程会指导用户如何将emWin库正确安装到MDK-ARM开发环境中,并进行相关配置。 4. 图形界面设计:详细介绍如何使用emWin库进行图形用户界面设计,包括界面布局、界面元素自定义、触摸屏交互等。 5. 控件使用:指导用户如何使用emWin库中的各种控件,如按钮、滑动条、列表框等,以实现丰富的用户交互。 6. 网络功能集成:教程还会介绍如何在emWin图形界面中集成网络功能,如实现网络连接、数据传输等。 7. 实例演示:教程会提供一些实例演示代码,帮助用户更好地理解和掌握emWin库的使用方法。 通过学习emWin教程(v2.0),用户可以掌握emWin库的基本使用方法,了解如何设计和开发功能丰富的嵌入式图形界面。同时,用户还可以通过实例演示进一步加深对emWin库的理解,并在实际应用中灵活运用。 总之,安富莱_STM32-V6开发板emWin教程(v2.0)是一份全面、详细的指南,非常适合想要学习并使用emWin库进行嵌入式图形界面开发开发者。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

txwtech笛克特科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值