串口DMA方式收發(fā)
筆者使用的是STM32F407VET6,共包含6路串口,頁尾處程序已將全部串口的DMA收發(fā)配置完成,本文僅以串口1為例進(jìn)行講解。(查看代碼可直接跳至第二節(jié)或頁尾處下載)
1 STM32F4 DMA 簡介
DMA,全稱為:Direct Memory Access,即直接存儲器訪問。DMA 傳輸方式無需 CPU 直接控制傳輸,也沒有中斷處理方式那樣保留現(xiàn)場和恢復(fù)現(xiàn)場的過程,通過硬件為 RAM 與 I/O 設(shè)備開辟一條直接傳送數(shù)據(jù)的通路,能使 CPU 的效率大為提高。
STM32F4 最多有 2 個 DMA 控制器(DMA1 和 DMA2),共 16 個數(shù)據(jù)流(每個控制器 8 個),每一個 DMA 控制器都用于管理一個或多個外設(shè)的存儲器訪問請求。每個數(shù)據(jù)流總共可以有多達(dá) 8個通道(或稱請求)。每個數(shù)據(jù)流通道都有一個仲裁器,用于處理 DMA 請求間的優(yōu)先級。
它可以處理一下事務(wù):
外設(shè)到儲存器的傳輸
儲存器到外設(shè)的傳輸
儲存器到儲存器的傳輸
注意:DMA1 控制器 AHB 外設(shè)端口與 DMA2 控制器的情況不同,不連接到總線矩陣,因此,僅 DMA2 數(shù)據(jù)流能夠執(zhí)行存儲器到
存儲器的傳輸。
其中,數(shù)據(jù)流的多通道選擇,是通過 DMA_SxCR 寄存器控制的,如圖1所示:
圖1 通道選擇
上圖可以看出,DMA_SxCR 控制數(shù)據(jù)流到底使用哪一個通道,每個數(shù)據(jù)流有 8 個通道可供選擇,但每次只能選擇其中一個通道進(jìn)行 DMA 傳輸,DMA2 的各數(shù)據(jù)流通道映射表,如表 1 所示
表1 DMA2數(shù)據(jù)流映射表
上表就列出了 DMA2 所有可能的選擇情況,來總共 64 種組合,比如本章我們要實現(xiàn)串口1的 DMA 發(fā)送,即USART1_TX,就必須選擇 DMA2 的數(shù)據(jù)流 7,通道 4,來進(jìn)行 DMA 傳輸。這里注意一下,有的外設(shè)(比如 USART1_RX)可能有多個通道可以選擇,隨意選擇一個就可以。
重要寄存器簡介
(1) DMA 中斷狀態(tài)寄存器
該寄存器總共有 2 個:DMA_LISR 和 DMA_HISR,每個寄存器管理 4 數(shù)據(jù)流(總共 8 個),DMA_LISR 寄存器用于管理數(shù)據(jù)流 0~3,而 DMA_HISR 用于管理數(shù)據(jù)流 4~7。如果開啟了 DMA_LISR 中這些位對應(yīng)的中斷,則在達(dá)到條件后就會跳到中斷服務(wù)函數(shù)里面去,即使沒開啟,也可以通過查詢這些位來獲得當(dāng)前 DMA 傳輸?shù)臓顟B(tài)。這里常用的是 TCIFx位,即數(shù)據(jù)流 x 的 DMA 傳輸完成與否標(biāo)志。
注意:此寄存器為只讀寄存器,所以在這些位被置位之后,只能通過【中斷標(biāo)志清除寄存器】來清除。
(2)DMA 中斷標(biāo)志清除寄存器
該寄存器同樣有 2 個:DMA_LIFCR 和 DMA_HIFCR,同樣是每個寄存器控制 4 個數(shù)據(jù)流。該寄存器為只寫寄存器,其各位就是用來清除 【中斷狀態(tài)寄存器】的對應(yīng)位的,通過寫 1 清除。
(3) DMA 數(shù)據(jù)流 x 配置寄存器(DMA_SxCR)
該寄存器控制著 DMA 的很多相關(guān)信息,包括數(shù)據(jù)寬度、外設(shè)及存儲器的寬度、優(yōu)先級、增量模式、傳輸方向、中斷允許、使能等都是通過該寄存器來設(shè)置的。所以 DMA_ SxCR 是 DMA 傳輸?shù)暮诵目刂萍拇嫫鳌?p>
(4)DMA 數(shù)據(jù)流 x 數(shù)據(jù)項數(shù)寄存器(DMA_SxNDTR)
這個寄存器控制 DMA 數(shù)據(jù)流 x 的每次傳輸所要傳輸?shù)臄?shù)據(jù)量。其設(shè)置范圍為 0~65535。并且該寄存器的值會隨著傳輸?shù)倪M(jìn)行而減少,當(dāng)該寄存器的值為 0 的時候就代表此次數(shù)據(jù)傳輸已經(jīng)全部發(fā)送完成了。所以可以通過這個寄存器的值來知道當(dāng)前DMA 傳輸?shù)倪M(jìn)度。
注意:這里是數(shù)據(jù)項數(shù)目,而不是指的字節(jié)數(shù)。比如設(shè)置數(shù)據(jù)位寬為 16 位,那么傳輸一次(一個項)就是 2 個字節(jié)
(5)DMA 數(shù)據(jù)流 x 的外設(shè)地址寄存器(DMA_SxPAR)
該寄存器用來存儲 STM32F4 外設(shè)的地址,比如使用串口 1,那么該寄存器必須寫入 0x40011004(其實就是&USART1_DR)。
(6) DMA 數(shù)據(jù)流 x 的存儲器地址寄存器
由于 STM32F4 的 DMA 支持雙緩存,所以存儲器地址寄存器有兩個:DMA_SxM0AR 和 DMA_SxM1AR,其中 DMA_SxM1AR 僅在雙緩沖模式下,才有效。比如使用 USART1_TX_BUF[USART_LEN] 數(shù)組來做存儲器,那么在DMA_SxM0AR 中寫入 &USART1_TX_BUF 就可以了。
2 收發(fā)配置
2.1串口配置(使能DMA收發(fā))
重點:使能串口1的接收、發(fā)送和串口1的DMA接收、發(fā)送并使能串口1的空閑中斷
/*------------------------------------------------
* 函數(shù)名:void Init_USART1(u32 pclk2,u32 bound)
* 功 能:初始化IO 串口1
* 參 數(shù):pclk2: PCLK2時鐘頻率(Mhz)
bound: 波特率
* 返回值: 無
------------------------------------------------*/
void Init_USART1(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV@OVER8=0
mantissa=temp; //得到整數(shù)部分
fraction=(temp-mantissa)*16; //得到小數(shù)部分@OVER8=0
mantissa<<=4;
mantissa+=fraction;
RCC->AHB1ENR|=1<<0; //使能PORTA口時鐘
RCC->APB2ENR|=1<<4; //使能串口1時鐘
GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PA9,PA10,復(fù)用功能,上拉輸出
GPIO_AF_Set(GPIOA,9,7); //PA9,AF7
GPIO_AF_Set(GPIOA,10,7);//PA10,AF7
//波特率設(shè)置
USART1->BRR=mantissa; //波特率設(shè)置
USART1->CR1&=~(1<<15); //設(shè)置OVER8=0
USART1->CR1|=1<<3; //串口發(fā)送使能
USART1->CR3|=1<<7; //使能串口1的DMA發(fā)送
#if EN_USART1_RX //如果使能了接收
USART1->CR1|=1<<2; //串口接收使能
USART1->CR3|=1<<6; //使能串口1的DMA接收
USART1->CR1|=1<<4; //使能空閑中斷
MY_NVIC_Init(3,3,USART1_IRQn,2);//組2,最低優(yōu)先級
#endif
USART1->CR1|=1<<13; //串口使能
}
2.2兩個變量
發(fā)送和接收的數(shù)據(jù)都將以如下兩個變量為指定儲存器。
#define USART_LEN 50 //定義最大接收字節(jié)數(shù) 50
u8 USART1_TX_BUF[USART_LEN];
u8 USART1_RX_BUF[USART_LEN];
2.3 DMA配置
(1)使能DMA2時鐘,并等待數(shù)據(jù)流可配置 。
(2)設(shè)置外設(shè)地址
(3)設(shè)置儲存器地址
(4)設(shè)置傳輸數(shù)據(jù)量
(5)設(shè)置數(shù)據(jù)流7的配置信息
(6)開啟數(shù)據(jù)流7的傳輸完成中斷
/*------------------------------------------------
* 函數(shù)名:void MYDMA_Config(DMA_Stream_TypeDef *DMA_Streamx,u8 chx,u32 par,u32 mar,u16 ndtr,u8 dir)
* 功 能:配置DMA
* 參 數(shù):DMA_Streamx: DMA數(shù)據(jù)流(DMA1_Stream0~7/DMA2_Stream0~7)
chx: DMA通道選擇(范圍:0~7)
par: 外設(shè)地址
mar: 存儲器地址
ndtr: 數(shù)據(jù)傳輸量
dir: 數(shù)據(jù)傳輸方向(DMA_DIR_PeripheralToMemory / DMA_DIR_MemoryToPeripheral / DMA_DIR_MemoryToMemory)
* 返回值: 無
------------------------------------------------*/
void MYDMA_Config(DMA_Stream_TypeDef *DMA_Streamx,u8 chx,u32 par,u32 mar,u16 ndtr,u8 dir)
{
DMA_TypeDef *DMAx;
u8 streamx;
if((u32)DMA_Streamx>(u32)DMA2)//得到當(dāng)前stream是屬于DMA2還是DMA1
{
DMAx=DMA2;
RCC->AHB1ENR|=1<<22;//DMA2時鐘使能
}else
{
DMAx=DMA1;
RCC->AHB1ENR|=1<<21;//DMA1時鐘使能
}
while(DMA_Streamx->CR&0X01);//等待DMA可配置
streamx=(((u32)DMA_Streamx-(u32)DMAx)-0X10)/0X18; //得到stream通道號
if(streamx>=6)DMAx->HIFCR|=0X3D<<(6*(streamx-6)+16); //清空之前該stream上的所有中斷標(biāo)志
else if(streamx>=4)DMAx->HIFCR|=0X3D<<6*(streamx-4); //清空之前該stream上的所有中斷標(biāo)志
else if(streamx>=2)DMAx->LIFCR|=0X3D<<(6*(streamx-2)+16);//清空之前該stream上的所有中斷標(biāo)志
else DMAx->LIFCR|=0X3D<<6*streamx; //清空之前該stream上的所有中斷標(biāo)志
DMA_Streamx->PAR=par; //DMA外設(shè)地址
DMA_Streamx->M0AR=mar; //DMA存儲器0地址
DMA_Streamx->NDTR=ndtr; //n個數(shù)據(jù)項
DMA_Streamx->CR=0; //先全部復(fù)位CR寄存器值
switch(dir)
{
case DMA_DIR_PeripheralToMemory: //外設(shè)到存儲器模式
DMA_Streamx->CR&=~(1<<6);
DMA_Streamx->CR&=~(1<<7);
break;
case DMA_DIR_MemoryToPeripheral:
DMA_Streamx->CR|=1<<6;
DMA_Streamx->CR&=~(1<<7);
break;
case DMA_DIR_MemoryToMemory:
DMA_Streamx->CR&=~(1<<6);
DMA_Streamx->CR|=1<<7;
break;
default:break;
}
DMA_Streamx->CR|=0<<8; //非循環(huán)模式(即使用普通模式)
DMA_Streamx->CR|=0<<9; //外設(shè)非增量模式
DMA_Streamx->CR|=1<<10; //存儲器增量模式
DMA_Streamx->CR|=0<<11; //外設(shè)數(shù)據(jù)長度:8位
DMA_Streamx->CR|=0<<13; //存儲器數(shù)據(jù)長度:8位
DMA_Streamx->CR|=1<<16; //中等優(yōu)先級
DMA_Streamx->CR|=0<<21; //外設(shè)突發(fā)單次傳輸
DMA_Streamx->CR|=0<<23; //存儲器突發(fā)單次傳輸
DMA_Streamx->CR|=(u32)chx<<25;//通道選擇
//DMA_Streamx->FCR=0X21; //FIFO控制寄存器
DMA2_Stream7->CR|=1<<4; //使能傳輸完成中斷
MY_NVIC_Init(2,1,DMA2_Stream7_IRQn,2);
}
2.4 設(shè)置MDA狀態(tài)標(biāo)志
注意:如果連續(xù)運行兩個發(fā)送函數(shù),如下,則可能在第一個還未發(fā)送完成時就會直接執(zhí)行第二次發(fā)送。
myDMAprintf(USART1,"usart = %dtch = %frn",1,1.567);
myDMAprintf(USART1,"usart = %dtch = %frn",1,1.567);
其運行效果如圖1所示,第一次僅發(fā)送了"us"即被第二次發(fā)送覆蓋了。
圖1 運行效果
故需設(shè)置相應(yīng)的標(biāo)志位,對每次發(fā)送的狀態(tài)進(jìn)行標(biāo)記,若正在進(jìn)行傳輸,則等待,實現(xiàn)如下:
typedef enum
{
BUSY,
IDLE
}DMA_Flag;
volatile DMA_Flag DMA2_Stream7_Flag = IDLE; //USART1
2.5 DMA中斷函數(shù)
每次傳輸完成(串口發(fā)送完成)后,都會觸發(fā)一次中斷,此時只需在中斷函數(shù)中清除相應(yīng)標(biāo)志位并對發(fā)送狀態(tài)進(jìn)行標(biāo)記即可。
//對應(yīng)USART1發(fā)送
void DMA2_Stream7_IRQHandler(void)
{
if((DMA2->HISR&(1<<27)))
{
DMA2->HIFCR|=1<<27;
DMA2_Stream7_Flag = IDLE;
}
}
2.6 DMA初始化
查詢手冊可知,串口1發(fā)送為DMA2的數(shù)據(jù)流7,通道4,并為內(nèi)存到外設(shè)模式,而串口1接收為DMA2的數(shù)據(jù)流5,通道4,并為外設(shè)到內(nèi)存模式。
注意:此處需提前開啟一次DMA接收,否則第一次接收會產(chǎn)生錯誤數(shù)據(jù)。
//USART1發(fā)送 --- DMA2,數(shù)據(jù)流7,CH4---USART1_TXD 外設(shè)為串口1,存儲器為USART1_TX_BUF,長度為:USART_LEN
MYDMA_Config(DMA2_Stream7,4,(u32)&USART1->DR,(u32)USART1_TX_BUF,USART_LEN,DMA_DIR_MemoryToPeripheral);
//USART1接收 --- DMA2,數(shù)據(jù)流5,CH4---USART1_RXD 外設(shè)為串口1,存儲器為USART1_RX_BUF,長度為:USART_LEN
MYDMA_Config(DMA2_Stream5,4,(u32)&USART1->DR,(u32)USART1_RX_BUF,USART_LEN,DMA_DIR_PeripheralToMemory);
MYDMA_Enable(DMA2_Stream5,(u32)USART1_RX_BUF,USART_LEN);//開始一次DMA傳輸!
2.6 開啟一次串口DMA傳輸
配置DMA數(shù)據(jù)流、內(nèi)存地址及傳輸量。
void MYDMA_Enable(DMA_Stream_TypeDef *DMA_Streamx, u32 mar, u16 ndtr)
{
DMA_Streamx->CR&=~(1<<0); //關(guān)閉DMA傳輸
while(DMA_Streamx->CR&0X1); //確保DMA可以被設(shè)置
DMA_Streamx->M0AR=mar; //DMA存儲器地址
DMA_Streamx->NDTR=ndtr; //DMA傳輸數(shù)據(jù)量
DMA_Streamx->CR|=1<<0; //開啟DMA傳輸
}
2.7 格式化發(fā)送
該部分已封裝為類似printf()的發(fā)送函數(shù),大致為3個部分:
(1)格式化數(shù)據(jù)為字符串;
(2)判斷發(fā)送狀態(tài),若“忙”,則等待。
(3)設(shè)置好儲存器地址,使能發(fā)送并設(shè)置發(fā)送狀態(tài);
/*------------------------------------------------
* 函數(shù)名:Status myDMAprintf(USART_TypeDef *USARTx, const char *format, ...)
* 功 能:仿 printf 函數(shù)
* 參 數(shù):*USARTx: 串口號
*pString: 打印內(nèi)容
... : 變量
* 返回值: 狀態(tài)
------------------------------------------------*/
Status myDMAprintf(USART_TypeDef *USARTx, const char *format, ...)
{
va_list args;
u16 len;
if(format == NULL)
return 1;
va_start(args, format);
if(USARTx == USART1)
{
len = vsnprintf((char *)USART1_TX_BUF, USART_LEN, format, args);
while(DMA2_Stream7_Flag != IDLE);
MYDMA_Enable(DMA2_Stream7,(u32)USART1_TX_BUF,len);
DMA2_Stream7_Flag = BUSY;
}
else if(USARTx == USART2)
{
len = vsnprintf((char *)USART2_TX_BUF, USART_LEN, format, args);
while(DMA1_Stream6_Flag != IDLE);
MYDMA_Enable(DMA1_Stream6,(u32)USART2_TX_BUF,len);
DMA1_Stream6_Flag = BUSY;
}
else if(USARTx == USART3)
{
len = vsnprintf((char *)USART3_TX_BUF, USART_LEN, format, args);
while(DMA1_Stream3_Flag != IDLE);
MYDMA_Enable(DMA1_Stream3,(u32)USART3_TX_BUF,len);
DMA1_Stream3_Flag = BUSY;
}
else if(USARTx == UART4)
{
len = vsnprintf((char *)UART4_TX_BUF, USART_LEN, format, args);
while(DMA1_Stream4_Flag != IDLE);
MYDMA_Enable(DMA1_Stream4,(u32)UART4_TX_BUF,len);
DMA1_Stream4_Flag = BUSY;
}
else if(USARTx == UART5)
{
len = vsnprintf((char *)UART5_TX_BUF, USART_LEN, format, args);
while(DMA1_Stream7_Flag != IDLE);
MYDMA_Enable(DMA1_Stream7,(u32)UART5_TX_BUF,len);
DMA1_Stream7_Flag = BUSY;
}
else if(USARTx == USART6)
{
len = vsnprintf((char *)USART6_TX_BUF, USART_LEN, format, args);
while(DMA2_Stream6_Flag != IDLE);
MYDMA_Enable(DMA2_Stream6,(u32)USART6_TX_BUF,len);
DMA2_Stream6_Flag = BUSY;
}
else
return 2;
va_end(args);
return 0;
}
2.8串口DMA接收
當(dāng)串口進(jìn)入空閑狀態(tài)時即開啟一次DMA接收,下次數(shù)據(jù)到來時DMA會自動搬運數(shù)據(jù)至指定的儲存器(此處為USART1_TX_BUF),搬運完成后會再次觸發(fā)空閑中斷,此時清除空閑中斷標(biāo)志位、DMA傳輸完成標(biāo)志位和傳輸錯誤標(biāo)志位,并清除接收內(nèi)存,開啟下一次接收。
void USART1_IRQHandler(void)
{
u8 temp;
u16 len;
if(USART1->SR&(1<<4))//檢測到線路空閑
{
//軟件序列清除IDLE標(biāo)志位
temp = USART1->SR;
temp = USART1->DR;
DMA2_Stream5->CR &=~(1<<0); //關(guān)閉DMA傳輸,準(zhǔn)備重新配置
DMA2->HIFCR|=1<<11; //清除DMA2_Steam5傳輸完成標(biāo)志
DMA2->HIFCR|=1<<9; //清除DMA2_Steam5傳輸錯誤標(biāo)志
len = USART_LEN - (uint16_t)(DMA2_Stream5->NDTR);
myDMAprintf(USART1,"len = %d,data: %s",len,USART1_RX_BUF);
上一篇:通過DMA向串口發(fā)送數(shù)據(jù)
下一篇:STM32F10x 學(xué)習(xí)筆記之USART實現(xiàn)串口通訊 DMA 方式
推薦閱讀
史海拾趣
隨著公司的發(fā)展,Epic Games開始通過收購和投資來擴展其業(yè)務(wù)范圍。2007年8月20日,Epic Games收購了一家位于波蘭的游戲開發(fā)商People Can Fly,并成為其第一大股東。這次收購不僅為Epic Games帶來了更多的開發(fā)資源,也使其在游戲開發(fā)領(lǐng)域的實力得到了進(jìn)一步提升。此外,Epic Games還積極投資其他有潛力的游戲開發(fā)商和團(tuán)隊,以推動整個游戲行業(yè)的創(chuàng)新和發(fā)展。
隨著環(huán)保意識的提高,Devar Inc公司也積極投身環(huán)??萍碱I(lǐng)域。公司研發(fā)了一系列環(huán)保型電子產(chǎn)品和解決方案,如可降解材料制成的電子產(chǎn)品外殼、節(jié)能型電源管理系統(tǒng)等。同時,Devar還積極參與電子廢棄物的回收和處理工作,推動循環(huán)經(jīng)濟(jì)的發(fā)展。這些努力不僅有助于減少環(huán)境污染和資源浪費,也提升了公司的社會責(zé)任感和品牌形象。
可穿戴設(shè)備市場近年來持續(xù)增長,Devar Inc公司也積極布局這一領(lǐng)域。公司研發(fā)了一系列具有創(chuàng)新性的可穿戴設(shè)備,如智能手環(huán)、智能眼鏡等。這些設(shè)備不僅具備健康監(jiān)測、運動記錄等基本功能,還集成了Devar的AI技術(shù),能夠為用戶提供更加個性化的服務(wù)。例如,智能手環(huán)可以根據(jù)用戶的運動習(xí)慣和健康數(shù)據(jù),為用戶提供定制化的運動計劃和健康建議。
1982年,Dennis Gillings博士在美國北卡羅萊納州創(chuàng)立了Quintiles Transnational Inc.(昆泰)。成立之初,昆泰只是一家為藥企提供數(shù)據(jù)服務(wù)的美國本土公司。憑借其獨特的數(shù)據(jù)處理能力和對市場的敏銳洞察,昆泰迅速在行業(yè)內(nèi)樹立了良好的口碑。
在快速發(fā)展的同時,Conxall公司始終牢記企業(yè)的社會責(zé)任。公司積極參與公益事業(yè),捐資助學(xué)、扶貧濟(jì)困。同時,公司還注重環(huán)保和可持續(xù)發(fā)展,采用環(huán)保材料和節(jié)能技術(shù),努力降低生產(chǎn)過程中的能耗和排放。這些舉措不僅贏得了社會的廣泛贊譽,也為公司的長遠(yuǎn)發(fā)展奠定了良好的社會基礎(chǔ)。
這些故事雖然是以虛構(gòu)的Conxall公司為背景,但其中所蘊含的創(chuàng)新、突破、拓展、合作和社會責(zé)任等要素,是任何一個成功的電子行業(yè)企業(yè)都不可或缺的品質(zhì)。希望這些故事能夠滿足您的需求。
視頻教程: Proteus_教程2—修改元件.pdf Proteus_與單片機實時動態(tài)仿真.pdf Proteus_自學(xué)教程上.pdf Proteus_自學(xué)教程下.pdf 第二章_電路原理圖設(shè)計.pdf 第三章_電路仿真實驗.pdf 第四章_印刷電路板設(shè)計.pdf [ 本帖最后由 yuandayuan6999 ...… 查看全部問答∨ |
|
EP2C8Q208 可以做燒Delta-sigma ADC嗎 以前大學(xué)時接觸過Altera的DE2開發(fā)板,但隔了2年沒接觸了顯得很生疏,對器件不是很了解?,F(xiàn)在想買一塊開發(fā)板,看到一款以EP2C8Q208為核心的,但不知道它里面的資源是否能滿足一個delta-sigma ADC的要求?我是想把代碼燒進(jìn)去,利用Matlab生成mif寫到l ...… 查看全部問答∨ |
ST今天在中國北京領(lǐng)先全球發(fā)布STM32新產(chǎn)品,以下是數(shù)據(jù)手冊的第一頁,讓廣大網(wǎng)友先睹為快,數(shù)據(jù)手冊不日發(fā)布?!? 查看全部問答∨ |
【低功耗】Xilinx的FPGA低功耗相關(guān)文章下載(七) 這是我的一些Xilinx的FPGA的論文,傳上來給大家分享一下!大家多多支持?。? 我會分批上傳,方便大家選擇性的交流與下載!… 查看全部問答∨ |
筆記本沒有串口,我想與開發(fā)板進(jìn)行串口調(diào)試的時候,想用串口調(diào)試助手顯示,應(yīng)該怎么配置呢? 跪求 謝謝各位大神了… 查看全部問答∨ |
事牘?C(140): error C249: \'DATA\': SEGMENT TOO LARGE 用keil編譯200句程序時,提示這個,我是新手,不知道該怎么辦?… 查看全部問答∨ |
|
自動增益控制電路,用的是x9221數(shù)字電位器,和msp430x155單片機,網(wǎng)上關(guān)于x9221的參考例程不是特別多,希望能有人指點,已經(jīng)做了很長時間了沒有出來,無法寫入WCR,謝謝… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- 2025研華智能系統(tǒng)產(chǎn)業(yè)伙伴峰會成功舉辦
- 意法半導(dǎo)體公布2025年第二季度財報和電話會議時間安排
- 利用人工智能提升車間生產(chǎn)效率
- 方案分享 | ARXML 規(guī)則下 ECU 總線通訊與 ADTF 測試方案
- 車載SerDes產(chǎn)業(yè)起飛!國產(chǎn)新品密集炸場
- 出貨量激增1.34倍! 5G車規(guī)模組成標(biāo)配,三大廠商新品同臺競技
- 6月新能源市場:零跑創(chuàng)新高;比亞迪海外突破;理想滑坡
- 基于中科芯車規(guī)MCU的LED矩陣大燈應(yīng)用方案
- 蘋果被判侵犯3G專利,需向西班牙公司TOT賠償1.1億美元
- 從設(shè)計概念到 FPGA 原型僅需數(shù)分鐘,印度 InCore 完成 SoC Generator 平臺硅驗證
- Nexperia有獎直播|電動汽車中車規(guī)功率MOSFET和氮化鎵器件的介紹及應(yīng)用
- 【有獎活動】與春天有個約會--曬照片
- 【EEWORLD第二十二屆社區(qū)明星人物】暢想十二月明星人物揭曉!
- Arrow&allegro有獎直播:下一代磁感應(yīng)解決方案:XtremeSense™ TMR 技術(shù)如何促進(jìn)高效應(yīng)用
- 有獎直播|魏德米勒 OMNIMATE® 聯(lián)接技術(shù)的創(chuàng)新發(fā)展
- 開學(xué)總動員,書籍開發(fā)板低價購!
- TI 有獎直播 | 使用基于 Arm 的 AM6xA 處理器設(shè)計智能化樓宇