一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

瑞薩e2studio----Code Flash/Data Flash讀寫(xiě)

RA生態(tài)工作室 ? 2021-11-26 17:17 ? 次閱讀
pYYBAGGA3i6Af0z4AABdWrtWoBM374.png

1.概述

本篇文章主要介紹如何使用e2studio對(duì)瑞薩進(jìn)行Flash配置,并且分別對(duì)Code Flash & Data Flash進(jìn)行讀寫(xiě)操作。

Flash有Code Flash(儲(chǔ)存程序代碼)以及Data Flash(儲(chǔ)存一般數(shù)據(jù)),其中Code Flash主要以NOR型為主,儲(chǔ)存系統(tǒng)程序代碼及小量數(shù)據(jù);而Data Flash則是以NAND型為主,用于儲(chǔ)存大量數(shù)據(jù)。

2.硬件準(zhǔn)備

首先需要準(zhǔn)備一個(gè)開(kāi)發(fā)板,這里我準(zhǔn)備的是芯片型號(hào) R7FA2L1AB2DFL 的開(kāi)發(fā)板。

3.新建工程

4954818c-4c51-11ec-9483-dac502259ad0.png

4.工程模板

4996dda2-4c51-11ec-9483-dac502259ad0.png

5.保存工程路徑

49c3d00a-4c51-11ec-9483-dac502259ad0.png

6.芯片配置

本文中使用R7FA2L1AB2DFL來(lái)進(jìn)行演示。

4a023700-4c51-11ec-9483-dac502259ad0.png

7

7.工程模板選擇

4a151992-4c51-11ec-9483-dac502259ad0.png

8.Flash配置

點(diǎn)擊 Stacks -> New Stack -> Driver -> Storage -> Flash Driver on r_flash_lp。

4a4bd040-4c51-11ec-9483-dac502259ad0.png

9.Flash屬性配置

4a7f1af4-4c51-11ec-9483-dac502259ad0.png

10.設(shè)置E2STUDIO堆棧

4ac101bc-4c51-11ec-9483-dac502259ad0.png

11.e2studio的重定向printf設(shè)置

4ad24f8a-4c51-11ec-9483-dac502259ad0.png

C++ 構(gòu)建->設(shè)置->GNU ARM Cross C Linker->Miscellaneous去掉Other linker flags中的 “--specs=rdimon.specs”

4afac30c-4c51-11ec-9483-dac502259ad0.png

12.printf輸出重定向到串口

打印最常用的方法是printf,所以要解決的問(wèn)題是將printf的輸出重定向到串口,然后通過(guò)串口將數(shù)據(jù)發(fā)送出去。

注意一定要加上頭文件#include


#ifdef __GNUC__                                 //串口重定向
    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
    #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
        err = R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)&ch, 1);
        if(FSP_SUCCESS != err) __BKPT();
        while(uart_send_complete_flag == false){}
        uart_send_complete_flag = false;
        return ch;
}

int _write(int fd,char *pBuffer,int size)
{
    for(int i=0;i;i++)>

13.R_FLASH_LP_Open()函數(shù)原型

4b09c154-4c51-11ec-9483-dac502259ad0.png

故可以用R_FLASH_LP_Open ()函數(shù)進(jìn)行初始化開(kāi)啟初始化Flash。


 /* Open the flash lp instance. */
     fsp_err_t err = R_FLASH_LP_Open(&g_flash0_ctrl, &g_flash0_cfg);
    assert(FSP_SUCCESS == err);

14.R_FLASH_LP_Erase()函數(shù)原型

4b58d244-4c51-11ec-9483-dac502259ad0.png

故可以用R_FLASH_LP_Erase()函數(shù)進(jìn)行擦除指定的代碼或數(shù)據(jù)閃存塊。


 /* Erase 1 block of code flash starting at block 62. */
    err = R_FLASH_LP_Erase(&g_flash0_ctrl, FLASH_CF_BLOCK_62, 1);
    assert(FSP_SUCCESS == err);

15.R_FLASH_LP_StatusGet()函數(shù)原型

4b6c0dfa-4c51-11ec-9483-dac502259ad0.png

故可以用R_FLASH_LP_StatusGet()函數(shù)對(duì)Code Flash或者Data Flash進(jìn)行寫(xiě)數(shù)據(jù)。

/* Write 32 bytes to the first block of data flash. */
    err = R_FLASH_LP_Write(&g_flash0_ctrl, (uint32_t) g_src_uint8, FLASH_CF_BLOCK_62, g_src_uint8_length);
    assert(FSP_SUCCESS == err);

16.R_FLASH_L

4b6c0dfa-4c51-11ec-9483-dac502259ad0.png

故可以用R_FLASH_LP_Write()函數(shù)對(duì)Code Flash或者Data Flash進(jìn)行寫(xiě)數(shù)據(jù)。

 /* Write 32 bytes to the first block of data flash. */
    err = R_FLASH_LP_Write(&g_flash0_ctrl, (uint32_t) g_src_uint8, FLASH_CF_BLOCK_62, g_src_uint8_length);
    assert(FSP_SUCCESS == err);

17.R_FLASH_LP_StatusGet()函數(shù)原型

4ba9e2d8-4c51-11ec-9483-dac502259ad0.png

對(duì)Data Flash進(jìn)行寫(xiě)操作時(shí)候,數(shù)據(jù)可以在后臺(tái)運(yùn)行,故可以用R_FLASH_LP_StatusGet()函數(shù)查詢是否執(zhí)行完畢。

/* Wait until the current flash operation completes. */
    do
    {
        err = R_FLASH_LP_StatusGet(&g_flash0_ctrl, &status);
    } while ((FSP_SUCCESS == err) && (FLASH_STATUS_BUSY == status));

18.Code Flash

對(duì)Code Flash進(jìn)行讀寫(xiě)操作時(shí)候,特別要注意寫(xiě)的地址,因?yàn)槿绻麑?xiě)的不對(duì),會(huì)覆蓋到代碼區(qū),造成運(yùn)行錯(cuò)誤,同時(shí)對(duì)于擦除,是一塊的數(shù)據(jù)都會(huì)直接擦除掉。

