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

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

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

CW32L010學(xué)習(xí)筆記

捨得 ? 來(lái)源:捨得 ? 作者:捨得 ? 2024-11-15 17:40 ? 次閱讀

?CW32學(xué)習(xí)開(kāi)發(fā)筆記

?

硬件原理圖:

芯片

image-20241114103849101

引腳封裝圖:

image-20241114104051352

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

供電電源

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

image-20241114104435067

復(fù)位電路

濾波電路

image-20241114104852343

內(nèi)部穩(wěn)壓

image-20241114105052457

image-20241114105024829

調(diào)試下載

默認(rèn)使用SWD接口下載程序,原理圖如下:

image-20241114105146199

板載指示燈

用于查看系統(tǒng)運(yùn)行狀態(tài),原理圖如下:

image-20241114110648242

軟件功能

工程創(chuàng)建

具體如何創(chuàng)建工程就不所說(shuō)明了,官方例程都有說(shuō)明,我主要說(shuō)下的我的目錄結(jié)構(gòu)設(shè)計(jì):

image-20241114105830013

串口通訊

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

  • 1.串口功能硬件引腳

image-20241114135526600

使用串口2來(lái)是實(shí)現(xiàn)通訊,再看引腳的復(fù)用功能。

image-20241114135659092

  • 2.代碼實(shí)現(xiàn)
#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     //串口全速運(yùn)行 
 ?
 //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)
 {
 //    //外設(shè)時(shí)鐘使能,放在外設(shè)里面自己進(jìn)行使能
     
     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};
 
 //外設(shè)時(shí)鐘使能,放在外設(shè)里面自己進(jìn)行使能
 SYSCTRL_AHBPeriphClk_Enable(DEBUG_UART_GPIO_CLK, ENABLE);
     
     GPIO_WritePin(DEBUG_UART_TX_GPIO_PORT, DEBUG_UART_TX_GPIO_PIN,GPIO_Pin_SET);    // 設(shè)置TXD的默認(rèn)電平為高,空閑
 ?
     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 復(fù)用
     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.編寫打印測(cè)試函數(shù)
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.注意點(diǎn)

為了讓代碼支持GNU擴(kuò)展,keil設(shè)置需要注意:

image-20241114140950288

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

GPIO口輸入輸出

根據(jù)板載資源,使用板載的LED來(lái)測(cè)試。前面硬件說(shuō)明的時(shí)候提到,使用的引腳為PB00;就直接上代碼了。

  • 1.編寫驅(qū)動(dòng)代碼
#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 開(kāi)關(guān)
 void LED_Control(GPIO_PinState state) 
 {
 GPIO_WritePin(LED_GPIO_PORT, LED_GPIO_PINS,state);
 }
 ?
 // 切換 LED 狀態(tài)
 void LED_Toggle(void) {
     GPIO_TogglePin(LED_GPIO_PORT, LED_GPIO_PINS);
 }
 ?
 // 讀取 LED 狀態(tài)
 int LED_Read(void) {
     return GPIO_ReadPin(LED_GPIO_PORT, LED_GPIO_PINS) == GPIO_Pin_SET ? 1 : 0;
 }
 ?
 // 定義并初始化 LED 操作結(jié)構(gòu)體實(shí)例
 LED_Ops_t myLED = {
     .init = LED_Init,
     .control = LED_Control,
     .toggle = LED_Toggle,
     .read = LED_Read
 };
 ?
  • 2.編寫測(cè)試程序
int32_t main(void)
 {
 
 bsp_init();
 driver_init();
 ?
     while(1)
     {
 SysTickDelay(1000);
 myLED.toggle();
     }
 }

調(diào)試下載之后,可直接觀察板載LED燈是否在循環(huán)閃爍。

調(diào)試等級(jí)

  • 1.直接上代碼,調(diào)試等級(jí)頭文件;
#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;
 // 定義日志級(jí)別
 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.功能函數(shù)實(shí)現(xiàn)文件:
#include "log.h"
 ?
 // 日志輸出函數(shù)
 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.編寫測(cè)試函數(shù)
