在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

CW32L010學習筆記

捨得 ? 來源:捨得 ? 作者:捨得 ? 2024-11-15 17:40 ? 次閱讀

?CW32學習開發筆記

?

硬件原理圖:

芯片

image-20241114103849101

引腳封裝圖:

image-20241114104051352

** CW32L010 是基于 eFlash 的單芯片低功耗微控制器,集成了主頻高達 48MHz 的 ARM? Cortex?-M0+ 內核、**
高速嵌入式存儲器(多至 64K 字節 FLASH 和多至 4K 字節 SRAM)以及一系列全面的增強型外設和 I/O 口。
所有型號都提供全套的通信接口(二路 UART、一路 SPI 和一路 I2C)、12 位高速 ADC、四組通用和基本定時器
一組低功耗定時器以及一組高級控制 PWM 定時器。

供電電源

** 使用type-c直接供電即可,不需要再接其他電源轉換芯片,CW32L010 可以在 -40℃到 85℃的溫度范圍內工作,供電電壓寬達 1.62V ~ 5.5V。支持 Sleep 和 DeepSleep兩種低功耗工作模式。**

image-20241114104435067

復位電路

濾波電路

image-20241114104852343

內部穩壓

image-20241114105052457

image-20241114105024829

調試下載

默認使用SWD接口下載程序,原理圖如下:

image-20241114105146199

板載指示燈

用于查看系統運行狀態,原理圖如下:

image-20241114110648242

軟件功能

工程創建

具體如何創建工程就不所說明了,官方例程都有說明,我主要說下的我的目錄結構設計:

image-20241114105830013

串口通訊

** 內部集成 2 個通用異步收發器 (UART),支持異步全雙工、同步半雙工和單線半雙工模式,支持硬件數據流控**
和多機通信,還支持 LIN(局域互連網絡);可編程數據幀結構,可以通過小數波特率發生器提供寬范圍的
波特率選擇。內置定時器模塊,支持等待超時檢測、接收空閑檢測、自動波特率檢測和通用定時功能。
UART 控制器工作在雙時鐘域下,允許在深度休眠模式下進行數據的接收,接收完成中斷可以喚醒 MCU 回到
運行模式。注意:僅 UART1 支持 LIN 和定時器功能;UART2 可通過片內外設互聯與 BTIM/GTIM/ATIM 的從模式協同工
作實現超時定時器相關功能。我們接著實現串口通訊功能;

  • 1.串口功能硬件引腳

image-20241114135526600

使用串口2來是實現通訊,再看引腳的復用功能。

image-20241114135659092

  • 2.代碼實現
