九、MyDebugger
已經(jīng)學(xué)習(xí)了usart和DMA,因?yàn)楹竺娴膶W(xué)習(xí),最好有一個直觀點(diǎn)的人性化的顯示終端。可以通過串口將數(shù)據(jù)和文字信息發(fā)送往電腦,然后在上位機(jī)軟件上觀察數(shù)據(jù)以及調(diào)試信息。為此,我寫了一個文件,以供日后調(diào)試之用,命名為MyDebugger。
首先,參照之前的程序,略加修改,將USART的接收功能全部去掉,DMA的配置分開,獨(dú)立寫成一個配置DMA的函數(shù)USART3_DMA_config(),把發(fā)送的部分寫到MyDebugger_Message(char *str_address, unsigned int str_len)函數(shù)內(nèi),很簡單地實(shí)現(xiàn)了一個發(fā)送字符消息的函數(shù)。然后寫一個操作板子上指示燈的函數(shù),用以日后指示調(diào)試信息。具體的實(shí)現(xiàn),請看下程序(實(shí)現(xiàn)MyDebugger的驗(yàn)證程序)。
把驗(yàn)證程序分離寫成頭文件形式。方便以后其他工程使用。把程序稍作修改,利用條件編譯,為以后可能的添加其他通信方式提供方便。要使用USART3作為調(diào)試通信方式,必須先定義宏MyDebug_with_USART3,如下圖所示:
實(shí)現(xiàn)MyDebugger的驗(yàn)證程序:
/*********************************************
標(biāo)題:MyDebugger
軟件平臺:IAR for ARM6.21
硬件平臺:stm32f4-discovery
主頻:168M
描述:實(shí)現(xiàn)一個調(diào)試工具
author:小船
data:2012-02-04
**********************************************/
#include
#include
/******LED宏定義*******/
#define green 0x00001000
#define orange 0x00002000
#define red 0x00004000
#define blue 0x00008000
/******全局變量及類型聲明*******/
bool USART_DMA_Completed;
enum LED_State {on, off, turn};
/******函數(shù)聲明*******/
void LEDs_Init(void);
void USART3_DMA_config(void);
void USART3_config(void);
bool MyDebugger_Message(char *str_address, unsigned int str_len);
void MyDebugger_LEDs(uint32_t LED, enum LED_State state);
void main ()
{
SysTick_Config(SystemCoreClock / 1000); //設(shè)置systemtick一毫秒中斷
SCB->AIRCR = 0x05FA0000 | 0x400; //中斷優(yōu)先級分組 搶占:響應(yīng)=3:1
LEDs_Init();
USART3_DMA_config();
USART3_config();
USART_DMA_Completed = 1;
while(1)
{
MyDebugger_Message("My name is Xian Yongwen\n",
sizeof("My name is Xian Yongwen\n")/sizeof(char));
MyDebugger_Message("廣東石油化工學(xué)院\n",
sizeof("廣東石油化工學(xué)院\n")/sizeof(char));
}
}
/*********************************************
函數(shù)名:MyDebugger_Message
參數(shù):char *str_address :要發(fā)送的字符串地址
unsigned int str_len :字符串的長度
返回值:bool 是否操作成功
功能:通過USART3發(fā)送信息
**********************************************/
bool MyDebugger_Message(char *str_address, unsigned int str_len)
{
if( USART_DMA_Completed ) //之前數(shù)據(jù)已經(jīng)發(fā)送完成
{
DMA1_Stream3->CR &= 0xFFFFFFFE; //除能DMA1_Stream3
while(DMA1_Stream3->CR & 0x00000001); //確保DMA可以被設(shè)置
DMA1->LIFCR |= 0x0f800000; //傳送前清空DMA1_Stream3所有中斷標(biāo)志
DMA1_Stream3->M0AR = (uint32_t)str_address; //設(shè)置內(nèi)存地址
if((USART3->SR & (1<<7))) //發(fā)送數(shù)據(jù)寄存器空
{
USART3->CR3 &= ~(1<<7);//usart3 dma發(fā)送模式除能
USART_DMA_Completed = 0;
DMA1_Stream3->NDTR = str_len; //設(shè)置dma傳輸數(shù)據(jù)的數(shù)量
DMA1_Stream3->CR |= 1;//使能dma
USART3->CR3 |= (1<<7);//usart3 dma發(fā)送模式使能
return true;
}
}
return false;
}
/****************************************
函數(shù)名:MyDebugger_LEDs
參數(shù):uint32_t LED :要操作哪些LED
enum LED_State state :作何操作
返回值:無
功能:改變LED的狀態(tài)
****************************************/
void MyDebugger_LEDs(uint32_t LED, enum LED_State state)
{
uint32_t tmp;
switch (state)
{
case on:
{
GPIOD->BSRRL |= LED;
break;
}
case off:
{
GPIOD->BSRRH |= LED;
break;
}
case turn:
{
tmp = (~GPIOD->ODR) & LED;
GPIOD->ODR &= ~LED;
GPIOD->ODR |= tmp;
break;
}
}
}
/****************************************
函數(shù)名:USART3_DMA_config
參數(shù):無
返回值:無
功能:DMA1數(shù)據(jù)流3與usart3關(guān)聯(lián)的相關(guān)配置
****************************************/
void USART3_DMA_config(void)
{
RCC->AHB1ENR |= (1<<21); //使能DMA1時鐘
DMA1_Stream3->CR &= 0xFFFFFFFE; //除能DMA1_Stream3
while(DMA1_Stream3->CR & 0x00000001);//確保DMA可以被設(shè)置
DMA1->LIFCR |= 0x0f800000;//傳送前清空DMA1_Stream3所有中斷標(biāo)志
DMA1_Stream3->PAR = (uint32_t)&USART3->DR;//設(shè)置外設(shè)地址USART3->DR地址0x40004804
//設(shè)置內(nèi)存地址
DMA1_Stream3->FCR &= 0x00000000;
DMA1_Stream3->FCR |= (1<<7);//設(shè)置fifo
/*
設(shè)置dma通道4,即usart3tx
優(yōu)先級最高
傳輸方向內(nèi)存到外設(shè)
內(nèi)存遞增模式
傳輸完成中斷使能
*/
DMA1_Stream3->CR |= (0x08000000 | 0x00030000 | (1<<6)
| (1<<10) | (1<<4) | (1<<2)|(1<<1));
NVIC->IP[14] = 0xA0;
NVIC->ISER[0] |= (1<<14);
}
/**************************
函數(shù)名:USART3_config
參數(shù):無
返回值:無
功能:配置usart3
************************/
void USART3_config(void)
{
RCC->APB1ENR |= (1<<18); //使能usart3時鐘
RCC->AHB1ENR |= 0x00000008; //使能GPIOD時鐘
USART3->BRR = 0x0000016C; //波特率115200
/*
使能usart3
usart3發(fā)送使能
8bit
一位停止位
無校驗(yàn)
*/
USART3->CR1 |= ( ( 1<<13 ) | ( 1<<3 ) );
GPIOD->AFR[1] |= 0x00000077;//選擇PD8,9復(fù)用功能
GPIOD->MODER &= 0xFFF0FFFF; //設(shè)置PD8,9,復(fù)用模式
GPIOD->MODER |= 0x000A0000;
GPIOD->OSPEEDR &= 0xFFFCFFFF; //PD8速度50m
GPIOD->OSPEEDR |= 0x00020000;
GPIOD->PUPDR &= 0xFFFCFFFF; //PD8
GPIOD->PUPDR |= 0x00010000;
}
/****************************************
函數(shù)名:LEDs_Init
參數(shù):無
返回值:無
功能:初始化板子上的LED
****************************************/
void LEDs_Init(void)
{
RCC->AHB1ENR |= 0x00000008; //使能GPIOD時鐘
GPIOD->MODER &= 0x00FFFFFF; //設(shè)置PD12,13,14,15輸出
GPIOD->MODER |= 0x55000000;
GPIOD->OTYPER &= 0xFFFF0FFF; //設(shè)置PD12,13,14,15推挽輸出
GPIOD->OSPEEDR &= 0x00FFFFFF; //PD12,13,14,15 速度100m
GPIOD->PUPDR &= 0x00FFFFFF; //PD12,13,14,15 無上拉無下拉
GPIOD->BSRRH = 0xf000; //reset register GPIOx_BSRRH, write only
//set register GPIOx_BSRRL, write only
}
void DMA1_Stream3_IRQHandler(void)
{
if(DMA1->LISR & 0x08000000)//DMA傳輸完成
{
USART_DMA_Completed = 1;
DMA1->LIFCR |= 0x08000000;//清除中斷標(biāo)志
}
if(DMA1->LISR & 0x03000000) //如果發(fā)生傳輸錯誤或直接模式錯誤,亮橙色LED
{
MyDebugger_LEDs( orange, on);
DMA1->LIFCR |= 0x03000000;
}
if(DMA1->LISR & (1<<22)) //如果發(fā)生fifo錯誤,亮紅色指示燈
{
MyDebugger_LEDs( red, on);
DMA1->LIFCR |= (1<<22);
}
}
實(shí)用程序:
頭文件:MyDebugger.h
[plain] view plaincopy
// file:MyDebugger.h
#ifndef __MyDebugger_H#define __MyDebugger_H
#include
#include
/******LED宏定義*******/
#define green 0x00001000
#define orange 0x00002000
#define red 0x00004000
#define blue 0x00008000
/******全局變量及類型聲明*******/
enum LED_State {on, off, turn};
/******函數(shù)聲明*******/
void MyDebugger_Init(void);
bool MyDebugger_Message(char *str_address, unsigned int str_len);
void MyDebugger_LEDs(uint32_t LED, enum LED_State state);
#endif
源文件:MyDebugger.c
[plain] view plaincopy
// file:MyDebugger.c
#include
#ifdef MyDebug_with_USART3
bool USART_DMA_Completed = true;
/****************************************
函數(shù)名:USART3_DMA_config
參數(shù):無
返回值:無
功能:DMA1數(shù)據(jù)流3與usart3關(guān)聯(lián)的相關(guān)配置
****************************************/
void USART3_DMA_config(void)
{
RCC->AHB1ENR |= (1<<21); //使能DMA1時鐘
DMA1_Stream3->CR &= 0xFFFFFFFE; //除能DMA1_Stream3
while(DMA1_Stream3->CR & 0x00000001);//確保DMA可以被設(shè)置
DMA1->LIFCR |= 0x0f800000;//傳送前清空DMA1_Stream3所有中斷標(biāo)志
DMA1_Stream3->PAR = (uint32_t)&USART3->DR;//設(shè)置外設(shè)地址USART3->DR地址0x40004804
//設(shè)置內(nèi)存地址
DMA1_Stream3->FCR &= 0x00000000;
DMA1_Stream3->FCR |= (1<<7);//設(shè)置fifo
/*
設(shè)置dma通道4,即usart3tx
優(yōu)先級最高
傳輸方向內(nèi)存到外設(shè)
內(nèi)存遞增模式
傳輸完成中斷使能
*/
DMA1_Stream3->CR |= (0x08000000 | 0x00030000 |
(1<<6) | (1<<10) | (1<<4));
NVIC->IP[14] = 0xA0;
NVIC->ISER[0] |= (1<<14);
}
/**************************
函數(shù)名:USART3_config
參數(shù):無
返回值:無
功能:配置usart3
************************/
void USART3_config(void)
{
RCC->APB1ENR |= (1<<18); //使能usart3時鐘
RCC->AHB1ENR |= 0x00000008; //使能GPIOD時鐘
USART3->BRR = 0x0000016C; //波特率115200
/*
使能usart3
usart3發(fā)送使能
8bit
一位停止位
無校驗(yàn)
*/
USART3->CR1 |= ( ( 1<<13 ) | ( 1<<3 ) );
GPIOD->AFR[1] |= 0x00000077;//選擇PD8,9復(fù)用功能
GPIOD->MODER &= 0xFFF0FFFF; //設(shè)置PD8,9,復(fù)用模式
GPIOD->MODER |= 0x000A0000;
// GPIOD->OTYPER &= 0xFFFFDFFF; //設(shè)置PD9推挽輸出
GPIOD->OSPEEDR &= 0xFFFCFFFF; //PD8速度50m
GPIOD->OSPEEDR |= 0x00020000;
GPIOD->PUPDR &= 0xFFFCFFFF; //PD8
GPIOD->PUPDR |= 0x00010000;
}
void DMA1_Stream3_IRQHandler(void)
{
if(DMA1->LISR & 0x08000000)//DMA傳輸完成
{
USART_DMA_Completed = 1;
DMA1->LIFCR |= 0x08000000;//清除中斷標(biāo)志
}
}
#endif
/*********************************************
函數(shù)名:MyDebugger_Message
參數(shù):char *str_address :要發(fā)送的字符串地址
unsigned int str_len :字符串的長度
返回值:bool 是否操作成功
功能:通過USART3發(fā)送信息
**********************************************/
bool MyDebugger_Message(char *str_address, unsigned int str_len)
{
#ifdef MyDebug_with_USB
bool USB_Actioned;
#endif
#ifdef MyDebug_with_USART3
bool USART3_Actioned;
if( USART_DMA_Completed ) //之前數(shù)據(jù)已經(jīng)發(fā)送完成
{
DMA1_Stream3->CR &= 0xFFFFFFFE; //除能DMA1_Stream3
while(DMA1_Stream3->CR & 0x00000001); //確保DMA可以被設(shè)置
DMA1->LIFCR |= 0x0f800000; //傳送前清空DMA1_Stream3所有中斷標(biāo)志
DMA1_Stream3->M0AR = (uint32_t)str_address; //設(shè)置內(nèi)存地址
if((USART3->SR & (1<<7))) //發(fā)送數(shù)據(jù)寄存器空
{
USART3->CR3 &= ~(1<<7);//usart3 dma發(fā)送模式除能
USART_DMA_Completed = 0;
DMA1_Stream3->NDTR = str_len; //設(shè)置dma傳輸數(shù)據(jù)的數(shù)量
DMA1_Stream3->CR |= 1;//使能dma
USART3->CR3 |= (1<<7);//usart3 dma發(fā)送模式使能
USART3_Actioned = 1;
}
}
#endif
#ifdef MyDebug_with_USB
//以后或許實(shí)現(xiàn)用USB發(fā)送調(diào)試信息的代碼
//如果操作USB成功
USB_Actioned = 1;
#endif
#ifdef MyDebug_with_USART3
#ifndef MyDebug_with_USB
return USART3_Actioned;
#endif
#endif
#ifdef MyDebug_with_USB
#ifndef MyDebug_with_USART3
return USB_Actioned;
#endif
#endif
#ifdef MyDebug_with_USART3
#ifdef MyDebug_with_USB
return (USART3_Actioned | USB_Actioned);
#endif
#endif
}
/****************************************
函數(shù)名:LEDs_Init
參數(shù):無
返回值:無
功能:初始化板子上的LED
****************************************/
void LEDs_Init(void)
{
RCC->AHB1ENR |= 0x00000008; //使能GPIOD時鐘
GPIOD->MODER &= 0x00FFFFFF; //設(shè)置PD12,13,14,15輸出
GPIOD->MODER |= 0x55000000;
GPIOD->OTYPER &= 0xFFFF0FFF; //設(shè)置PD12,13,14,15推挽輸出
GPIOD->OSPEEDR &= 0x00FFFFFF; //PD12,13,14,15 速度100m
GPIOD->PUPDR &= 0x00FFFFFF; //PD12,13,14,15 無上拉無下拉
GPIOD->BSRRH = 0xf000; //reset register GPIOx_BSRRH, write only
//set register GPIOx_BSRRL, write only
}
/****************************************
函數(shù)名:MyDebugger_LEDs
參數(shù):uint32_t LED :要操作哪些LED
enum LED_State state :作何操作
返回值:無
功能:改變LED的狀態(tài)
****************************************/
void MyDebugger_LEDs(uint32_t LED, enum LED_State state)
{
uint32_t tmp;
switch (state)
{
case on:
{
GPIOD->BSRRL |= LED;
break;
}
case off:
{
GPIOD->BSRRH |= LED;
break;
}
case turn:
{
tmp = (~GPIOD->ODR) & LED;
GPIOD->ODR &= ~LED;
GPIOD->ODR |= tmp;
break;
}
}
}
/*********************************************
函數(shù)名:MyDebugger_Init
參數(shù):無
返回值:無
功能:初始化MyDebugger
**********************************************/
void MyDebugger_Init(void)
{
LEDs_Init();
#ifdef MyDebug_with_USART3
USART3_DMA_config();
USART3_config();
#endif
}
主程序文件:main.c
[plain] view plaincopy
/*********************************************
標(biāo)題:MyDebugger
軟件平臺:IAR for ARM6.21
硬件平臺:stm32f4-discovery
主頻:168M
描述:實(shí)現(xiàn)一個調(diào)試工具
author:小船
data:2012-02-04
**********************************************/
#include
#include
uint32_t Gb_TimingDelay;
void Delay(uint32_t nTime);
void main ()
{
SysTick_Config(SystemCoreClock / 1000); //設(shè)置systemtick一毫秒中斷
//char test[15] = {0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 15, 0xfe, 0xf0, 0x07, 0x09};
SCB->AIRCR = 0x05AF0000 | 0x400; //中斷優(yōu)先級分組 搶占:響應(yīng)=3:1
MyDebugger_Init();
while(1)
{
MyDebugger_Message("My name is Xian Yongwen\n\r",
sizeof("My name is Xian Yongwen\n\r")/sizeof(char));
MyDebugger_LEDs(blue, on);
Delay(500);
MyDebugger_Message("廣東石油化工學(xué)院\n\r",
sizeof("廣東石油化工學(xué)院\n\r")/sizeof(char));
MyDebugger_LEDs(blue, off);
Delay(500);
}
}
void Delay(uint32_t nTime)
{
Gb_TimingDelay = nTime;
while(Gb_TimingDelay != 0);
}
void SysTick_Handler(void)
{
if (Gb_TimingDelay != 0x00)
{
Gb_TimingDelay--;
}
}
運(yùn)行結(jié)果:
上一篇:STM32F4xx 取得攝像頭數(shù)據(jù)并進(jìn)行處理
下一篇:stm32f407之DMA(操作寄存器)
推薦閱讀
史海拾趣
隨著技術(shù)的不斷成熟和產(chǎn)品的不斷完善,DART公司開始將目光投向更廣闊的市場。他們積極參加各種國際展會,與全球各地的潛在客戶建立聯(lián)系。同時,公司也加大了品牌宣傳的力度,通過贊助行業(yè)活動、發(fā)布技術(shù)文章等方式提升品牌知名度和影響力。這些努力使得DART公司的市場份額逐漸擴(kuò)大,品牌形象也日益深入人心。
隨著技術(shù)的不斷進(jìn)步,AIRPAX在傳感器和電氣保護(hù)領(lǐng)域取得了重大突破。其研發(fā)的全新傳感器技術(shù)大大提高了測量精度和響應(yīng)速度,為汽車、家電等行業(yè)提供了更高效、更安全的解決方案。這一技術(shù)突破使得AIRPAX的產(chǎn)品開始在更廣泛的行業(yè)中得到應(yīng)用,公司也逐漸發(fā)展成為電氣保護(hù)領(lǐng)域的領(lǐng)軍企業(yè)。
Delta Electronics在電源管理技術(shù)方面一直處于行業(yè)領(lǐng)先地位。公司不斷投入研發(fā)資源,推動電源技術(shù)的創(chuàng)新和進(jìn)步。其中,Delta開發(fā)的高效率開關(guān)式電源供應(yīng)器,以其高效、穩(wěn)定和可靠的性能,贏得了全球客戶的廣泛認(rèn)可。此外,公司還積極推廣綠色能源和節(jié)能技術(shù),為客戶提供環(huán)保、節(jié)能的電源解決方案。
隨著全球?qū)Νh(huán)境保護(hù)和可持續(xù)發(fā)展的重視日益加深,Eltek公司也積極響應(yīng)這一趨勢。在產(chǎn)品研發(fā)和生產(chǎn)過程中,Eltek公司始終堅(jiān)持環(huán)保理念,采用環(huán)保材料和工藝,減少對環(huán)境的影響。同時,Eltek公司還加大了在可再生能源領(lǐng)域的投入力度,積極研發(fā)具有更高效率和更低成本的電力電子產(chǎn)品。此外,Eltek公司還積極參與各種環(huán)保活動和公益事業(yè),為推動全球可持續(xù)發(fā)展貢獻(xiàn)自己的力量。
以上五個故事雖然是虛構(gòu)的,但其中所蘊(yùn)含的發(fā)展思路、創(chuàng)新精神和國際化視野是電子行業(yè)公司普遍需要關(guān)注和借鑒的。希望這些故事能為您提供一些啟示和靈感。
在競爭激烈的電子行業(yè)中,Datalinear公司意識到單打獨(dú)斗很難取得長遠(yuǎn)的發(fā)展。因此,公司積極尋求與其他企業(yè)的合作。通過與上下游企業(yè)的緊密合作,Datalinear公司不僅降低了生產(chǎn)成本,還提高了產(chǎn)品質(zhì)量和交貨速度。此外,公司還與一些科研機(jī)構(gòu)建立了合作關(guān)系,共同研發(fā)新技術(shù)和新產(chǎn)品,實(shí)現(xiàn)了共贏的局面。
在電子行業(yè)中,產(chǎn)品質(zhì)量是企業(yè)生存和發(fā)展的關(guān)鍵。EMLSI公司深知這一點(diǎn),因此始終將品質(zhì)管理放在首位。公司建立了嚴(yán)格的質(zhì)量管理體系,從原材料采購到產(chǎn)品生產(chǎn)的每一個環(huán)節(jié)都進(jìn)行嚴(yán)格把關(guān)。同時,EMLSI還注重與客戶的溝通和反饋,及時解決客戶在使用過程中遇到的問題。這種對品質(zhì)的執(zhí)著追求讓EMLSI贏得了客戶的信任和忠誠。
485總線穩(wěn)定性解決方法 一、關(guān)于485 總線的幾個概念: 1、485 總線的通訊距離可以達(dá)到1200 米。 根據(jù)485 總線結(jié)構(gòu)理論,在理想環(huán)境的前提下,485 總線傳輸距離可以達(dá)到1200 米。其條件是通訊線材優(yōu)質(zhì)達(dá)標(biāo),波特率為9600,只負(fù)載一臺485 設(shè)備,才 ...… 查看全部問答∨ |
|
如何通過Tornado自帶的TCL命令實(shí)現(xiàn)對當(dāng)前工程的編譯? 問題:如何通過Tornado自帶的TCL命令實(shí)現(xiàn)對當(dāng)前工程的編譯,不借助Tornado界面中所提供的編譯操作,生成.o和.out文件。 實(shí)際上Tornado界面功能好像也是通過TCL命令來實(shí)現(xiàn)的,關(guān)鍵本人對TCL命令這塊不太熟悉,有請大俠們指教。 … 查看全部問答∨ |
|
求天線匹配網(wǎng)絡(luò),怎樣才能是功率衰減得最少... 本帖最后由 paulhyde 于 2014-9-15 09:20 編輯 求拉杠天線匹配網(wǎng)絡(luò),拉杠天線長約一米,直徑70mm左右...... … 查看全部問答∨ |
|
【TI建議】論壇是否可以出本關(guān)于Stellaris 的書了 最近想接觸一下Stellaris ,正好在匯總論壇的帖子,順便看看以前的帖子,學(xué)習(xí)了很多。 突然想到以前學(xué)習(xí)一款單片機(jī)的時候,第一件事都是找這個單片機(jī)的書。然后我去各個網(wǎng)上商店, ...… 查看全部問答∨ |
Msp430 LaunchPad 與LCD1602的接口問題 本人是初學(xué)者,我最近也得到了msp430 Launchpad 這塊板子,請問怎樣能實(shí)現(xiàn)這塊板子與LCD1602的連接啊,我要把AD轉(zhuǎn)換的結(jié)果從LCD1602來顯示。請高手指點(diǎn)一下。謝謝… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- STM32一文通(6) 外部中斷
- ESP32玩轉(zhuǎn)MicroPython(一) 燒入固件, 初識
- ESP32玩轉(zhuǎn)MicroPython(二) 連接WIFI網(wǎng)絡(luò) webperl文件傳輸
- ESP32玩轉(zhuǎn)MicroPython(三) 延時、計時 和GPIO操作
- 玩轉(zhuǎn) ESP32 + Arduino (一) 開發(fā)環(huán)境搭建
- 玩轉(zhuǎn) ESP32 + Arduino (四) 電容按鍵 霍爾傳感器 外部中斷 延時 脈沖檢測
- 玩轉(zhuǎn) ESP32 + Arduino (五) platformIO引入類庫 自開發(fā)庫 串口打印字符串
- 玩轉(zhuǎn) ESP32 + Arduino (六) 硬件定時器, IIC, SPI
- 玩轉(zhuǎn) ESP32 + Arduino (八) U8G2驅(qū)動OLED
- 超快充技術(shù)平權(quán)時代,要來了
- 智元機(jī)器人與Physical Intelligence(Pi)達(dá)成戰(zhàn)略合作
- 不到10萬塊!特斯拉再次面臨生死狙擊?
- 高階智駕NOA功能解析:技術(shù)架構(gòu)與實(shí)現(xiàn)路徑
- 智能體爆發(fā)元年,誰在“無人區(qū)”繪制地形圖?
- 億緯鋰能大圓柱電池進(jìn)展:良率突破97%
- 500Wh/kg電池競速:鋰金屬電池挑戰(zhàn)全固態(tài)共識?(下)
- 500Wh/kg電池競速:鋰金屬電池挑戰(zhàn)全固態(tài)共識?(上)
- 密歇根大學(xué)突破:低溫充電速度提升500%
- 谷歌發(fā)布Android Auto 14.0更新,界面優(yōu)化并準(zhǔn)備車機(jī)版Gemini AI
- 廈門成立新能源汽車動力蓄電池回收利用產(chǎn)業(yè)聯(lián)盟
- 智能制造業(yè)的大數(shù)據(jù)分析
- Genesis將在日本國際機(jī)器人展覽會 (IREX 2019) 展示創(chuàng)新齒輪方案
- 能使機(jī)器人進(jìn)化使得自主性達(dá)到新高度
- 中國女排專屬定制聯(lián)想筆記本電腦亮相,顏值爆表!
- 彩電行業(yè)寒冬下,智慧屏虎頭蛇尾,彩電企業(yè)如何變革?
- 華為如何被推上“國貨之光”的巔峰?
- 果粉必看!各款PD移動電源實(shí)測
- 優(yōu)派發(fā)布新一代智能影院投影--X10
- 儒卓力與HMS Industrial Networks簽署全球分銷協(xié)議