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

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

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

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

FPGA與MCU的程序思路

FPGA之家 ? 來(lái)源:FPGA之家 ? 作者:FPGA之家 ? 2022-03-14 14:07 ? 次閱讀

FPGA以9600的波特率向單片機(jī)發(fā)送32位數(shù)據(jù),然后單片機(jī)對(duì)數(shù)據(jù)進(jìn)行解析,顯示在顯示屏上面

波特率的產(chǎn)生 :9600bps是指每秒鐘發(fā)送9600個(gè)bit,即1bit的時(shí)間為1/9600,fpga板子自帶50M晶振,那么一bit的時(shí)間時(shí)1/9600/1/50M

在沒(méi)有檢驗(yàn)位的情況下,每一幀數(shù)據(jù)是10位 第一位起始位 0 2-9位 數(shù)據(jù)(低位在前,高位在后),第十位 終止位 1

FPGA程序思路 :首先由fpga計(jì)數(shù),每隔一段時(shí)間產(chǎn)生一個(gè)bps_clk,也就是波特率的驅(qū)動(dòng)時(shí)鐘,發(fā)送狀態(tài)機(jī)共分為7個(gè)狀態(tài)

IDLE :發(fā)送起始標(biāo)志為 TX_1 :發(fā)送32數(shù)據(jù)的高八位,其中低位在前,高位在后 ...... STOP :終止標(biāo)志位 STOP_1 : 是專門用來(lái)延時(shí)的,剛開(kāi)始沒(méi)有延時(shí)狀態(tài)

的情況下,F(xiàn)PGA向單片機(jī)發(fā)送數(shù)據(jù)過(guò)快,非常占用單片機(jī)的中斷資源,所以加了一個(gè)延時(shí)模塊 stop ,作用是:每發(fā)完一次數(shù)據(jù)等待100ms然后再發(fā)第二次數(shù)據(jù),這樣的

單片機(jī)就有時(shí)間干別的事情了。

MCU程序思路 :首先在中斷函數(shù)里面將FPGA發(fā)送過(guò)來(lái)的數(shù)據(jù)存到一個(gè)數(shù)組里面來(lái)處理,detect-uart()函數(shù)是用來(lái)分析數(shù)組的,首先檢測(cè)數(shù)組里面的起始標(biāo)志 ‘t’,如果沒(méi)有檢測(cè)到

終止標(biāo)志位‘x’的話,對(duì)中間數(shù)據(jù)進(jìn)行移位處理,還原以前的32位寬的數(shù)據(jù),由于在數(shù)據(jù)傳送時(shí)有誤碼的情況,所以在display中加了三級(jí)緩存,來(lái)減少出錯(cuò)的可能性。

module    uart_tx(
        //global clock
        input            clk,
        input            rst_n,
        //uart    interface
        output    reg        uart_tx,
        //user    interface
        input    [31:0]    pinlv,
        input            pinlv_value
);