#include  "bsp_uart2.h"
 #include "cw32l010_gpio.h"
 #include "cw32l010_uart.h"
 #include  "stdio.h"
 #include "cw32l010_sysctrl.h"
 ?
 //UARTx
 #define  DEBUG_UARTx                   CW_UART2
 #define  DEBUG_UART_CLK                SYSCTRL_APB1_PERIPH_UART2
 #define  DEBUG_UART_APBClkENx          SYSCTRL_APBPeriphClk_Enable1
 #define  DEBUG_UART_BaudRate           115200
 #define  DEBUG_UART_UclkFreq           HSIOSC_VALUE     //串口全速運行 
 ?
 //UARTx GPIO
 #define  DEBUG_UART_GPIO_CLK           (SYSCTRL_AHB_PERIPH_GPIOB)
 #define  DEBUG_UART_TX_GPIO_PORT       CW_GPIOB
 #define  DEBUG_UART_TX_GPIO_PIN        GPIO_PIN_5
 #define  DEBUG_UART_RX_GPIO_PORT       CW_GPIOB
 #define  DEBUG_UART_RX_GPIO_PIN        GPIO_PIN_6
 ?
 //GPIO AF
 #define  DEBUG_UART_AFTX               PB05_AFx_UART2TXD()
 #define  DEBUG_UART_AFRX               PB06_AFx_UART2RXD()
 ?
 ?
 static void UART_Configuration(void)
 {
 //    //外設時鐘使能,放在外設里面自己進行使能
     
     DEBUG_UART_APBClkENx(DEBUG_UART_CLK, ENABLE);
 
 
 UART_InitTypeDef UART_InitStructure = {0};
 ?
     UART_InitStructure.UART_BaudRate = DEBUG_UART_BaudRate;
     UART_InitStructure.UART_Over = UART_Over_16;
     UART_InitStructure.UART_Source = UART_Source_PCLK;
     UART_InitStructure.UART_UclkFreq = DEBUG_UART_UclkFreq;
     UART_InitStructure.UART_StartBit = UART_StartBit_FE;
     UART_InitStructure.UART_StopBits = UART_StopBits_1;
     UART_InitStructure.UART_Parity = UART_Parity_No ;
     UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;
     UART_InitStructure.UART_Mode = UART_Mode_Rx | UART_Mode_Tx;
     UART_Init(DEBUG_UARTx, &UART_InitStructure);
 ?
 }
 ?
 ?
 /**
  * @brief 配置GPIO
  *
  */
 static void GPIO_Configuration(void)
 {
     GPIO_InitTypeDef GPIO_InitStructure = {0};
 
 //外設時鐘使能,放在外設里面自己進行使能
 SYSCTRL_AHBPeriphClk_Enable(DEBUG_UART_GPIO_CLK, ENABLE);
     
     GPIO_WritePin(DEBUG_UART_TX_GPIO_PORT, DEBUG_UART_TX_GPIO_PIN,GPIO_Pin_SET);    // 設置TXD的默認電平為高,空閑
 ?
     GPIO_InitStructure.Pins = DEBUG_UART_TX_GPIO_PIN;
     GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
     GPIO_Init(DEBUG_UART_TX_GPIO_PORT, &GPIO_InitStructure);
 ?
     GPIO_InitStructure.Pins = DEBUG_UART_RX_GPIO_PIN;
     GPIO_InitStructure.Mode = GPIO_MODE_INPUT_PULLUP;
     GPIO_Init(DEBUG_UART_RX_GPIO_PORT, &GPIO_InitStructure);
 ?
      //UART TX RX 復用
     DEBUG_UART_AFTX;
     DEBUG_UART_AFRX;
 }
 ?
 ?
 ?
 void UART2_Configuration(void)
 {
 UART_Configuration();
 GPIO_Configuration();
 }
 ?
 ?
 #ifdef __GNUC__
     /* With GCC/RAISONANCE, small printf (option LD Linker- >Libraries- >Small printf
     set to 'Yes') calls __io_putchar() */
     #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
 #else
     #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
 #endif /* __GNUC__ */
 ?
 ?
 /**
  * @brief Retargets the C library printf function to the UART.
  *
  */
 PUTCHAR_PROTOTYPE
 {
     UART_SendData_8bit(DEBUG_UARTx, (uint8_t)ch);
 ?
     while (UART_GetFlagStatus(DEBUG_UARTx, UART_FLAG_TXE) == RESET);
 ?
     return ch;
 }
 ?
 size_t __write(int handle, const unsigned char * buffer, size_t size)
 {
     size_t nChars = 0;
 ?
     if (buffer == 0)
     {
         /*
          * This means that we should flush internal buffers.  Since we
          * don't we just return.  (Remember, "handle" == -1 means that all
          * handles should be flushed.)
          */
         return 0;
     }
 ?
 ?
     for (/* Empty */; size != 0; --size)
     {
         UART_SendData_8bit(DEBUG_UARTx, *buffer++);
         while (UART_GetFlagStatus(DEBUG_UARTx, UART_FLAG_TXE) == RESET);
         ++nChars;
     }
 ?
     return nChars;
 }
 ?
 /******************************************************************************
  * EOF (not truncated)
  ******************************************************************************/
 #ifdef  USE_FULL_ASSERT
 /**
   * @brief  Reports the name of the source file and the source line number
   *         where the assert_param error has occurred.
   * @param  file: pointer to the source file name
   * @param  line: assert_param error line source number
   * @retval None
   */
 void assert_failed(uint8_t *file, uint32_t line)
 {
     /* USER CODE BEGIN 6 */
     /* User can add his own implementation to report the file name and line number,
        tex: printf("Wrong parameters value: file %s on line %drn", file, line) */
     /* USER CODE END 6 */
 }
 #endif /* USE_FULL_ASSERT */
 ?
  • 3.編寫打印測試函數