/*宏定義錯(cuò)誤碼信息*/
 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單片機(jī)的串口有好幾種工作方式,異步全雙工,同步半雙工,單線半雙工,由于沒(méi)有DMA通道,為了避免頻繁的進(jìn)入中斷,采用串口接收中斷,串口查詢發(fā)送方式實(shí)現(xiàn)收發(fā);

配置簡(jiǎn)單隊(duì)列消息,實(shí)現(xiàn)方式如下:

  • 1、定義隊(duì)列結(jié)構(gòu)
#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、初始化隊(duì)列結(jié)構(gòu)
myQ2   volatile RxBuffer2;
 myQ2   volatile TxBuffer2;
 ?
 ?
 void  UART2_Buffer_Init(void)
 {
     CBUF_Init(RxBuffer2);
     CBUF_Init(TxBuffer2);
 }
 ?
  • 3、使能串口接收中斷
void NVIC_Configuration(void)
 {
     //優(yōu)先級(jí),無(wú)優(yōu)先級(jí)分組
     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、編寫測(cè)試函數(shù),實(shí)現(xiàn)串口功能收發(fā)
int32_t main(void)
 {
 bsp_init();
 driver_init();
     while(1)
     {
 uint16_t  dataLen=0;
 dataLen = CBUF_Len(RxBuffer2);
 if(dataLen!=0)
 {
 //拷貝數(shù)據(jù)
 memcpy((char*)TxBuffer2.m_entry,(char*)RxBuffer2.m_entry,dataLen);
 //查詢發(fā)送數(shù)據(jù)
 UART_SendBuf_Polling(CW_UART2,TxBuffer2.m_entry,dataLen);
 
 USART2_Clear();
 }
 SysTickDelay(1000);
 myLED.toggle();
     }
 }
  • 5、查看串口終端收發(fā)

image-20241115144847070

從截圖可以看出,當(dāng)前收發(fā)數(shù)據(jù)一致;

控制臺(tái)Shell

下面介紹下開(kāi)源項(xiàng)目是 letter-shell,一個(gè)功能強(qiáng)大的嵌入式shell,letter shell 3.x是一個(gè)C語(yǔ)言編寫的,可以嵌入在程序中的嵌入式shell,通俗一點(diǎn)說(shuō)就是一個(gè)串口命令行,可以通過(guò)命令行調(diào)用、運(yùn)行程序中的函數(shù)。目前 letter-shell 3.0版本支持的功能有:

  • 命令自動(dòng)補(bǔ)全
  • 快捷鍵功能定義
  • 命令權(quán)限管理
  • 用戶管理
  • 變量支持

項(xiàng)目地址: [https://github.com/NevermindZZT/letter-shell]

移植過(guò)程:

  • 1.復(fù)制源碼到工程中:

image-20241115165344228

  • 2.在自定義接口shell_port.c中實(shí)現(xiàn)自己的串口讀寫函數(shù)
#include "shell.h"
 #include "main.h"
 #include "bsp_uart2.h"
 #include "shell_port.h"
 ?
 Shell shell;
 char shellBuffer[512];
 ?
 ?
 /**
  * @brief 用戶shell寫
  * 
  * @param data 數(shù)據(jù)
  * @param len 數(shù)據(jù)長(zhǎng)度
  * 
  * @return short 實(shí)際寫入的數(shù)據(jù)長(zhǎng)度
  */
 short userShellWrite(char *data, unsigned short len)
 {
 UART_SendBuf_Polling(CW_UART2,(uint8_t *)data, len);
     return len;
 }
 ?
 ?
 /**
  * @brief 用戶shell讀
  * 
  * @param data 數(shù)據(jù)
  * @param len 數(shù)據(jù)長(zhǎng)度
  * 
  * @return short 實(shí)際讀取到
  */
 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)
 {
 ?
 //注冊(cè)自己實(shí)現(xiàn)的寫函數(shù)
     shell.write = userShellWrite;
 //shell.read = userShellRead;
 //調(diào)用shell初始化函數(shù)
     shellInit(&shell, shellBuffer, 512);
 
 }
  • 3.在終端函數(shù)中定義

對(duì)于裸機(jī)環(huán)境,在主循環(huán)中調(diào)用shellTask,或者在接收到數(shù)據(jù)時(shí),調(diào)用shellHandler,我這里在中斷中調(diào)用

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

image-20241115170003058

查看當(dāng)前系統(tǒng)時(shí)鐘:

image-20241115170036353

其他實(shí)現(xiàn)方式,參考官方文檔說(shuō)明。

審核編輯 黃宇

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

    關(guān)注

    455

    文章

    50814

    瀏覽量

    423605
  • CW32
    +關(guān)注

    關(guān)注

    1

    文章

    203

    瀏覽量

    641
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于CW32L010單片機(jī)的低成本電動(dòng)工具方案

    本方案采用武漢芯源的CW32L010F8P6作為主控實(shí)現(xiàn)低成本電動(dòng)工具方案,通過(guò)PWM方波控制算法進(jìn)行電機(jī)轉(zhuǎn)速控制,內(nèi)部高精度AD轉(zhuǎn)換實(shí)現(xiàn)電機(jī)電壓、反電動(dòng)勢(shì)、電流等信號(hào)的采樣,并實(shí)時(shí)進(jìn)行故障停機(jī)保護(hù)等功能。
    的頭像 發(fā)表于 10-30 16:04 ?1014次閱讀
    基于<b class='flag-5'>CW32L010</b>單片機(jī)的低成本電動(dòng)工具方案

    【產(chǎn)品方案】基于CW32L010低成本電動(dòng)工具方案

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

    【產(chǎn)品方案】基于CW32L010的低成本USB充電檢測(cè)儀產(chǎn)品方案

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

    CW32L010安全低功耗MCU,樹(shù)立M0+產(chǎn)品行業(yè)新標(biāo)桿!

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

    CW32L010 Mini Board 測(cè)評(píng)】簡(jiǎn)介、點(diǎn)燈

    CW32L010 Mini Board 測(cè)評(píng)】簡(jiǎn)介、點(diǎn)燈 CW32L010 Mini Board 是 武漢芯源半導(dǎo)體 設(shè)計(jì)的基于 CW32L010 的開(kāi)發(fā)板, 簡(jiǎn)介 CW32L010
    發(fā)表于 11-17 06:39

    方案介紹|CW32L010安全低功耗MCU:驅(qū)動(dòng)高速風(fēng)筒新力量

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

    CW32L010demo

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

    CW32L010安全低功耗MCU,樹(shù)立M0+產(chǎn)品行業(yè)新標(biāo)桿!

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

    CW32L0100核心板的使用體驗(yàn)

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

    CW32L010 新品初體驗(yàn)

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

    基于CW32L010F8P6的電機(jī)驅(qū)動(dòng)板簡(jiǎn)易測(cè)試

    基于CW32L010F8P6的一款開(kāi)源電機(jī)驅(qū)動(dòng)板,可驅(qū)動(dòng)無(wú)刷電機(jī)(無(wú)感或有感),直流電機(jī)或步進(jìn)電機(jī)。
    的頭像 發(fā)表于 11-19 09:38 ?345次閱讀
    基于<b class='flag-5'>CW32L010</b>F8P6的電機(jī)驅(qū)動(dòng)板簡(jiǎn)易測(cè)試

    CW32L010低成本工業(yè)儀表介紹

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

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

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

    關(guān)于CW32L010電動(dòng)工具控制板中SWD下載口占用時(shí)的下載解決方法

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

    CW32L010 Motor Control Driver無(wú)刷電機(jī)驅(qū)動(dòng)板上手體驗(yàn)

    CW32L010無(wú)刷電機(jī)驅(qū)動(dòng)開(kāi)發(fā)板上手體驗(yàn)
    的頭像 發(fā)表于 12-26 09:26 ?96次閱讀
    <b class='flag-5'>CW32L010</b> Motor Control Driver無(wú)刷電機(jī)驅(qū)動(dòng)板上手體驗(yàn)