在RA2L1中,Code flash有2種規(guī)格,分別是128KB和256KB,每塊大小為2KB。

4bea6a2e-4c51-11ec-9483-dac502259ad0.png

為了兼容其他的型號(hào),向Block62種寫(xiě)入數(shù)據(jù)并且讀取出來(lái),地址范圍是0x0001F000 - 0x0001F800。

使用R_FLASH_LP_Write()寫(xiě)入的時(shí)候,寫(xiě)入的是字節(jié)為單位,故num_bytes為g_src_uint8_length*1;


#define FLASH_CF_BLOCK_62               0x0001F000U /*   2 KB: 0x0001F000 - 0x0001F800 */
volatile uint8_t g_src_uint8[4]={0x1a,0x24,0x46,0x6a};
volatile uint8_t  g_src_uint8_length=4;
 /* Write 32 bytes to the first block of data flash. */
    err = R_FLASH_LP_Write(&g_flash0_ctrl, (uint32_t) g_src_uint8, FLASH_CF_BLOCK_62, g_src_uint8_length);
    assert(FSP_SUCCESS == err);
    assert(0 == memcmp(g_src_uint8, (uint8_t *) FLASH_CF_BLOCK_62, g_src_uint8_length));

19.Data Flash

對(duì)Data Flash進(jìn)行讀寫(xiě)操作時(shí)候,特別要注意要等待Data Flash寫(xiě)完才能進(jìn)行后續(xù)讀寫(xiě)操作。

在RA2L1中, Data flash都是8KB的,每塊大小為1KB 。

4c1b4c8e-4c51-11ec-9483-dac502259ad0.png

向Block0種寫(xiě)入數(shù)據(jù)并且讀取出來(lái),地址范圍是0x40100000 - 0x401003FF。

使用R_FLASH_LP_Write()寫(xiě)入的時(shí)候,寫(xiě)入的是字節(jié)為單位,故num_bytes為g_src_uint8_length*1;

#define FLASH_DF_BLOCK_0               0x40100000U  /*   1 KB: 0x40100000 - 0x401003FF */
volatile uint8_t g_src_uint8[4]={0x1a,0x24,0x46,0x6a};
volatile uint8_t  g_src_uint8_length=4;
flash_status_t status;
/* Write 32 bytes to the first block of data flash. */
err = R_FLASH_LP_Write(&g_flash0_ctrl, (uint32_t) g_src_uint8, FLASH_DF_BLOCK_0, g_src_uint8_length);
assert(FSP_SUCCESS == err);
/* Wait until the current flash operation completes. */
do
{
err = R_FLASH_LP_StatusGet(&g_flash0_ctrl, &status);
} while ((FSP_SUCCESS == err) && (FLASH_STATUS_BUSY == status));

20.演示效果

向Data Flash地址0x40100000寫(xiě)入{0x1a,0x24,0x46,0x6a}和{0xaabbccdd,0x11111111,0x22222222,0x33333333,0x44444444}