static void Printf_Function(void)
 {
     DEBUG_LOG("rn");
     DEBUG_LOG("  Compile time:");
     DEBUG_LOG(__DATE__);
     DEBUG_LOG("  ");
     DEBUG_LOG(__TIME__);
     DEBUG_LOG("rn+-------------------+rn");
     DEBUG_LOG("%s,%s,%d,%srn", __FUNCTION__,__FILE__,__LINE__,__DATE__);
     DEBUG_LOG("rn+-------------------+rn");
 }
  • 4.查看串口終端信息
    使用MobaXterm終端工具查看:

image-20241114140550582

  • 5.注意點

為了讓代碼支持GNU擴展,keil設置需要注意:

image-20241114140950288

同時,串口打印的時候,添加頭文件"stdio.h";

GPIO口輸入輸出

根據板載資源,使用板載的LED來測試。前面硬件說明的時候提到,使用的引腳為PB00;就直接上代碼了。

  • 1.編寫驅動代碼
#include  "drv_led.h"
 ?
 ?
 ?
 ?
 // 初始化 LED 引腳
 void LED_Init(void) 
 {
     GPIO_InitTypeDef GPIO_InitStruct = {0};
 ?
     __SYSCTRL_GPIOB_CLK_ENABLE();  
 ?
     GPIO_InitStruct.IT = GPIO_IT_NONE;
     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
     GPIO_InitStruct.Pins = LED_GPIO_PINS;
 ?
     GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
 
 }
 ?
 // 控制 LED 開關
 void LED_Control(GPIO_PinState state) 
 {
 GPIO_WritePin(LED_GPIO_PORT, LED_GPIO_PINS,state);
 }
 ?
 // 切換 LED 狀態
 void LED_Toggle(void) {
     GPIO_TogglePin(LED_GPIO_PORT, LED_GPIO_PINS);
 }
 ?
 // 讀取 LED 狀態
 int LED_Read(void) {
     return GPIO_ReadPin(LED_GPIO_PORT, LED_GPIO_PINS) == GPIO_Pin_SET ? 1 : 0;
 }
 ?
 // 定義并初始化 LED 操作結構體實例
 LED_Ops_t myLED = {
     .init = LED_Init,
     .control = LED_Control,
     .toggle = LED_Toggle,
     .read = LED_Read
 };
 ?
  • 2.編寫測試程序
int32_t main(void)
 {
 
 bsp_init();
 driver_init();
 ?
     while(1)
     {
 SysTickDelay(1000);
 myLED.toggle();
     }
 }

調試下載之后,可直接觀察板載LED燈是否在循環閃爍。

調試等級

  • 1.直接上代碼,調試等級頭文件;
