chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

安信可VC-01/02二次開發(fā)篇: PWM輸出

AIoT行業(yè)洞察 ? 來源:AIoT行業(yè)洞察 ? 作者:AIoT行業(yè)洞察 ? 2025-08-27 16:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

wKgZO2iuvICAUfsJAADZnR7ctsE862.jpg


安信可離線語音VC-01/02:硬件規(guī)格書、開發(fā)資料、燒錄工具、應(yīng)用開發(fā)

安信可離線語音模組 VC-01、VC-02 系列教程 【基礎(chǔ)認知篇】
安信可離線語音模組 VC-01、VC-02 系列教程 【快速上手篇】
安信可離線語音模組 VC-01、VC-02 系列教程 【中級入門篇】
安信可離線語音模組 VC-01、VC-02 系列教程 【高級進階篇】
安信可離線語音模組 VC-01、VC-02 系列教程 【二次開發(fā)篇】虛擬開發(fā)環(huán)境搭建和分享
安信可離線語音模組 VC-01、VC-02 系列教程 【二次開發(fā)篇】事件和GPIO控制
安信可離線語音模組 VC-01、VC-02 系列教程 【二次開發(fā)篇】PWM輸出
安信可離線語音模組 VC-01、VC-02 系列教程 【二次開發(fā)篇】串口輸出
安信可離線語音模組 VC-01、VC-02 系列教程 【二次開發(fā)篇】SDK音頻替換失敗記錄過程
安信可離線語音模組 VC-01、VC-02 系列教程 【二次開發(fā)篇】自定義音頻播放控制

安信可離線語音模組 VC-01、VC-02 系列教程 【二次開發(fā)篇】PWM輸出

簡介

上一篇文章中我們對SDK的GPIO輸出進行了控制, 我們將在本章節(jié)對PWM的輸出進行控制(如果沒有看過上一篇文章的,建議先去看對組件和設(shè)計的庫函數(shù)的介紹),本篇SDK文件還是使用的上一章節(jié)的SDK(如無特殊說明,SDK不變)。

默認PWM DEMO輸出現(xiàn)象

首先,在user_config.h 文件中開啟對PWMLED的宏, 使其用戶代碼默認燒錄USER_DEMO_PWM_LED的例程。

wKgZO2iuvIGAJHK5AAEfoHzIO58145.jpg

根據(jù)對應(yīng)的hb_pwm_led.c 得知, 其線程啟動后,主要是控制PWM_NUM_1_A27進行輸出。

#define PWM_LED_GPIO_NUM  PWM_NUM_1_A27   // "MOSI" on HB-M demo board

首先對默認的Demo進行編譯,并且下載到VC-02中。

示波器連接到開發(fā)板背部的GPIOA27上, 那么此時示波器的波形如下所示:

wKgZO2iuvIGAXAVHAAFYOeI3cew186.jpg


占空比緩慢變化

wKgZO2iuvIKAMuAuAAFbmQ6EB9o713.jpg

此時默認的出廠PWM demo已經(jīng)測試完畢。

如果想控制對應(yīng)的PWM輸出,可以參考user_pwm.h 中的函數(shù)定義。函數(shù)聲明如下所示:

#ifndef USER_INC_USER_PWM_H_
#define USER_INC_USER_PWM_H_
#ifdef __cplusplus
  extern "C" {
#endif
#include "unione.h"
/** @ingroup uni_pwm_def
* PWM管腳號
*/
typedef enum {
  PWM_NUM_1_A27 = 0,
  PWM_NUM_1_B0,
  PWM_NUM_1_B2,      ///< PWM 1 only 1 pin work a time
  PWM_NUM_2_A28,     ///< used for PA enable, don't use it on HB-M demo board
  PWM_NUM_2_B1,
  PWM_NUM_2_B3,      ///< PWM 2 only 1 pin work a time
  PWM_NUM_MAX
}USER_PWM_NUM;
/** @addtogroup uni_pwm_inf
@{*/
/**
*@brief PWM初始化
*@param num PWM管腳號
*@param hz 頻率
*@param is_high_duty a TRUE :占空比用高電平持續(xù)時間計算; a FALSE :占空比用低電平持續(xù)時間計算
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_init(USER_PWM_NUM num, uni_u32 hz, uni_bool is_high_duty);
/**
*@brief PWM反初始化
*@param num PWM管腳號
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_final(USER_PWM_NUM num);
/**
*@brief 開使PWM輸出
*@param num PWM管腳號
*@param duty 占空比
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_start(USER_PWM_NUM num, uni_u8 duty);
/**
*@brief 停止PWM輸出
*@param num PWM管腳號
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_stop(USER_PWM_NUM num);
/**
*@brief 暫停PWM輸出
*@param num PWM管腳號
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_pause(USER_PWM_NUM num);
/**
*@brief 恢復(fù)PWM輸出
*@param num PWM管腳號
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_resume(USER_PWM_NUM num);
/**
*@brief PWM占空比切換
*@param num PWM管腳號
*@param duty 占空比
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_change_duty(USER_PWM_NUM num, uni_u8 duty);
/**
*@brief PWM占空比增加
*@param num PWM管腳號
*@param ch_duty 增加的占空比
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_duty_inc(USER_PWM_NUM num, uni_u8 ch_duty);
/**
*@brief PWM占空比減小
*@param num PWM管腳號
*@param ch_duty 減小的占空比
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_duty_dec(USER_PWM_NUM num, uni_u8 ch_duty);
/** @}*/
#ifdef __cplusplus
}
#endif
#endif