向Code Flash地址0x0001F000寫(xiě)入{0x1a,0x24,0x46,0x6a}和{0xaabbccdd,0x11111111,0x22222222,0x33333333,0x44444444}

通過(guò)串口打印出的結(jié)果如下所示。

4c659abe-4c51-11ec-9483-dac502259ad0.png

內(nèi)存地址查詢結(jié)果如下所示。

4ca84a8a-4c51-11ec-9483-dac502259ad0.png4cde8eba-4c51-11ec-9483-dac502259ad0.png

21.完整代碼

#include "hal_data.h"
#include 
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER

fsp_err_t err = FSP_SUCCESS;
volatile bool uart_send_complete_flag = false;
void user_uart_callback (uart_callback_args_t * p_args)
{
    if(p_args->event == UART_EVENT_TX_COMPLETE)
    {
        uart_send_complete_flag = true;
    }
}
#ifdef __GNUC__                                 //串口重定向
    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
    #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
        err = R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)&ch, 1);
        if(FSP_SUCCESS != err) __BKPT();
        while(uart_send_complete_flag == false){}
        uart_send_complete_flag = false;
        return ch;
}
int _write(int fd,char *pBuffer,int size)
{
    for(int i=0;ievent;
}

#define FLASH_DF_BLOCK_0               0x40100000U  /*   1 KB: 0x40100000 - 0x401003FF */
#define FLASH_CF_BLOCK_62               0x0001F000U /*   2 KB: 0x0001F000 - 0x0001F800 */
/*******************************************************************************************************************//**
 * main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used.  This function
 * is called by main() when no RTOS is used.
 **********************************************************************************************************************/
void hal_entry(void)
{
    /* TODO: add your own code here */
    err = R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);
    assert(FSP_SUCCESS == err);
    volatile uint8_t  g_src_uint8_length=4;
    volatile uint8_t g_src_uint8[4]={0x1a,0x24,0x46,0x6a};
    volatile uint8_t  g_src_uint32_length=5;
    volatile uint32_t g_src_uint32[5]={
    0xaabbccdd,0x11111111,0x22222222,0x33333333,0x44444444
    };
    /********************code flash*******************************/
    flash_result_t blank_check_result;
    /* Open the flash lp instance. */
     fsp_err_t err = R_FLASH_LP_Open(&g_flash0_ctrl, &g_flash0_cfg);
    assert(FSP_SUCCESS == err);
     /* Disable interrupts to prevent vector table access while code flash is in P/E mode. */
    __disable_irq();
    /* Erase 1 block of code flash starting at block 62. */
    err = R_FLASH_LP_Erase(&g_flash0_ctrl, FLASH_CF_BLOCK_62, 1);
    assert(FSP_SUCCESS == err);
    /* Write 32 bytes to the first block of data flash. */
    err = R_FLASH_LP_Write(&g_flash0_ctrl, (uint32_t) g_src_uint8, FLASH_CF_BLOCK_62, g_src_uint8_length);
    assert(FSP_SUCCESS == err);
    assert(0 == memcmp(g_src_uint8, (uint8_t *) FLASH_CF_BLOCK_62, g_src_uint8_length));
    err = R_FLASH_LP_Write(&g_flash0_ctrl, (uint32_t) g_src_uint32, FLASH_CF_BLOCK_62+g_src_uint8_length*1, g_src_uint32_length*4);
    assert(FSP_SUCCESS == err);
    assert(0 == memcmp(g_src_uint32, (uint8_t *) FLASH_CF_BLOCK_62+g_src_uint8_length*1, g_src_uint32_length*4));
    /* Enable interrupts after code flash operations are complete. */
    __enable_irq();
    printf("\n/********************code flash*******************************/\n");
    PrintFlashTest(6,FLASH_CF_BLOCK_62);
    /********************data flash*******************************/
    interrupt_called = false;
    /* Erase 1 block of data flash starting at block 0. */
    err = R_FLASH_LP_Erase(&g_flash0_ctrl, FLASH_DF_BLOCK_0, 1);
    assert(FSP_SUCCESS == err);
    while (!interrupt_called)
    {
    ;
    }
    assert(FLASH_EVENT_ERASE_COMPLETE == flash_event);
    interrupt_called = false;
    flash_status_t status;
    /* Write 32 bytes to the first block of data flash. */
    err = R_FLASH_LP_Write(&g_flash0_ctrl, (uint32_t) g_src_uint8, FLASH_DF_BLOCK_0, g_src_uint8_length);
    assert(FSP_SUCCESS == err);

    /* Wait until the current flash operation completes. */
    do
    {
        err = R_FLASH_LP_StatusGet(&g_flash0_ctrl, &status);
    } while ((FSP_SUCCESS == err) && (FLASH_STATUS_BUSY == status));

    err = R_FLASH_LP_Write(&g_flash0_ctrl, (uint32_t) g_src_uint32, FLASH_DF_BLOCK_0+g_src_uint8_length*1, g_src_uint32_length*4);
    assert(FSP_SUCCESS == err);
    /* Wait until the current flash operation completes. */
    do
    {
        err = R_FLASH_LP_StatusGet(&g_flash0_ctrl, &status);
    } while ((FSP_SUCCESS == err) && (FLASH_STATUS_BUSY == status));

    /* If the interrupt wasn't called process the error. */
    assert(interrupt_called);
    /* If the event wasn't a write complete process the error. */
    assert(FLASH_EVENT_WRITE_COMPLETE == flash_event);
    /* Verify the data was written correctly. */
    assert(0 == memcmp(g_src_uint8, (uint8_t *) FLASH_DF_BLOCK_0, g_src_uint8_length));
    assert(0 == memcmp(g_src_uint32, (uint8_t *) FLASH_DF_BLOCK_0+g_src_uint8_length*1, g_src_uint32_length*4));
    printf("\n/********************data flash*******************************/\n");
    PrintFlashTest(6,FLASH_DF_BLOCK_0);
    while(1)
    {
        R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS); // NOLINT100->160
    }