#ifndef __LOG_H
 #define __LOG_H
 #include < stdio.h >
 #include < stdlib.h >
 #include < string.h >
 #include < stdarg.h >
 #define GLOB_LOG_EVEL           LOG_DEBUG
 ?
 typedef enum {
     FALSE,
     TRUE
     } status;
 // 定義日志級別
 typedef enum {
     LOG_DEBUG,
     LOG_INFO,
     LOG_WARNING,
     LOG_ERROR
     } LogLevel;
 ?
 ?
 ?
 //extern LogMsg lmsg;
 // 顏色
 #define Blue    "?33[34m" // Blue
 #define Green   "?33[32m" // Green
 #define Yellow  "?33[33m" // Yellow
 #define Red     "?33[31m" // Red
 #define Reset   "?33[0m"  // Reset color
 ?
 ?
 // 記錄日志的宏定義
 ?
 #define LOG_MESSAGE(format, ...) printf("[NTP]:%s(),Line:%05d: " format "rn", __FUNCTION__, __LINE__, ##__VA_ARGS__)
 ?
 void LOG_MSG(LogLevel level, const char *message);
 #endif
 ?
  • 2.功能函數實現文件:
#include "log.h"
 ?
 // 日志輸出函數
 void LOG_MSG(LogLevel level, const char *message) {
     switch (level) {
         case LOG_DEBUG:
             printf(Blue "DEBUG: %s" Reset "rn", message);
             break;
         case LOG_INFO:
             printf(Green "INFO: %s" Reset "rn", message);
             break;
         case LOG_WARNING:
             printf(Yellow "WARNING: %s" Reset "rn", message);
             break;
         case LOG_ERROR:
             printf(Red "ERROR: %s" Reset "rn", message);
             break;
         default:
             printf("UNKNOWN: %sn", message);
             break;
     }
 }
  • 3.編寫測試函數
/*宏定義錯誤碼信息*/
 static void Error_Code_Info(void)
 { 
 DEBUG_LOG("%d", SYSTEM_OK);
 DEBUG_LOG("%d", SYSTEM_ERR_E_1);
 DEBUG_LOG("%d", SYSTEM_ERR_E_2);
 DEBUG_LOG("%d", SYSTEM_ERR_MQTT_INFO_ERROR);
 ?
 ?
 LOG_MSG(LOG_DEBUG, "This is a debug message");
 LOG_MSG(LOG_INFO, "This is an info message");
 LOG_MSG(LOG_WARNING, "This is a warning message");
 LOG_MSG(LOG_ERROR, "This is an error message");
 }
  • 4.終端輸出

image-20241114145804066

串口中斷

CW32單片機的串口有好幾種工作方式,異步全雙工,同步半雙工,單線半雙工,由于沒有DMA通道,為了避免頻繁的進入中斷,采用串口接收中斷,串口查詢發送方式實現收發;

配置簡單隊列消息,實現方式如下:

  • 1、定義隊列結構
#define myQ2_SIZE     512
 #define RxBuffer2_SIZE   myQ2_SIZE
 ?
 typedef volatile struct
 {
     uint8_t     m_getIdx;
     uint8_t     m_putIdx;
     uint8_t     m_entry[ myQ2_SIZE ];
 } myQ2;
 ?
 extern  myQ2   volatile RxBuffer2;
 extern  myQ2   volatile TxBuffer2;
 ?
 void  UART2_Buffer_Init(void);
  • 2、初始化隊列結構
myQ2   volatile RxBuffer2;
 myQ2   volatile TxBuffer2;
 ?
 ?
 void  UART2_Buffer_Init(void)
 {
     CBUF_Init(RxBuffer2);
     CBUF_Init(TxBuffer2);
 }
 ?
  • 3、使能串口接收中斷
void NVIC_Configuration(void)
 {
     //優先級,無優先級分組
     NVIC_SetPriority(DEBUG_UART_IRQ, 0);
     //UARTx中斷使能
     NVIC_EnableIRQ(DEBUG_UART_IRQ);
 
 
 //使能UARTx RC中斷
     UART_ITConfig(DEBUG_UARTx, UART_IT_RC, ENABLE);
 UART_ClearITPendingBit(CW_UART2, UART_IT_RC);
 
 }
  • 4、編寫測試函數,實現串口功能收發