自定義控制命令

嘗試使用喚醒命令 “你好小美” 來啟動PWM進程, 使用 “打開臺燈” 命令來刪除這個進程,從而控制PWM進行輸出。

由于官方的SDK寫的非常規(guī)范, 所以建議凡是個人相關(guān)的代碼都可以寫在example目錄下。

1、首先在example 目錄下創(chuàng)建hb_user_pwm_testing.c 文件,代碼如下所示:

#include "user_gpio.h"
#include "user_pwm_led.h"
#include "user_event.h"
#include "user_player.h"
#include "user_config.h"
#define PWM_LED_GPIO_NUM  PWM_NUM_1_A27   // "MOSI" on HB-M demo board
static uni_pthread_t g_pwm_thread_id = 0;
static bool g_pwm_thread_running = false;
// Thread function to update LED brightness levels
static void _pwm_led_process(void *args) {
  LED_BRIGHT_LEVEL level = BRIGHT_LEVEL_0;
  g_pwm_thread_running = true;
  while (g_pwm_thread_running) {
    user_pwm_led_set_brightness(PWM_LED_GPIO_NUM, level);
    level += 1;
    if (level >= BRIGHT_LEVEL_MAX) {
      level = BRIGHT_LEVEL_0;
    }
    // uni_sleep(1); // Optional: slow down effect
  }
}
// Create PWM LED thread
static Result _create_pwm_led_thread(void) {
  if (g_pwm_thread_running) {
    return E_OK;
  }
  thread_param param;
  uni_memset(?m, 0, sizeof(param));
  param.stack_size = STACK_SMALL_SIZE;
  param.priority = OS_PRIORITY_LOW;
  uni_strncpy(param.task_name, "pwm_led", sizeof(param.task_name) - 1);
  if (0 != uni_pthread_create(&g_pwm_thread_id, ?m, _pwm_led_process, NULL)) {
    return E_FAILED;
  }
  uni_pthread_detach(g_pwm_thread_id);  // Auto cleanup
  return E_OK;
}
// Stop PWM thread
static void _stop_pwm_led_thread(void) {
  if (!g_pwm_thread_running) {
    return;
  }
  g_pwm_thread_running = false;
  // Destroy thread if supported (may be platform-specific)
  if (g_pwm_thread_id != 0) {
    uni_pthread_destroy(g_pwm_thread_id);  // Hard stop
    g_pwm_thread_id = 0;
  }
  user_pwm_led_set_brightness(PWM_LED_GPIO_NUM, BRIGHT_LEVEL_0);  // Turn off LED
}
// Callback on voice command
static void _on_wakeup_cmd_cb(USER_EVENT_TYPE event, user_event_context_t *context) {
  if (context == NULL) return;
  event_goto_awakend_t *awake = &context->goto_awakend;
  if (strcmp(awake->cmd, "wakeup_uni") == 0) {
    _create_pwm_led_thread();
    user_player_reply_list_random(awake->reply_files);
  }
}
static void _custom_setting_cb(USER_EVENT_TYPE event,
                               user_event_context_t *context) {
  event_custom_setting_t *setting = NULL;
  if (context) {
    setting = &context->custom_setting;
    if (strcmp(setting->cmd, "TurnOn") == 0) {
       _stop_pwm_led_thread();
       user_player_reply_list_random(setting->reply_files);
    }
  }
}
// Register event callback
static void _register_event_callback(void) {
  user_event_subscribe_event(USER_GOTO_AWAKENED, _on_wakeup_cmd_cb);
  user_event_subscribe_event(USER_CUSTOM_SETTING, _custom_setting_cb);
}
// Main entry
int hb_user_pwm_testing(void) {
  if (0 != user_pwm_led_init(PWM_LED_GPIO_NUM)) {
    return -1;
  }
  _register_event_callback();
  return 0;
}

上述代碼的主要功能是定義兩個用戶事件 :

第一個為自定義設(shè)置的事件。