#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif
}
/*FLASH讀取打印程序*/
void PrintFlashTest(uint32_t L,uint32_t addr)
{
    uint32_t i=0;
    for(i=0;i;i++)>;i++)>

原創(chuàng):By RA_Billy Xiao


原文標(biāo)題:瑞薩e2studio----Code Flash&Data Flash讀寫(xiě)

文章出處:【微信公眾號(hào):RA生態(tài)工作室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17718

    瀏覽量

    358226
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9270

    瀏覽量

    373537
  • 嵌入式
    +關(guān)注

    關(guān)注

    5125

    文章

    19438

    瀏覽量

    313093
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5389

    瀏覽量

    100901
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用e2studio軟件新建RA系列MCU工程

    打開(kāi)e2studio軟件,會(huì)默認(rèn)彈出一個(gè)名為“e2studio啟動(dòng)程序”的小窗口,它提示我們“選擇一個(gè)目錄作為工作空間”。如下圖所示。
    的頭像 發(fā)表于 04-30 14:41 ?456次閱讀
    使用<b class='flag-5'>e2studio</b>軟件新建<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>RA系列MCU工程

    【RA-Eco-RA4M2開(kāi)發(fā)板評(píng)測(cè)】初學(xué)-使用flash programmer燒錄程序

    本人剛?cè)肟硬痪?,?duì)單片機(jī)的熱情很高,于是也加入了的板子申請(qǐng)隊(duì)伍,很榮幸也成為了試用者之一,此前對(duì)于的板子從未接觸過(guò),包括對(duì)于使用e2stud
    發(fā)表于 04-29 17:28

    【RA-Eco-RA4M2開(kāi)發(fā)板評(píng)測(cè)】試用flash programmer燒錄

    本人剛?cè)肟硬痪?,?duì)單片機(jī)的熱情很高,于是也加入了的板子申請(qǐng)隊(duì)伍,很榮幸也成為了試用者之一,此前對(duì)于的板子從未接觸過(guò),包括對(duì)于使用e2stud
    發(fā)表于 04-28 19:12

    RA8D1單片機(jī)IO中斷配置實(shí)現(xiàn)方法

    本文為結(jié)合e2 studio工具,以及CPKCOR_RA8D1B評(píng)估板,給大家講述RA8
    的頭像 發(fā)表于 04-09 15:05 ?664次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b>RA8D1單片機(jī)IO中斷配置實(shí)現(xiàn)方法

    調(diào)試時(shí)Memory窗口中Flash內(nèi)容不更新的原因和解決辦法

    調(diào)試時(shí)在代碼中對(duì)Flash進(jìn)行寫(xiě)操作時(shí)(比如Bootloader對(duì)Code Flash進(jìn)行升級(jí)操作,Application對(duì)Data Flash
    的頭像 發(fā)表于 04-01 09:18 ?221次閱讀
    調(diào)試時(shí)Memory窗口中<b class='flag-5'>Flash</b>內(nèi)容不更新的原因和解決辦法

    RA2L1入門學(xué)習(xí)】+e2_studio軟件安裝及使用

    一、e2_studio軟件安裝及使用 注冊(cè)e2 studio | Renesas 電子 下載軟件 安裝 4.創(chuàng)建工程 更改工程位置 新
    發(fā)表于 03-27 13:25

    RA8快速上手指南:Cortex-M85內(nèi)核RA8開(kāi)發(fā)環(huán)境搭建 并點(diǎn)亮一個(gè)LED

    因?yàn)镃ortex-M內(nèi)核,RA8系列單片機(jī)支持多種市面上常見(jiàn)的開(kāi)發(fā)環(huán)境,像Keil MDK、IAR EWARM等,而本文講述的是自家官方的IDE(
    的頭像 發(fā)表于 03-17 14:35 ?682次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b>RA8快速上手指南:Cortex-M85內(nèi)核<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>RA8開(kāi)發(fā)環(huán)境搭建 并點(diǎn)亮一個(gè)LED

    e2studio和Keil簡(jiǎn)介及如何安裝e2studio開(kāi)發(fā)環(huán)境

    (簡(jiǎn)稱為e2e2s)是電子的一款包含代碼開(kāi)發(fā)、構(gòu)建和調(diào)試的開(kāi)發(fā)工具。e2studio基于開(kāi)
    的頭像 發(fā)表于 03-13 17:27 ?815次閱讀
    <b class='flag-5'>e</b>2<b class='flag-5'>studio</b>和Keil簡(jiǎn)介及如何安裝<b class='flag-5'>e</b>2<b class='flag-5'>studio</b>開(kāi)發(fā)環(huán)境

    RA2L1入門學(xué)習(xí)】RA2L1開(kāi)發(fā)環(huán)境搭建

    e2 studio 和 FSP 的下載、安裝及使用指南 1. 什么是 e2 studio 和 FSP? e2
    發(fā)表于 03-07 11:33

    RA2L1入門學(xué)習(xí)】00. 開(kāi)箱 + 點(diǎn)燈

    常用到的。 【點(diǎn)燈】 開(kāi)發(fā)MCU是要用到E2 Studio的(簡(jiǎn)稱e2s)來(lái)開(kāi)發(fā)以及編譯程序。通過(guò)Renesas
    發(fā)表于 03-07 11:07

    基于RA0E1開(kāi)發(fā)板的IIC OLED測(cè)試

    基于前面關(guān)于e2 studio開(kāi)發(fā)軟件的使用,以及工程測(cè)試基礎(chǔ),本文進(jìn)一步探索實(shí)現(xiàn)硬件IIC OLED的文字和圖片顯示。
    的頭像 發(fā)表于 02-13 13:36 ?492次閱讀
    基于<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>RA0<b class='flag-5'>E</b>1開(kāi)發(fā)板的IIC OLED測(cè)試

    e2 studio中Reality AI組件的使用方法

    本實(shí)驗(yàn)將為您介紹如何在e2 studio中使用Reality AI相關(guān)組件來(lái)進(jìn)行AI開(kāi)發(fā),主要涉及如何使用Reality AI Data shipper/collector,Reality AI
    的頭像 發(fā)表于 01-21 13:48 ?725次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>e2</b> <b class='flag-5'>studio</b>中Reality AI組件的使用方法

    e2studio(1)----芯片之搭建FSP環(huán)境

    視頻教學(xué) 樣品申請(qǐng) 請(qǐng)勿添加外鏈 e2studio軟件 e2studio的集成開(kāi)發(fā)環(huán)境,F(xiàn)SP 提供了眾多可提高效率的工具,用于開(kāi)發(fā)針對(duì)
    發(fā)表于 09-30 15:28

    STM32CUBEMX(10)--Flash讀寫(xiě)

    概述 本例程主要講解如何對(duì)芯片自帶Flash進(jìn)行讀寫(xiě),用芯片內(nèi)部Flash可以對(duì)一些需要斷電保存的數(shù)據(jù)進(jìn)行保存,無(wú)需加外部得存儲(chǔ)芯片,本例程采用的是STM32F030R8T6,64K大小的Fl
    發(fā)表于 09-10 15:36

    如何使用e2studio對(duì)單片機(jī)進(jìn)行GPIO輸出

    本篇文章主要介紹如何使用e2studio對(duì)單片機(jī)進(jìn)行GPIO輸出,并以LED顯示。
    的頭像 發(fā)表于 07-30 16:12 ?972次閱讀
    如何使用<b class='flag-5'>e2studio</b>對(duì)<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>單片機(jī)進(jìn)行GPIO輸出