int32_t main(void)
 {
 bsp_init();
 driver_init();
     while(1)
     {
 uint16_t  dataLen=0;
 dataLen = CBUF_Len(RxBuffer2);
 if(dataLen!=0)
 {
 //拷貝數據
 memcpy((char*)TxBuffer2.m_entry,(char*)RxBuffer2.m_entry,dataLen);
 //查詢發送數據
 UART_SendBuf_Polling(CW_UART2,TxBuffer2.m_entry,dataLen);
 
 USART2_Clear();
 }
 SysTickDelay(1000);
 myLED.toggle();
     }
 }
  • 5、查看串口終端收發

image-20241115144847070

從截圖可以看出,當前收發數據一致;

控制臺Shell

下面介紹下開源項目是 letter-shell,一個功能強大的嵌入式shell,letter shell 3.x是一個C語言編寫的,可以嵌入在程序中的嵌入式shell,通俗一點說就是一個串口命令行,可以通過命令行調用、運行程序中的函數。目前 letter-shell 3.0版本支持的功能有:

  • 命令自動補全
  • 快捷鍵功能定義
  • 命令權限管理
  • 用戶管理
  • 變量支持

項目地址: [https://github.com/NevermindZZT/letter-shell]

移植過程:

  • 1.復制源碼到工程中:

image-20241115165344228

  • 2.在自定義接口shell_port.c中實現自己的串口讀寫函數
#include "shell.h"
 #include "main.h"
 #include "bsp_uart2.h"
 #include "shell_port.h"
 ?
 Shell shell;
 char shellBuffer[512];
 ?
 ?
 /**
  * @brief 用戶shell寫
  * 
  * @param data 數據
  * @param len 數據長度
  * 
  * @return short 實際寫入的數據長度
  */
 short userShellWrite(char *data, unsigned short len)
 {
 UART_SendBuf_Polling(CW_UART2,(uint8_t *)data, len);
     return len;
 }
 ?
 ?
 /**
  * @brief 用戶shell讀
  * 
  * @param data 數據
  * @param len 數據長度
  * 
  * @return short 實際讀取到
  */
 short userShellRead(char *data, unsigned short len)
 {
 return UART2_GetString((uint8_t *)data, len);
 }
 ?
 /**
  * @brief 用戶shell上鎖
  * 
  * @param shell shell
  * 
  * @return int 0
  */
 int userShellLock(Shell *shell)
 {
 return 0;
 }
 ?
 /**
  * @brief 用戶shell解鎖
  * 
  * @param shell shell
  * 
  * @return int 0
  */
 int userShellUnlock(Shell *shell)
 {
 return 0;
 }
 ?
 /**
  * @brief 用戶shell初始化
  * 
  */
 void userShellInit(void)
 {
 ?
 //注冊自己實現的寫函數
     shell.write = userShellWrite;
 //shell.read = userShellRead;
 //調用shell初始化函數
     shellInit(&shell, shellBuffer, 512);
 
 }
  • 3.在終端函數中定義

對于裸機環境,在主循環中調用shellTask,或者在接收到數據時,調用shellHandler,我這里在中斷中調用

void UART2_IRQHandler(void)
 {
     /* USER CODE BEGIN */
     uint8_t TxRxBuffer;
     if (UART_GetITStatus(CW_UART2, UART_IT_RC) != RESET)
     {
 /*使用簡易隊列進行接收數據*/
 TxRxBuffer = UART_ReceiveData_8bit(CW_UART2);
 shellHandler(&shell,TxRxBuffer);
         CBUF_Push(RxBuffer2, TxRxBuffer);
         UART_ClearITPendingBit(CW_UART2, UART_IT_RC);
     }
     /* USER CODE END */
 }
  • 4.調用初始化shell
userShellInit();
  • 5.串口終端實現結果

image-20241115170003058

查看當前系統時鐘:

image-20241115170036353

其他實現方式,參考官方文檔說明。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    455

    文章

    50812

    瀏覽量

    423585
  • CW32
    +關注

    關注

    1

    文章

    203

    瀏覽量

    641
收藏 人收藏

    評論

    相關推薦

    基于CW32L010單片機的低成本電動工具方案

    本方案采用武漢芯源的CW32L010F8P6作為主控實現低成本電動工具方案,通過PWM方波控制算法進行電機轉速控制,內部高精度AD轉換實現電機電壓、反電動勢、電流等信號的采樣,并實時進行故障停機保護等功能。
    的頭像 發表于 10-30 16:04 ?1012次閱讀
    基于<b class='flag-5'>CW32L010</b>單片機的低成本電動工具方案

    【產品方案】基于CW32L010低成本電動工具方案

    等功能。 ? 一、CW32L010單片機特點 內核:ARM? Cortex?-M0+: 最高主頻 48MHz ● 工作溫度:-40℃ 至 85℃;工作電壓:1.62V 至 5.5V ● 存儲容量
    的頭像 發表于 11-28 11:10 ?911次閱讀
    【產品方案】基于<b class='flag-5'>CW32L010</b>低成本電動工具方案

    【產品方案】基于CW32L010的低成本USB充電檢測儀產品方案

    的USB充電檢測儀。 ? 該檢測儀設計為數碼管版和LCD版同板,因顯示引腳共用,故實際使用時需二選一。前者具備電壓、電流檢測、功率計算和溫度檢測功能,后者增加電量計算功能。這些功能得益于CW32L010的ADC、SPI等接口功能。這款檢測儀高性能、低功耗,提供可靠檢測結果,適
    的頭像 發表于 11-28 17:23 ?1244次閱讀
    【產品方案】基于<b class='flag-5'>CW32L010</b>的低成本USB充電檢測儀產品方案

    CW32L010安全低功耗MCU,樹立M0+產品行業新標桿!

    2024年9月26日,武漢芯源半導體CW32L010系列產品正式官方發布。這款產品以其卓越的產品性能,迅速在業界引起了廣泛關注,并成功樹立M0+產品行業的新標桿。 CW32L010系列產品
    發表于 10-09 10:08

    CW32L010 Mini Board 測評】簡介、點燈

    CW32L010 Mini Board 測評】簡介、點燈 CW32L010 Mini Board 是 武漢芯源半導體 設計的基于 CW32L010 的開發板, 簡介 CW32L010
    發表于 11-17 06:39

    方案介紹|CW32L010安全低功耗MCU:驅動高速風筒新力量

    芯源半導體CW32L010系列MCU可支持低成本、高性能、低功耗、高度集成的高速風筒方案,以滿足市場對高效、安全、智能的高速風筒需求。 本文將介紹武漢芯源半導體CW32L010系列單片機在高速風筒
    發表于 12-10 09:57

    CW32L010demo

    硬件原理圖:主芯片 引腳封裝圖: CW32L010 是基于 eFlash 的單芯片低功耗微控制器,集成了主頻高達 48MHz 的 ARM? Cortex?-M0+ 內核、高速嵌入式存儲器(多至
    發表于 12-25 17:41

    CW32L010安全低功耗MCU,樹立M0+產品行業新標桿!

    2024年9月26日,武漢芯源半導體CW32L010系列產品正式官方發布。這款產品以其卓越的產品性能,迅速在業界引起了廣泛關注,并成功樹立M0+產品行業的新標桿。CW32L010系列產品
    的頭像 發表于 10-09 10:12 ?526次閱讀
    <b class='flag-5'>CW32L010</b>安全低功耗MCU,樹立M0+產品行業新標桿!

    CW32L0100核心板的使用體驗

    最近我們迎來了CW32L010新品的正式發布,標志著嵌入式技術領域的又一次創新突破。今日,我們有幸進行該新品的首次使用體驗,以一塊L010核心板為例,體驗一下這顆芯片。
    的頭像 發表于 10-30 15:29 ?265次閱讀
    <b class='flag-5'>CW32L</b>0100核心板的使用體驗

    CW32L010 新品初體驗

    最近我們迎來了CW32L010新品的正式發布,標志著嵌入式技術領域的又一次創新突破。今日,我們有幸進行該新品的首次使用體驗,以一塊L010核心板為例,體驗一下這顆芯片。 一、核心板概覽 如圖所示
    的頭像 發表于 11-14 17:45 ?353次閱讀
    <b class='flag-5'>CW32L010</b> 新品初體驗

    基于CW32L010F8P6的電機驅動板簡易測試

    基于CW32L010F8P6的一款開源電機驅動板,可驅動無刷電機(無感或有感),直流電機或步進電機。
    的頭像 發表于 11-19 09:38 ?344次閱讀
    基于<b class='flag-5'>CW32L010</b>F8P6的電機驅動板簡易測試

    CW32L010低成本工業儀表介紹

    一?引言 先看看L010家族產品功能: TSSOP20的封裝可以產品PCB面積極大縮小。 以下幾個特性讓CW32L010在工業儀表上應用更有優勢: 1.集成了主頻高達 48MHz 的 ARM
    的頭像 發表于 11-28 10:56 ?318次閱讀
    <b class='flag-5'>CW32L010</b>低成本工業儀表介紹

    【產品方案】CW32L010低成本工業儀表(方案組成框圖、硬件原理圖)

    一、引言 先看看L010家族產品功能: TSSOP20的封裝可以產品PCB面積極大縮小。 以下幾個特性讓CW32L010在工業儀表上應用更有優勢: 1.集成了主頻高達 48MHz 的 ARM
    的頭像 發表于 11-28 16:17 ?429次閱讀
    【產品方案】<b class='flag-5'>CW32L010</b>低成本工業儀表(方案組成框圖、硬件原理圖)

    關于CW32L010電動工具控制板中SWD下載口占用時的下載解決方法

    這兩個引腳。它們既作為GPIO,也是下載IO。 那我們占用這兩個IO的時候該怎么辦? 在CW32L010芯片引腳中,除了電源VDD、Vcore和VSS,其他所有IO均可以作為普通的IO口來使用。這里需要
    的頭像 發表于 12-05 12:05 ?243次閱讀
    關于<b class='flag-5'>CW32L010</b>電動工具控制板中SWD下載口占用時的下載解決方法

    CW32L010 Motor Control Driver無刷電機驅動板上手體驗

    CW32L010無刷電機驅動開發板上手體驗
    的頭像 發表于 12-26 09:26 ?90次閱讀
    <b class='flag-5'>CW32L010</b> Motor Control Driver無刷電機驅動板上手體驗
    主站蜘蛛池模板: 特黄特级高清免费视频毛片| 欧美一二| 一区二区三区四区视频在线观看| 中日韩精品视频在线观看| 欧美人与动性xxxxbbbb| 午夜影院毛片| 丁香五月欧美成人| 色婷婷中文字幕| 97蜜桃| 看视频免费网址| 日日噜噜噜噜人人爽亚洲精品| 美女又爽又黄视频| 天天添| 女的扒开尿口让男人桶爽| 欧美日韩无| 欧美精品影院| 一级特黄aaa大片29| 精品卡一卡二 卡四卡视频| av基地| 一区二区三区网站| 欧美日韩亚洲国内综合网俺| 思思99re66在线精品免费观看| 88av视频在线| 四虎库| 天天草综合| 综合激情婷婷| 国产福利在线观看你懂的| 欧美另类高清| 亚洲成色在线综合网站| 国产精品美女一区二区三区| 欧美另类色| 女人被免费网站视频在线| 美女喷白浆| 四虎亚洲国产成人久久精品| 五月天婷婷免费视频观看| 狠狠狠狠干| 国产拍拍视频| 中文字幕精品一区二区三区视频| 欧美网站色| 东北老女人啪啪对白| 色资源在线观看|