parameter    BPS_9600 = 5208;
//parameter    BPS_9600 = 10;
//count for bps_clk
reg        [14:0]        cnt_bps_clk;
always @(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        cnt_bps_clk <= 1'b0;
    else if(pinlv_value == 0)
        cnt_bps_clk <= 1'b0;
    else if(cnt_bps_clk == BPS_9600 - 1)
        cnt_bps_clk <= 1'b0;
    else
        cnt_bps_clk <= cnt_bps_clk + 1;
end

reg        [31:0]        cnt_bps_stop;
wire                stop_done;
always @(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        cnt_bps_stop <= 0;
    else if(state == STOP)
        cnt_bps_stop <= 0;
    else if(cnt_bps_stop > 50_000_00)
        cnt_bps_stop <= 0;
    else
        cnt_bps_stop <= cnt_bps_stop + 1;

end
assign    stop_done = (cnt_bps_stop == 49_000_00)? 1 : 0;
//clk for bps
reg                    bps_clk;
always @(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        bps_clk <= 1'b0;
    else if(cnt_bps_clk == 1)
        bps_clk <= 1'b1;
    else
        bps_clk <= 1'b0;
end
//cnt for bps
reg        [14:0]        bps_cnt;
always @(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        bps_cnt <= 1'b0;
    else if(bps_cnt == 10)
        bps_cnt <= 0;
    else if(bps_clk)
        bps_cnt <= bps_cnt + 1'b1;
    else
        bps_cnt <= bps_cnt;
end

//tx state
localparam    IDLE        =    4'd0;
localparam    TX_1        =    4'd1;
localparam    TX_2        =    4'd2;
localparam    TX_3        =    4'd3;
localparam    TX_4        =    4'd4;
localparam    STOP        =    4'd5;
localparam    STOP_1        =    4'd6;
//cnt state
reg        [3:0]        state;
always @(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        state <= IDLE;
    else if(state == STOP_1 && stop_done)
        state <= IDLE;
    else if(bps_cnt == 10 && (state != STOP_1))
        state <= state + 1;
end


// state
always @(posedge clk )
begin
    if(bps_clk)
    begin
        case(state)
        IDLE :   // 't'  di -- gao
        begin
            case(bps_cnt)
            4'd0     : uart_tx <= 0; //begin
            
            4'd1     : uart_tx <= 0;//data
            4'd2     : uart_tx <= 0;
            4'd3     : uart_tx <= 1;
            4'd4     : uart_tx <= 0;
            4'd5     : uart_tx <= 1;
            4'd6    : uart_tx <= 1;
            4'd7     : uart_tx <= 1;
            4'd8     : uart_tx <= 0;
            
            4'd9     : uart_tx <= 1; //stop
            default : uart_tx <= 1;
            endcase
        end
        
        TX_1 : //tx_1byte
        begin
            case(bps_cnt)
            4'd0 : uart_tx <= 0; //begin
            
            4'd1     : uart_tx <= pinlv[24];//data
            4'd2     : uart_tx <= pinlv[25];
            4'd3     : uart_tx <= pinlv[26];
            4'd4     : uart_tx <= pinlv[27];
            4'd5     : uart_tx <= pinlv[28];
            4'd6    : uart_tx <= pinlv[29];
            4'd7     : uart_tx <= pinlv[30];
            4'd8     : uart_tx <= pinlv[31];
            
            4'd9     : uart_tx <= 1; //stop
            default : uart_tx <= 1;
            endcase        
        end
        
        TX_2 : //tx_1byte
        begin
            case(bps_cnt)
            4'd0 : uart_tx <= 0; //begin
            
            4'd1     : uart_tx <= pinlv[16];//data
            4'd2     : uart_tx <= pinlv[17];
            4'd3     : uart_tx <= pinlv[18];
            4'd4     : uart_tx <= pinlv[19];
            4'd5     : uart_tx <= pinlv[20];
            4'd6    : uart_tx <= pinlv[21];
            4'd7     : uart_tx <= pinlv[22];
            4'd8     : uart_tx <= pinlv[23];
            
            4'd9     : uart_tx <= 1; //stop
            default : uart_tx <= 1;
            endcase        
        end    


        TX_3 : //tx_1byte
        begin
            case(bps_cnt)
            4'd0 : uart_tx <= 0; //begin
            
            4'd1     : uart_tx <= pinlv[8];//data
            4'd2     : uart_tx <= pinlv[9];
            4'd3     : uart_tx <= pinlv[10];
            4'd4     : uart_tx <= pinlv[11];
            4'd5     : uart_tx <= pinlv[12];
            4'd6    : uart_tx <= pinlv[13];
            4'd7     : uart_tx <= pinlv[14];
            4'd8     : uart_tx <= pinlv[15];
            
            4'd9     : uart_tx <= 1; //stop
            default : uart_tx <= 1;
            endcase                
        end    

        TX_4 : //tx_1byte
        begin
            case(bps_cnt)
            4'd0 : uart_tx <= 0; //begin
            
            4'd1     : uart_tx <= pinlv[0];//data
            4'd2     : uart_tx <= pinlv[1];
            4'd3     : uart_tx <= pinlv[2];
            4'd4     : uart_tx <= pinlv[3];
            4'd5     : uart_tx <= pinlv[4];
            4'd6    : uart_tx <= pinlv[5];
            4'd7     : uart_tx <= pinlv[6];
            4'd8     : uart_tx <= pinlv[7];
            
            4'd9     : uart_tx <= 1; //stop
            default : uart_tx <= 1;
            endcase                    
        end
        
        STOP :   // 'x'  di -- gao
        begin
            case(bps_cnt)
            4'd0 : uart_tx <= 0; //begin
            
            4'd1     : uart_tx <= 0;//data
            4'd2     : uart_tx <= 0;
            4'd3     : uart_tx <= 0;
            4'd4     : uart_tx <= 1;
            4'd5     : uart_tx <= 1;
            4'd6    : uart_tx <= 1;
            4'd7     : uart_tx <= 1;
            4'd8     : uart_tx <= 0;
            
            4'd9     : uart_tx <= 1; //stop
            default : uart_tx <= 1;
            endcase
        end
        
        STOP_1 :
        begin
            uart_tx <= 1;
        end
        
        default :
            uart_tx <= 1;
        endcase
    end
    else
        uart_tx <= uart_tx;

end




endmodule

/*************** 用戶定義參數(shù) *****************************/

#define MAIN_Fosc        11059200L    //define main clock

#define Baudrate1        9600        //define the baudrate, 如果使用BRT做波特率發(fā)生器,則波特率跟串口2一樣
                                    //12T mode: 600~115200 for 22.1184MHZ, 300~57600 for 11.0592MHZ

#define Baudrate2        19200        //define the baudrate2,
                                    //12T mode: 600~115200 for 22.1184MHZ, 300~57600 for 11.0592MHZ

#define        BUF_LENTH    20        //定義串口接收緩沖長(zhǎng)度

/**********************************************************/

#include    

sfr AUXR1 = 0xA2;
sfr    AUXR = 0x8E;
sfr S2CON = 0x9A;    //12C5A60S2雙串口系列
sfr S2BUF = 0x9B;    //12C5A60S2雙串口系列
sfr IE2   = 0xAF;    //STC12C5A60S2系列
sfr BRT   = 0x9C;

unsigned char     uart1_wr;        //寫指針
unsigned char     uart1_rd;        //讀指針
unsigned char     xdata RX1_Buffer[BUF_LENTH];
bit        B_TI;

unsigned char     uart2_wr;        //寫指針
unsigned char     uart2_rd;        //讀指針
unsigned char     xdata RX2_Buffer[BUF_LENTH];
bit        B_TI2;
long    temp1 = 0;
long    temp2 = 0;
long    temp_buf1 = 0;
long    temp_buf2 = 0;
long    temp_buf3 = 0;
long    temp_buf  = 0;
long    ce = 9999;
/****************** 編譯器自動(dòng)生成,用戶請(qǐng)勿修改 ************************************/

#define T1_TimerReload    (256 - MAIN_Fosc / 192 / Baudrate1)            //Calculate the timer1 reload value    at 12T mode
#define BRT_Reload        (256 - MAIN_Fosc / 12 / 16 / Baudrate2)        //Calculate BRT reload value

#define    TimeOut1        (28800 / (unsigned long)Baudrate1 + 2)
#define    TimeOut2        (28800 / (unsigned long)Baudrate2 + 2)

#define    TI2                (S2CON & 0x02) != 0
#define    RI2                (S2CON & 0x01) != 0
#define    CLR_TI2()        S2CON &= ~0x02
#define    CLR_RI2()        S2CON &= ~0x01

/**********************************************************/

/******************** 本地函數(shù)聲明 ***************/
void    uart1_init(void);

void    UART1_TxByte(unsigned char dat);

void    PrintString1(unsigned char code *puts);

void delay(char x)
{
    char i = 0;
    char t= 0;
    for(i = 0;i<110;i++)
    {
        for(t = 0;t < x;t++);
    }
}

void detect_uart()
{
    char i = 0;
    char flag = 0;
    temp1 = 0;
    for(i = 0;i <= uart1_wr ; i++)
    {
    //    UART1_TxByte(RX1_Buffer[i]);
        if(flag)
        {
            if(RX1_Buffer[i] != 'x' )
            {
                temp1 = temp1 << 8 ;
                temp1 = temp1 + RX1_Buffer[i];
    //            UART1_TxByte(RX1_Buffer[i]);
            }
            else
                temp2 = temp1;
        }
        if(RX1_Buffer[i] == 't')
        {
            flag = 1;
        }
    }
}

//void ceshi()
//{
//    ce = 0;
//    ce = ce << 8 ;
//    ce = ce + 0xff;
//    ce = ce    << 8 ;
//    ce = ce + 0x0c;
//    ce = ce << 8 ;
//    ce = ce + 0xcc;
//    ce = ce    << 8 ;
//    ce = ce + 0xcc;
////    ce = 9999;
//}

void display()
{
    char flag = 0;
    temp_buf3 = temp_buf2;
    temp_buf2 = temp_buf1;
     temp_buf1 = temp2;
    if(temp_buf3 == temp2)
    {
        temp_buf = temp2;
    }
    else
    {
        temp_buf = temp_buf;
    }
    UART1_TxByte('S');UART1_TxByte(' ');UART1_TxByte(' ');UART1_TxByte(' ');UART1_TxByte(' ');
    if(temp_buf/100000000 == 0) //bai M
    {
        UART1_TxByte(' ');
    }
    else
    {
        UART1_TxByte(temp_buf/100000000 + 0x30);
        flag  = 1;
    }

    if(temp_buf/10000000%10 == 0 )    //shi M
    {
        if(!flag)
        {
            UART1_TxByte(' ');
        }
        else
        {
             UART1_TxByte(0x30);
        }
    }
    else
    {
         UART1_TxByte(temp_buf/10000000%10 + 0x30);
        flag = 1;
    }

    if(temp_buf/1000000%10 == 0 )  //M
    {
        if(!flag)
        {
            UART1_TxByte(' ');
        }
        else
        {
             UART1_TxByte(0x30);
        }
    }
    else
    {
         UART1_TxByte(temp_buf/1000000%10 + 0x30);
        flag = 1;
    }

    if(temp_buf/100000%10 == 0 )  //bai K
    {
        if(!flag)
        {
            UART1_TxByte(' ');
        }
        else
        {
             UART1_TxByte(0x30);
        }
    }
    else
    {
         UART1_TxByte(temp_buf/100000%10 + 0x30);
        flag = 1;
    }

    if(temp_buf/10000%10 == 0 )  //shi k
    {
        if(!flag)
        {
            UART1_TxByte(' ');
        }
        else
        {
             UART1_TxByte(0x30);
        }
    }
    else
    {
         UART1_TxByte(temp_buf/10000%10 + 0x30);
        flag = 1;
    }

    if(temp_buf/1000%10 == 0 )  // K
    {
        if(!flag)
        {
            UART1_TxByte(' ');
        }
        else
        {
             UART1_TxByte(0x30);
        }
    }
    else
    {
         UART1_TxByte(temp_buf/1000%10 + 0x30);
        flag = 1;
    }

    if(temp_buf/100%10 == 0 )  //bai
    {
        if(!flag)
        {
            UART1_TxByte(' ');
        }
        else
        {
             UART1_TxByte(0x30);
        }
    }
    else
    {
         UART1_TxByte(temp_buf/100%10 + 0x30);
        flag = 1;
    }

    if(temp_buf/10%10 == 0 )  //shi
    {
        if(!flag)
        {
            UART1_TxByte(' ');
        }
        else
        {
             UART1_TxByte(0x30);
        }
    }
    else
    {
         UART1_TxByte(temp_buf/10%10 + 0x30);
        flag = 1;
    }

    if(temp_buf%10 == 0 )  //ge
    {
        if(!flag)
        {
            UART1_TxByte(' ');
        }
        else
        {
             UART1_TxByte(0x30);
        }
    }
    else
    {
         UART1_TxByte(temp_buf%10 + 0x30);
        flag = 1;
    }

}


void    main(void)
{
    char i = 0;
    uart1_rd = 0;
    uart1_wr = 0;
    uart2_rd = 0;
    uart2_wr = 0;

//    AUXR |=  0x01;        //串口1使用獨(dú)立波特率發(fā)生器, 波特率跟串口2一樣
    AUXR1 |= (1<<4);    //將UART2從P1口切換到 RXD2--P1.2切換到P4.2   TXD2---P1.3切換到P4.3
    
    uart1_init();

    PrintString1("串口1測(cè)試程序");
    
    while(1)
    {
        display();
        detect_uart();
    }
}

void    UART1_TxByte(unsigned char dat)
{
    B_TI = 0;
    SBUF = dat;
    while(!B_TI);
    B_TI = 0;
    delay(10);
}


void PrintString1(unsigned char code *puts)        //發(fā)送一串字符串
{
    for (; *puts != 0;    puts++)  UART1_TxByte(*puts);     //遇到停止符0結(jié)束
}




void    uart1_init(void)
{
    PCON |= 0x80;        //UART0 Double Rate Enable
    SCON = 0x50;        //UART0 set as 10bit , UART0 RX enable
    TMOD &= ~(1<<6);        //Timer1 Set as Timer, 12T
    TMOD = (TMOD & ~0x30) | 0x20;    //Timer1 set as 8 bits auto relaod
    TH1 = T1_TimerReload;        //Load the timer
    TR1  = 1;
    ES  = 1;
    EA = 1;
}



/**********************************************/
void UART0_RCV (void) interrupt 4
{

    if(RI)
    {
        RI = 0;
        RX1_Buffer[uart1_wr] = SBUF;
        if(++uart1_wr >= BUF_LENTH)    uart1_wr = 0;
    }

    if(TI)
    {
        TI = 0;
        B_TI = 1;
    }
}

原文標(biāo)題:MCU與FPGA串口通信

文章出處:【微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:彭菁

聲明:本文內(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)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1634

    文章

    21818

    瀏覽量

    607226
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6044

    文章

    44648

    瀏覽量

    640101
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17404

    瀏覽量

    353338

原文標(biāo)題:MCU與FPGA串口通信

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MCU軟件升級(jí)設(shè)計(jì)思路分析

    當(dāng)MCU啟動(dòng)以后運(yùn)行Bootloader程序,檢測(cè)到Param參數(shù)區(qū)域是否存在App記錄,如果存在App直接運(yùn)行App程序即可,如果不存在,則向PC機(jī)請(qǐng)求App文件。
    發(fā)表于 07-11 16:48 ?3480次閱讀
    <b class='flag-5'>MCU</b>軟件升級(jí)設(shè)計(jì)<b class='flag-5'>思路</b>分析

    FPGAMCU的區(qū)別

    FPGA和單片機(jī) (MCU)的區(qū)別 結(jié)構(gòu)上的區(qū)別 單片機(jī)(MCU)是一種微處理器,類似于電腦CPU的,它一般采用的是哈佛總線結(jié)構(gòu),或者馮諾依曼結(jié)構(gòu),對(duì)單片機(jī)的編程很大程度上要考慮到它的結(jié)構(gòu)和各個(gè)
    發(fā)表于 03-16 07:14

    fpga的圖像傳輸,顯現(xiàn)思路

    求助fpga的圖像傳輸,顯現(xiàn)思路
    發(fā)表于 11-18 15:16

    xilinx-A7 fpga 使用QSPI模式啟動(dòng),項(xiàng)目需要用MCUFPGA程序升級(jí),請(qǐng)問(wèn)MCU怎么操作SPIFLASH?

    A7_fpga 使用QSPI模式啟動(dòng),項(xiàng)目需要用MCUFPGA程序升級(jí),用MCU同時(shí)升級(jí)FPGA
    發(fā)表于 12-03 22:23

    FPGAMCU之間的連接方式

    FPGA MCU通信——異步接口(仿NAND Flash)FPGA MCU通信——異步接口MCU側(cè)開(kāi)發(fā)注意事項(xiàng)
    發(fā)表于 11-01 07:11

    基于MCUFPGA的數(shù)字式相位測(cè)量?jī)x的設(shè)計(jì)

    基于MCUFPGA的數(shù)字式相位測(cè)量?jī)x的設(shè)計(jì) Design of Digital Phase Measuring Instrument Based on MCU and FPGA
    發(fā)表于 03-17 09:19 ?49次下載

    聚焦電子創(chuàng)新設(shè)計(jì),分享MCU技術(shù)新思路

    聚焦電子創(chuàng)新設(shè)計(jì),分享MCU技術(shù)新思路 隨著世界智能化進(jìn)程的加速,在我們的日常生活中已經(jīng)隨處可見(jiàn)MCU的身影,MCU不僅提高了生活的舒適性、安全性與娛樂(lè)性,也大
    發(fā)表于 11-10 16:55 ?546次閱讀

    設(shè)計(jì)思路

    FPGA入門級(jí)的UART程序編寫思路,指導(dǎo)完成最基本的UART協(xié)議。
    發(fā)表于 04-29 14:12 ?13次下載

    FPGA設(shè)計(jì)的思路和方法初探詳細(xì)資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是FPGA設(shè)計(jì)的思路和方法初探詳細(xì)資料免費(fèi)下載。
    發(fā)表于 02-26 14:09 ?11次下載
    <b class='flag-5'>FPGA</b>設(shè)計(jì)的<b class='flag-5'>思路</b>和方法初探詳細(xì)資料免費(fèi)下載

    FPGA教程之FPGA系統(tǒng)設(shè)計(jì)的主要思路和方法初探資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是FPGA教程之FPGA系統(tǒng)設(shè)計(jì)的主要思路和方法初探資料說(shuō)明包括了:1.FPGA的適用領(lǐng)域及選型FPGA系統(tǒng)設(shè)計(jì)典
    發(fā)表于 04-04 17:19 ?53次下載
    <b class='flag-5'>FPGA</b>教程之<b class='flag-5'>FPGA</b>系統(tǒng)設(shè)計(jì)的主要<b class='flag-5'>思路</b>和方法初探資料說(shuō)明

    AGM MCU+FPGA

    ,與AG16KSDE176(+ MCU)+ SDRAM引腳對(duì)引腳兼容。MCU硬IP嵌入在FPGA邏輯結(jié)構(gòu)中,所有MCU內(nèi)部IO均可根據(jù)用戶要求連接到設(shè)備的IO墊和/或內(nèi)部
    發(fā)表于 10-25 17:21 ?23次下載
    AGM <b class='flag-5'>MCU+FPGA</b>

    FPGA MCU FSMC通信接口——NAND Flash模式

    FPGA MCU通信——異步接口(仿NAND Flash)FPGA MCU通信——異步接口MCU側(cè)開(kāi)發(fā)注意事項(xiàng)
    發(fā)表于 10-26 11:51 ?28次下載
    <b class='flag-5'>FPGA</b> <b class='flag-5'>MCU</b> FSMC通信接口——NAND Flash模式

    遠(yuǎn)程升級(jí)單片機(jī)程序設(shè)計(jì)思路

    關(guān)注+星標(biāo)公眾號(hào),不錯(cuò)過(guò)精彩內(nèi)容來(lái)源 | 嵌入式技術(shù)開(kāi)發(fā)之前給大家分享過(guò)IAP升級(jí)APP的例子,今天為大家分享一下遠(yuǎn)程升級(jí)單片機(jī)的設(shè)計(jì)思路。在物聯(lián)網(wǎng)應(yīng)用中,遠(yuǎn)程IAP升級(jí)MCU程序是一項(xiàng)...
    發(fā)表于 12-02 11:06 ?13次下載
    遠(yuǎn)程升級(jí)單片機(jī)<b class='flag-5'>程序</b>設(shè)計(jì)<b class='flag-5'>思路</b>

    超低功耗MCU的選型技巧與設(shè)計(jì)思路

    循序漸進(jìn)式的功耗優(yōu)化已經(jīng)不再是超低功耗mcu的游戲規(guī)則,而是“突飛猛進(jìn)”模式,與功耗相關(guān)的很多指標(biāo)都不斷刷新記錄。我們?cè)谶x擇合適的超低功耗mcu時(shí)要掌握必要的技巧,在應(yīng)用時(shí)還需要一些設(shè)計(jì)方向與思路才能夠更好的應(yīng)用。
    的頭像 發(fā)表于 08-04 14:46 ?1892次閱讀

    MCUFPGA的區(qū)別和聯(lián)動(dòng)

    微控制器單元(MCU)和現(xiàn)場(chǎng)可編程門陣列(FPGA)是兩種廣泛應(yīng)用于電子設(shè)計(jì)領(lǐng)域的集成電路。它們各自具有獨(dú)特的特點(diǎn)和應(yīng)用場(chǎng)景,同時(shí)也可以在某些項(xiàng)目中實(shí)現(xiàn)聯(lián)動(dòng),以發(fā)揮各自的優(yōu)勢(shì)。 MCUFPG
    的頭像 發(fā)表于 11-01 13:51 ?1224次閱讀
    主站蜘蛛池模板: 亚洲色图综合图片 | xxxx日本69xxxxx| 日本大片黄色 | 欧美亚洲啪啪 | 高清毛片aaaaaaaaa片 | 亚洲成人精品在线 | 天天操夜夜操天天操 | 欧美色欧美亚洲高清在线视频 | 欧美色图 亚洲 | 中文字幕1区 | 天天爽天天狼久久久综合 | 天天看片天天干 | 欧美一级特黄啪啪片免费看 | 九九碰 | 国产热 | 黄色免费片 | 亚洲成人伊人网 | 好爽~~~~嗯~~~再快点明星 | 男人女人的免费视频网站 | 久久vs国产综合色大全 | 亚洲羞羞裸色私人影院 | 日本三级黄在线观看 | 俄罗斯一级特黄黄大片 | 日本一区二区三区免费看 | 久久夜色撩人精品国产 | 黄视频国产 | 亚洲午夜久久 | 国产逼逼视频 | 色综合久久中文字幕网 | 亚洲乱码一区二区三区在线观看 | 优优优色| 国产精品虐乳在线播放 | 欧美猛妇色xxxxxbbbb | av天天看| 国产精品7m凸凹视频分类大全 | 韩国三级hd中文字幕好大 | 猛操在线 | 很黄很暴力 很污秽的小说 很黄很黄叫声床戏免费视频 | 欧美小网站 | 人人做人人澡人人人爽 | 天堂激情|