另一個則是喚醒事件 (上一篇文章中有介紹)。在識別到 “你好小美” 和 “打開燈光” 的時候控制對應(yīng)的PWM行為。 如果當(dāng)前PWM輸出的線程沒有被創(chuàng)建, 那么當(dāng)識別到“你好小美”的時候?qū)泳€程。當(dāng)識別到“打開燈光”的時候則根據(jù)上述創(chuàng)建線程時的線程號刪除線程。

2、添加編譯支持在

/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/build/user/src/examples下的subdir.mk添加對當(dāng)前編譯文件的引用。

wKgZPGiuvIKAF3VQAADeahHReB8051.jpg

3、 修改/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/user/inc/user_config.h文件, 增加對應(yīng)的demo宏支持。

wKgZPGiuvIOANRKzAADujy2lv0E029.jpg

4、修改

/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/user/src/user_main.c ,增加對上述自定義宏的支持。

wKgZPGiuvISALKSLAADRJEUFmaw369.jpg

wKgZO2iuvISAI098AADg37c4RYc176.jpg

5、編譯并且燒錄固件。

wKgZPGiuvIWAFPriAADE9OwCBng620.jpg

實驗現(xiàn)象

默認上電波形如下(不清楚為什么會有毛刺)

wKgZO2iuvIWAOW16AAFak7M-fT4671.jpg

使用“你好小美” 喚醒,波形如下:

wKgZPGiuvIWAHtEyAAFaQVKi7O0215.jpg

wKgZPGiuvIaAJJ4ZAAFtHvsGndg375.jpg

使用“你好小美”喚醒 + “打開燈光” 關(guān)閉PWM,輸出如下:

wKgZPGiuvIaADTszAAFdxVhedBE839.jpg

附件

uni_app_release_update.zip(882.62 KB, 下載次數(shù): 0)

總結(jié)

在上文中主要結(jié)合IO和PWM的example進行了二次開發(fā)。其實可以發(fā)現(xiàn),無論什么自定義功能,都是首先找到對應(yīng)的庫函數(shù)或者example進行引用。

在明白原理之后定義創(chuàng)建自己的.c 文件,然再將當(dāng)前文件添加到編譯的上下文中,在對應(yīng)的h文件中開啟對自定義C文件的宏定義,即可完成自定義的功能的二次開發(fā)。

實際上這個SDK的完整度非常高, 代碼也非常規(guī)范!相信通過這幾篇文章你能很快上手安信可的離線語音產(chǎn)品,下期再見~

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • PWM
    PWM
    +關(guān)注

    關(guān)注

    116

    文章

    5809

    瀏覽量

    222537
  • 安信可
    +關(guān)注

    關(guān)注

    0

    文章

    208

    瀏覽量

    4783
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    直播回顧 | 掌握車載通信核心技術(shù),虹科CAN總線實戰(zhàn):PCAN二次開發(fā)技術(shù)直播助您輕松拿捏總線開發(fā)“創(chuàng)新引擎

    ?1CAN總線二次開發(fā):構(gòu)建智能汽車“神經(jīng)網(wǎng)絡(luò)”的核心能力在“軟件定義汽車”的時代,整車電子電氣架構(gòu)正從分布走向集中,車載網(wǎng)絡(luò)的數(shù)據(jù)量和復(fù)雜度呈指數(shù)級增長?;赑CAN等專業(yè)工具的二次開發(fā)能力
    的頭像 發(fā)表于 10-09 17:33 ?124次閱讀
    直播回顧 | 掌握車載通信核心技術(shù),虹科CAN總線實戰(zhàn):PCAN<b class='flag-5'>二次開發(fā)</b>技術(shù)直播助您輕松拿捏總線<b class='flag-5'>開發(fā)</b>“創(chuàng)新引擎

    【離線語音】VC-01/02二次開發(fā):自定義音頻播放控制

    系列教程 【二次開發(fā)】虛擬開發(fā)環(huán)境搭建和分享 離線語音模組
    的頭像 發(fā)表于 09-25 16:34 ?440次閱讀
    【離線語音】<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>VC-01</b>/<b class='flag-5'>02</b><b class='flag-5'>二次開發(fā)</b><b class='flag-5'>篇</b>:自定義音頻播放控制

    如何使用SDK進行自定義音頻播放功能

    在上一文章離線語音模組 VC-01、VC-02 系列教程 【
    的頭像 發(fā)表于 09-25 15:52 ?2815次閱讀
    如何使用SDK進行自定義音頻播放功能

    VC-01/02二次開發(fā): 事件和GPIO控制

    系列教程 【二次開發(fā)】虛擬開發(fā)環(huán)境搭建和分享 離線語音模組
    的頭像 發(fā)表于 08-19 14:02 ?624次閱讀
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>VC-01</b>/<b class='flag-5'>02</b><b class='flag-5'>二次開發(fā)</b><b class='flag-5'>篇</b>: 事件和GPIO控制

    【離線語音】VC-01/02教程:中級入門

    系列教程 【二次開發(fā)】虛擬開發(fā)環(huán)境搭建和分享 離線語音模組
    的頭像 發(fā)表于 07-31 09:33 ?518次閱讀
    【離線語音】<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>VC-01</b>/<b class='flag-5'>02</b>教程:中級入門<b class='flag-5'>篇</b>

    云MES系統(tǒng)源碼,支持 SaaS 多租戶,支持二次開發(fā)

    萬界星空科技MES生產(chǎn)制造執(zhí)行系統(tǒng)源碼,有演示,多個項目應(yīng)用案例,成熟穩(wěn)定。支持二次開發(fā),商業(yè)授權(quán)后商用。
    的頭像 發(fā)表于 05-07 11:14 ?399次閱讀
    云MES系統(tǒng)源碼,支持 SaaS 多租戶,支持<b class='flag-5'>二次開發(fā)</b>

    離線語音開發(fā)板:二次開發(fā)語音控制LED燈

    前言 經(jīng)過前面的學(xué)習(xí),相信大家已經(jīng)了解離線語音開發(fā)環(huán)境的搭建流程。甚至已經(jīng)編譯過固件,并進行了測試。本文將從產(chǎn)品創(chuàng)建開始講起,一步一步實現(xiàn)語音控制LED的功能。 語音開放平臺:
    的頭像 發(fā)表于 03-19 10:53 ?608次閱讀
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>離線語音<b class='flag-5'>開發(fā)</b>板:<b class='flag-5'>二次開發(fā)</b>語音控制LED燈

    DLP6500想調(diào)用API進行自主二次開發(fā),怎么構(gòu)建開發(fā)環(huán)境?

    請問一下,我購置了DLP6500型號產(chǎn)品,想利用該產(chǎn)品進行開發(fā),實現(xiàn)高速投影的功能。 但是我現(xiàn)在只找到了GUI界面,請問一下,如果我想調(diào)用API進行自主二次開發(fā),怎么構(gòu)建開發(fā)環(huán)境? 最好有相關(guān)的技術(shù)指導(dǎo)文件,謝謝。
    發(fā)表于 03-03 07:03

    怎么配置dlp6500二次開發(fā)的環(huán)境,可以使用VS2013嗎?

    我想請問一下,怎么配置dlp6500二次開發(fā)的環(huán)境,可以使用VS2013嗎?有沒有什么可以參考的文件,感謝!
    發(fā)表于 02-28 06:39

    請問LDC1312EVM和TI提供的軟件GUI能被二次開發(fā)嗎?

    請問LDC1312EVM和TI提供的軟件GUI能被二次開發(fā)嗎,想做個測試臺供車間員工使用。
    發(fā)表于 02-26 06:35

    DLP4500-C350REF如何在linux下借助SDK二次開發(fā)?

    請問在哪里有二次開發(fā)環(huán)境配置文檔
    發(fā)表于 02-18 08:24

    深居淺出AutoCAD二次開發(fā)

    深居淺出AutoCAD二次開發(fā),net版
    發(fā)表于 01-06 14:12 ?10次下載

    TSW14J56EVM板卡提供二次開發(fā)的接口怎么使用的?

    TSW14J56EVM板卡提供二次開發(fā)的接口怎么使用的,有沒有詳細的使用說明文檔?
    發(fā)表于 01-03 07:29

    SOLIDWORKS二次開發(fā)參數(shù)化設(shè)計工具? 慧德敏學(xué)

    SOLIDWORKS二次開發(fā)參數(shù)化設(shè)計工具?涵蓋選型、建模、裝配、出圖、編碼、報表、集成等眾多環(huán)節(jié)和任務(wù)的整合,我們除了提供專業(yè)培訓(xùn),還可針對實際產(chǎn)品提供項目導(dǎo)入,實現(xiàn)交鑰匙工程,消除企業(yè)的所有風(fēng)險
    的頭像 發(fā)表于 12-20 16:21 ?675次閱讀

    SOLIDWORKS二次開發(fā)應(yīng)用范圍與實例

    SOLIDWORKS二次開發(fā)為企業(yè)和設(shè)計師們提供了廣闊的定制化空間,能夠更好地滿足復(fù)雜多變的設(shè)計需求,幫助工程師和設(shè)計師提高工作效率,實現(xiàn)更復(fù)雜的自動化任務(wù)。如您有SOLIDWORKS二次開發(fā)需求,歡迎咨詢Solidkits
    的頭像 發(fā)表于 12-13 16:33 ?1330次閱讀