国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

還在老一套?STM32使用新KEIL5的IDE,全新開發(fā)模式RTE介紹及使用

這篇具有很好參考價(jià)值的文章主要介紹了還在老一套?STM32使用新KEIL5的IDE,全新開發(fā)模式RTE介紹及使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Keil新版本出來(lái)了,推出了一種全新開發(fā)模式RTE框架(?Run-Time Environment),更好用了。然而網(wǎng)上的教程資料竟還都是把Keil5當(dāng)成Keil4來(lái)用,直接不使用這個(gè)功能。當(dāng)前正點(diǎn)原子或野火的教程提供的例程雖有提到Keil5,但也是基本上當(dāng)Keil4來(lái)用,還是傳統(tǒng)的模式或標(biāo)準(zhǔn)庫(kù)或HAL庫(kù)。當(dāng)然這用來(lái)學(xué)習(xí)挺好,但是如果用來(lái)開發(fā)建議還是使用下Keil5的RTE框架。

現(xiàn)在的單片機(jī)開發(fā)早已經(jīng)變天,早已不是十年前刀耕火種的樣子,開發(fā)和使用越來(lái)越友好了。單片機(jī)的開發(fā)趨勢(shì)越來(lái)越接近于軟件層開發(fā),底層驅(qū)動(dòng)的封裝變成了芯片廠家做的工作。這是一種趨勢(shì),對(duì)于開發(fā)使用人員而言,可以更專注于需求和效率。

RTE框架直接給你提供了現(xiàn)成的板級(jí)驅(qū)動(dòng)包和可視化模塊配置,你需要做的只是配置和在驅(qū)動(dòng)層之上開發(fā)應(yīng)用就行了。且包含了包管理功能,包和組件使用和升級(jí)更方便了,這是一大特色,其他廠家都可以貢獻(xiàn)和提供驅(qū)動(dòng)包,其他三方都可以提供模塊組件,開放共建。包括嵌入式內(nèi)核你都不要移植,且可以切換想用哪個(gè)用哪個(gè),不得不佩服老外IDE做的是真用心啊。

希望國(guó)產(chǎn)IDE軟件也多學(xué)習(xí)學(xué)習(xí)老外,如果國(guó)產(chǎn)軟件也能這么強(qiáng)大好用該多好,那時(shí)候國(guó)產(chǎn)芯片想不火都難。STM32的火是有原因的,因?yàn)樗牟僮魇褂蒙媳绕鹌渌麊纹瑱C(jī)都簡(jiǎn)單。這得益于ST這家公司的睿智,先是提供標(biāo)準(zhǔn)庫(kù),后HAL庫(kù),如今ST推出的STM32CubeMX配置軟件,就是想讓你更簡(jiǎn)單更好用,易用性上甩其他廠家?guī)讞l街,就是讓你只用它家的就行了,以此來(lái)籠絡(luò)你,壟斷你,但它只能耕stm32這一畝三分地。

在單片機(jī)領(lǐng)域,基于Arm Cortex M內(nèi)核的產(chǎn)品已經(jīng)占據(jù)很大的一部分份額,比較知名的ST的STM32系列,NXP的LPC系列都是其中非常棒的產(chǎn)品。各個(gè)廠家為了用戶能更好的使用這些單片機(jī)產(chǎn)品,都推出了各自的軟件工具和SDK,以便幫助用戶簡(jiǎn)單快速的開發(fā)軟件。Arm公司為了防止Arm軟件開發(fā)的碎片化,提出并實(shí)施了CMSIS,這個(gè)是Arm公司與多家不同的芯片和軟件供應(yīng)商一起緊密合作定義的,提供了內(nèi)核與外設(shè)、實(shí)時(shí)操作系統(tǒng)和中間設(shè)備之間的通用接口。后續(xù)用戶需要做的僅是在應(yīng)用層上做開發(fā)就可以了。

CMSIS的整體架構(gòu):

還在老一套?STM32使用新KEIL5的IDE,全新開發(fā)模式RTE介紹及使用

還在老一套?STM32使用新KEIL5的IDE,全新開發(fā)模式RTE介紹及使用

前言

曾記得十年前使用STM32時(shí)那叫一個(gè)麻煩,參考正點(diǎn)原子和野火的教程學(xué)習(xí)直接操作寄存器。

其實(shí)這也沒(méi)啥,畢竟這是傳統(tǒng)的單片機(jī)的開發(fā)方式。如之前的51,avr,pic,msp430,我想這幾款單片機(jī)都玩過(guò)的肯定都是古董玩家,想當(dāng)年這幾款單片機(jī)沒(méi)少折騰我,當(dāng)然都是對(duì)著手冊(cè)操作寄存器,也沒(méi)啥難的,就是很低效,換一種單片機(jī)就得先熟悉它的風(fēng)格。

現(xiàn)在單片機(jī)開發(fā)變簡(jiǎn)單了許多,這歸功于stm32做的不錯(cuò)。之所以stm32它一直很火,是因?yàn)樗_創(chuàng)了一個(gè)先河,j降低了單片機(jī)的門檻,讓單片機(jī)操作越來(lái)越簡(jiǎn)單了。ST官方最先推出了標(biāo)準(zhǔn)庫(kù),然而依舊覺(jué)得不是很簡(jiǎn)單。再后來(lái)ST官方又推出了HAL庫(kù),接著STM32CubeMX配置軟件的橫空出世,讓STM32可視化配置硬件參數(shù)和寄存器,變更好用了。但STM32CubeMX僅用在ST的產(chǎn)品上,深度綁定。

這里要介紹下Keil5的全新的開發(fā)方式RTE框架的使用。

可視化的最新的keil5軟件真強(qiáng)大,但網(wǎng)上提供的教程大多是基于傳統(tǒng)keil4的開發(fā)模式,有的雖然標(biāo)題提到了RTE這種全新的包管理模式,但是還是混雜著標(biāo)準(zhǔn)庫(kù)或HAL庫(kù)的概念讓人混淆不清,還在教你如何手工添加庫(kù)和文件,沒(méi)體現(xiàn)RTE的好處和使用。

其實(shí)RET這種模式下就不要提什么標(biāo)準(zhǔn)庫(kù)或HAL庫(kù)了,就當(dāng)是各個(gè)廠家提供好了現(xiàn)成的板級(jí)驅(qū)動(dòng)就好。你需要在做些配置且在驅(qū)動(dòng)層之上開發(fā)應(yīng)用。驅(qū)動(dòng)層之下不用你過(guò)多關(guān)注,驅(qū)動(dòng)層和常用模塊都已提供好了。這是未來(lái)的一種趨勢(shì),因此建議嘗試和使用下Keil5的RTE開發(fā)模式。

我通過(guò)查閱官網(wǎng)拿到第一手資料,在此整理下我的總結(jié)分享給大家。后續(xù)再看到應(yīng)用層直接操作寄存器和板級(jí)接口操作的,不要再這樣混著用啦,這種非RTE框架模式的本意。

不知你有沒(méi)有覺(jué)察到,Keil5引入的這一開發(fā)理念很先進(jìn)。會(huì)成為今后的主流趨勢(shì),值得我們學(xué)習(xí)借鑒。以后軟件開發(fā)者可以把精力放在快速的開發(fā)應(yīng)用和創(chuàng)新上,驅(qū)動(dòng)操作封裝成了芯片廠家要做的事。當(dāng)多數(shù)國(guó)人還在卷單片機(jī)寄存器操作的時(shí)候,老外又一次走在了前列。Keil5不愧是王者,IDE好用易用性上排第一。以后不但芯片硬件上可替換,軟件應(yīng)用層也可以做到很少改動(dòng)。


以下是我的分享,希望對(duì)大家有所幫助。另外,本文中如果有需改善的地方,歡迎留言,謝謝!

什么是RTE?

Keil5 最新的 RTE 框架是一種用于配置嵌入式軟件應(yīng)用程序的軟件組件。它提供了圖形用戶界面 (GUI),使開發(fā)人員可以輕松配置系統(tǒng)組件,如處理器外設(shè)、通信接口和內(nèi)存管理,而不需要手動(dòng)編寫代碼。相比原來(lái)使用的標(biāo)準(zhǔn)庫(kù)或 HAL 庫(kù)的方式,Keil5 RTE 框架的優(yōu)點(diǎn)在于它簡(jiǎn)化了開發(fā)流程,提供了一種簡(jiǎn)單直觀的配置方法,并減少了必須手動(dòng)編寫的代碼數(shù)量,可以節(jié)省時(shí)間并減少錯(cuò)誤。

還在老一套?STM32使用新KEIL5的IDE,全新開發(fā)模式RTE介紹及使用

軟件組件介紹

MDK 提供軟件組件(Software Components),用于使用稱為運(yùn)行時(shí)環(huán)境(RTE) 的框架創(chuàng)建應(yīng)用程序。這些組件以獨(dú)立于 μVision 安裝的軟件包形式提供。軟件包由 Arm 或第三方提供。

Software Components

還在老一套?STM32使用新KEIL5的IDE,全新開發(fā)模式RTE介紹及使用

圖為Arm Keil提供的軟件包,結(jié)構(gòu)清晰。軟件包可以包含設(shè)備支持,包括驅(qū)動(dòng)程序、CMSIS 庫(kù)和中間件組件。其中的設(shè)備系列包,由各個(gè)芯片廠家提供。

設(shè)備系列包 (DFP):包含用于微控制器設(shè)備系列的 CMSIS 系統(tǒng)/啟動(dòng)、驅(qū)動(dòng)程序和閃存算法。
CMSIS:包含通用 CMSIS 組件(CORE、DSP 和 NN 庫(kù),以及 RTOS 實(shí)現(xiàn))。
MDK-Middleware:包含屬于 MDK-Professional 一部分的中間件庫(kù)。
在項(xiàng)目中使用軟件組件:

1.使用Pack Installer安裝或更新包含預(yù)構(gòu)建軟件組件的軟件包。
2.使用窗口Manage Run-Time Environment將軟件組件添加到項(xiàng)目中。添加的組件顯示在“項(xiàng)目”窗口中。
3.(可選)設(shè)置組件的選項(xiàng)以指定屬性。
4.(可選)為特定目標(biāo)選擇軟件包。

新項(xiàng)目結(jié)構(gòu)介紹

不要再用以往傳統(tǒng)的手動(dòng)創(chuàng)建所有目錄,再引入HAL庫(kù)的落后方式了。當(dāng)然可以在創(chuàng)建一些應(yīng)用層的目錄。其他層的按照配置出來(lái)的已經(jīng)很清晰了。以下舉例介紹下最的項(xiàng)目結(jié)構(gòu)。

還在老一套?STM32使用新KEIL5的IDE,全新開發(fā)模式RTE介紹及使用

?以上目錄中,默認(rèn)配置生成的是綠色顯示的。Device就相當(dāng)于底層驅(qū)動(dòng)層,驅(qū)動(dòng)層里面小寫字母開頭的文件,是各個(gè)廠家官方提供的固件操作功能。大寫字母開頭的就是驅(qū)動(dòng)接口及實(shí)現(xiàn)。在應(yīng)用層使用時(shí)最好嚴(yán)格分層,不要混合調(diào)用固件接口或操作寄存器了,而是應(yīng)通過(guò)大寫字母開頭的驅(qū)動(dòng)接口去配置和調(diào)用。(注:截圖部分的代碼僅為示例。它不好的地方是,里面摻雜使用了如GPIOD-BSRR這種寄存器操作,后文有正解。)

CMSIS是一個(gè)標(biāo)準(zhǔn),以上CMSIS里的是標(biāo)準(zhǔn)驅(qū)動(dòng)的實(shí)現(xiàn),其中的串口驅(qū)動(dòng)和操作系統(tǒng)內(nèi)核放置在里面。那個(gè)Board Support算是個(gè)模塊兒化組件,提供了一些通用的硬件模塊操作,如以上的是個(gè)跟板子硬件相關(guān)的LED燈的操作實(shí)現(xiàn),可以拿來(lái)復(fù)用,不過(guò)需要根據(jù)板子的實(shí)際管腳分配來(lái)配置。

應(yīng)用層使用介紹

Board Support這個(gè)文件夾,雖然是配置出來(lái)的,但是它實(shí)際就是一個(gè)應(yīng)用層功能實(shí)現(xiàn)??梢杂脕?lái)學(xué)習(xí),看下它是如何使用GPIO接口驅(qū)動(dòng)了。那么后續(xù)你的使用基本跟它類似。它的文件內(nèi)容如下:

#include "Board_LED.h"
#include "GPIO_STM32F10x.h"

const GPIO_PIN_ID Pin_LED[] = {
  { GPIOE,  8 },
  { GPIOE,  9 },
  { GPIOE, 10 },
  { GPIOE, 11 },
  { GPIOE, 12 },
  { GPIOE, 13 },
  { GPIOE, 14 },
  { GPIOE, 15 },
};

#define LED_COUNT (sizeof(Pin_LED)/sizeof(GPIO_PIN_ID))


/**
  \fn          int32_t LED_Initialize (void)
  \brief       Initialize LEDs
  \returns
   - \b  0: function succeeded
   - \b -1: function failed
*/
int32_t LED_Initialize (void) {
  uint32_t n;

  /* Configure pins: Push-pull Output Mode (50 MHz) with Pull-down resistors */
  for (n = 0; n < LED_COUNT; n++) {
    GPIO_PortClock   (Pin_LED[n].port, true);
    GPIO_PinWrite    (Pin_LED[n].port, Pin_LED[n].num, 0);
    GPIO_PinConfigure(Pin_LED[n].port, Pin_LED[n].num,
                      GPIO_OUT_PUSH_PULL,
                      GPIO_MODE_OUT2MHZ);
  }

  return 0;
}

/**
  \fn          int32_t LED_Uninitialize (void)
  \brief       De-initialize LEDs
  \returns
   - \b  0: function succeeded
   - \b -1: function failed
*/
int32_t LED_Uninitialize (void) {
  uint32_t n;

  /* Configure pins: Input mode, without Pull-up/down resistors */
  for (n = 0; n < LED_COUNT; n++) {
    GPIO_PinConfigure(Pin_LED[n].port, Pin_LED[n].num,
                      GPIO_IN_FLOATING,
                      GPIO_MODE_INPUT);
  }

  return 0;
}

/**
  \fn          int32_t LED_On (uint32_t num)
  \brief       Turn on requested LED
  \param[in]   num  LED number
  \returns
   - \b  0: function succeeded
   - \b -1: function failed
*/
int32_t LED_On (uint32_t num) {
  int32_t retCode = 0;

  if (num < LED_COUNT) {
    GPIO_PinWrite(Pin_LED[num].port, Pin_LED[num].num, 1);
  }
  else {
    retCode = -1;
  }

  return retCode;
}

/**
  \fn          int32_t LED_Off (uint32_t num)
  \brief       Turn off requested LED
  \param[in]   num  LED number
  \returns
   - \b  0: function succeeded
   - \b -1: function failed
*/
int32_t LED_Off (uint32_t num) {
  int32_t retCode = 0;

  if (num < LED_COUNT) {
    GPIO_PinWrite(Pin_LED[num].port, Pin_LED[num].num, 0);
  }
  else {
    retCode = -1;
  }

  return retCode;
}

/**
  \fn          int32_t LED_SetOut (uint32_t val)
  \brief       Write value to LEDs
  \param[in]   val  value to be displayed on LEDs
  \returns
   - \b  0: function succeeded
   - \b -1: function failed
*/
int32_t LED_SetOut (uint32_t val) {
  uint32_t n;

  for (n = 0; n < LED_COUNT; n++) {
    if (val & (1<<n)) {
      LED_On (n);
    } else {
      LED_Off(n);
    }
  }

  return 0;
}

/**
  \fn          uint32_t LED_GetCount (void)
  \brief       Get number of LEDs
  \return      Number of available LEDs
*/
uint32_t LED_GetCount (void) {

  return LED_COUNT;
}

代碼分析:該代碼屬于應(yīng)用層,為應(yīng)用提供了幾個(gè)操作LED的接口(Board_LED.h聲明功能接口),代碼里包含了GPIO_STM32F10x.h驅(qū)動(dòng)接口頭文件,使用了GPIO接口驅(qū)動(dòng)。通過(guò)它可以看出,應(yīng)用層的功能封裝和實(shí)現(xiàn),基本不涉及寄存器操作。都是通過(guò)驅(qū)動(dòng)接口配置和訪問(wèn)的。

main入口函數(shù)介紹

/***************************************************************************//**
*  \file       main.c
*
*  \details    LED Blinking using RTX CMSIS V2 RTOS 
*
*  \author     EmbeTronicX
*
*  \Tested with Proteus
*
* *****************************************************************************/ 
#include "RTE_Components.h"
#include  CMSIS_device_header
#include "cmsis_os2.h"
#include "stm32f10x.h"

#include "Board_LED.h"
 
/*
** This thread will turns ON and turns OFF the PORT-D LEDs with 1second delay.
**
**  Arguments:
**      arg  -> Argument of this thread. osThreadNew()'s 2nd arg has to come here. 
**   
*/
__NO_RETURN static void LED_Blink_PortD( void *arg ) 
{
  (void)arg;                            //unused variable
  //set Port D as output
  //GPIOD->MODER = 0x55555555;
  for (;;)                              //infinite for loop
  {
    //Turn ON the LED of Port-D
    LED_On(3);
    osDelay(1000);                      //1sec delay
    //Turn OFF the LED of Port-D
    LED_Off(2);
    //GPIOD->BSRR = 0xFFFF0000;
    osDelay(1000);                      //1sec delay
  }
}

/*
** This thread will turns ON and turns OFF the PORT-E LEDs with 3second delay.
**
**  Arguments:
**      arg  -> Argument of this thread. osThreadNew()'s 2nd arg has to come here. 
**   
*/
__NO_RETURN static void LED_Blink_PortE( void *arg ) 
{
  (void)arg;                            //unused variable
  //set Port E as output
  //GPIOE->MODER = 0x55555555;
  for (;;)                              //infinite for loop
  {
    //Turn ON the LED of Port-E
    //GPIOE->BSRR = 0x0000FFFF;
	LED_SetOut(0);
    osDelay(3000);                      //3sec delay
    //Turn OFF the LED of Port-E
    //GPIOE->BSRR = 0xFFFF0000;
    osDelay(3000);                      //3sec delay
	LED_SetOut(1);
  }
}

/*
** main function
**
**  Arguments:
**      none
**   
*/ 
int main (void) 
{
  // System Initialization
  SystemCoreClockUpdate();
	
  LED_Initialize();
 
  osKernelInitialize();                       // Initialize CMSIS-RTOS
  osThreadNew(LED_Blink_PortD, NULL, NULL);   // Create application main thread
  osThreadNew(LED_Blink_PortE, NULL, NULL);   // Create application main thread
  osKernelStart();                            // Start thread execution
  for (;;) 
  {
    //Dummy infinite for loop.
  }
}

以上是main入口函數(shù)的實(shí)現(xiàn),你有在里面發(fā)現(xiàn)寄存器和特殊的硬件操作嗎?沒(méi)有的,應(yīng)用層看不到跟某一平臺(tái)的相關(guān)性,更別提會(huì)出現(xiàn)寄存器操作了。這跟以往的開發(fā)模式有很大的不同,結(jié)構(gòu)更清晰合理了。如果你的應(yīng)用中混雜了寄存器或板級(jí)的驅(qū)動(dòng)接口調(diào)用,請(qǐng)留意這樣用是否合適,有沒(méi)有其他的方式。

以上代碼未移植嵌入式內(nèi)核就可以使用RTX嵌入式系統(tǒng)啦,是不是很簡(jiǎn)單和方便?如果想換系統(tǒng)怎么辦?只需要改配置就行。如果要換單片機(jī)呢?那么也放心,你的很多應(yīng)用層代碼都是可以復(fù)用了,僅是改下驅(qū)動(dòng)層的接口參數(shù)配置,這就是這一開發(fā)模式的好處。以上代碼示例不是針對(duì)stm32這一種,在keil中支持的任一單片機(jī)我都可以輕易切換。

串口驅(qū)動(dòng)使用

可以看下串口的使用有多么的簡(jiǎn)單,完全顛覆了以往傳統(tǒng)的開發(fā)方式。只需先配置好串口硬件管腳后,剩下的就是像上位機(jī)純軟件的開發(fā)一樣調(diào)用接口函數(shù)即可,以下示例可以看下夠簡(jiǎn)單吧。

在RTE_device.h文件中,配置串口一的硬件管腳如下:

還在老一套?STM32使用新KEIL5的IDE,全新開發(fā)模式RTE介紹及使用

?使用如下(main.c):

#include <string.h>
#include "RTE_Components.h"
#include  CMSIS_device_header
#include "cmsis_os2.h"
#include "stm32f10x.h"
 
#include "Board_LED.h"
#include "Driver_USART.h"

extern ARM_DRIVER_USART Driver_USART1;
 
/* Variable definitions ------------------------------------------------------*/
static uint8_t rxBuffer[1024] = {0};
static uint8_t txBuffer[1024] = {0};
 
/* Function declarations -----------------------------------------------------*/
static void USART1_Callback(uint32_t event);
/**
  * @brief  USART1 callback function.
  * @param  event: USART events notification mask.
  * @return None.
  */
static void USART1_Callback(uint32_t event)
{
  if(event & ARM_USART_EVENT_RX_TIMEOUT)
  {
    Driver_USART1.Control(ARM_USART_ABORT_RECEIVE, 1);
    
    uint32_t length = Driver_USART1.GetRxCount();
    
    memcpy(txBuffer, rxBuffer, length);
    
    Driver_USART1.Send(txBuffer, length);
    Driver_USART1.Receive(rxBuffer, sizeof(rxBuffer));
  }
}

void uart_init()
{
	
  Driver_USART1.Initialize(USART1_Callback);
  Driver_USART1.PowerControl(ARM_POWER_FULL);
  Driver_USART1.Control(ARM_USART_MODE_ASYNCHRONOUS |
                        ARM_USART_DATA_BITS_8 |
                        ARM_USART_PARITY_NONE |
                        ARM_USART_STOP_BITS_1 |
                        ARM_USART_FLOW_CONTROL_NONE, 115200);
  Driver_USART1.Control(ARM_USART_CONTROL_TX, 1);
  Driver_USART1.Control(ARM_USART_CONTROL_RX, 1);
  
  Driver_USART1.Receive(rxBuffer, sizeof(rxBuffer));
}

關(guān)于CMSIS

CMSIS 是一個(gè)獨(dú)立于供應(yīng)商的硬件抽象層,適用于基于 Arm? Cortex? 處理器的微控制器。CMSIS( Cortex 微控制器軟件接口標(biāo)準(zhǔn))的主要目標(biāo)是提高軟件在不同微控制器和工具鏈之間的可移植性和可重用性。這允許來(lái)自不同來(lái)源的軟件無(wú)縫集成在一起。一旦學(xué)會(huì),CMSIS 就可以通過(guò)使用標(biāo)準(zhǔn)化的軟件功能來(lái)幫助加快軟件開發(fā)。

CMSIS 具有模塊化結(jié)構(gòu),每個(gè)模塊都可以獨(dú)立使用或更新。一些模塊是特定于設(shè)備的,因此對(duì)于每個(gè) ARM Cortex 微控制器系列,都會(huì)創(chuàng)建一個(gè) CMSIS 模塊集合,即設(shè)備系列包 (DFP)。有助于簡(jiǎn)化軟件重用、減少微控制器開發(fā)人員的學(xué)習(xí)曲線、加速項(xiàng)目構(gòu)建和調(diào)試,從而縮短新應(yīng)用程序的上市時(shí)間。

CMSIS 最初是作為基于 Arm? Cortex?-M 的處理器的獨(dú)立于供應(yīng)商的硬件抽象層,后來(lái)擴(kuò)展為支持基于 Arm Cortex-A 的入門級(jí)處理器。為了簡(jiǎn)化訪問(wèn),CMSIS 定義了通用工具接口,并通過(guò)為處理器和外圍設(shè)備提供簡(jiǎn)單的軟件接口來(lái)實(shí)現(xiàn)一致的設(shè)備支持。

CMSIS 是與各種芯片和軟件供應(yīng)商密切合作而定義的,它提供了一種通用方法來(lái)連接外圍設(shè)備、實(shí)時(shí)操作系統(tǒng)和中間件組件。它旨在支持來(lái)自多個(gè)供應(yīng)商的軟件組件的組合。

CMSIS 的創(chuàng)建是為了幫助行業(yè)實(shí)現(xiàn)標(biāo)準(zhǔn)化。它在廣泛的開發(fā)工具和微控制器中實(shí)現(xiàn)了一致的軟件層和設(shè)備支持。

CMSIS 是在GitHub上開源和協(xié)作開發(fā)的。

CMSIS 驅(qū)動(dòng)程序規(guī)范

是一種軟件 API,它描述了中間件堆棧和用戶應(yīng)用程序的外圍驅(qū)動(dòng)程序接口。CMSIS-Driver API 設(shè)計(jì)為通用且獨(dú)立于特定的 RTOS,使其可在廣泛的受支持微控制器設(shè)備中重復(fù)使用。CMSIS-Driver API 涵蓋了受支持外設(shè)類型的廣泛用例,但無(wú)法考慮所有潛在用例。隨著時(shí)間的推移,CMSIS-Driver API 將擴(kuò)展到更多的組以涵蓋新的用例。

CMSIS 軟件包在帶有頭文件和文檔的組件類CMSIS?驅(qū)動(dòng)程序下發(fā)布 API 接口這些頭文件是實(shí)現(xiàn)標(biāo)準(zhǔn)化外設(shè)驅(qū)動(dòng)接口的參考。這些實(shí)現(xiàn)通常在組件類CMSIS?驅(qū)動(dòng)程序下的相關(guān)微控制器系列的設(shè)備系列包中發(fā)布。設(shè)備系列包可能包含組件類設(shè)備中的附加接口,以使用附加設(shè)備特定接口(例如內(nèi)存總線、GPIO 或 DMA)擴(kuò)展此 CMSIS 驅(qū)動(dòng)程序規(guī)范涵蓋的標(biāo)準(zhǔn)外設(shè)驅(qū)動(dòng)程序。

還在老一套?STM32使用新KEIL5的IDE,全新開發(fā)模式RTE介紹及使用

由上圖可以看出,中間件或上層應(yīng)用,通過(guò)CMSIS驅(qū)動(dòng)接口,跟底層的硬件進(jìn)行了隔離。建議組件和應(yīng)用開發(fā)上直接使用CMSIS提供的驅(qū)動(dòng)接口,最好不要直接調(diào)用Device(跟特定平臺(tái)相關(guān)的標(biāo)準(zhǔn)庫(kù)或HAL庫(kù))的接口,除非迫不得已。這樣可以做到底層硬件的變動(dòng)而不影響中間件和上層業(yè)務(wù)。

CMSIS驅(qū)動(dòng)接口使用文檔地址:Usage and Description

結(jié)語(yǔ)

最后,歡迎大家體驗(yàn)Keil5的全新的RTE開發(fā)模式??傊褂靡埠芎?jiǎn)單,關(guān)鍵是要轉(zhuǎn)變思想,一定要有軟件分層的思想,摒棄以往不好的開發(fā)習(xí)慣,尤其是長(zhǎng)期以來(lái)習(xí)慣操作寄存器的思維慣性。讓代碼分封更清晰,模塊化更利于復(fù)用,讓維護(hù)更簡(jiǎn)單,讓升級(jí)更方便。

當(dāng)咱們還在卷寄存器操作的時(shí)候,老外又一次走在了前列。推廣下這一單片機(jī)開發(fā)理念,這一開發(fā)理念是未來(lái)的趨勢(shì)!今后人人都可以根據(jù)需要使用不同的單片機(jī)快速的進(jìn)行業(yè)務(wù)開發(fā)。會(huì)一種就行,不用去卷各家不同單片機(jī)的操作。驅(qū)動(dòng)封裝是芯片或IDE廠家的事。國(guó)產(chǎn)IDE軟件應(yīng)該像keil學(xué)習(xí),讓廣大開發(fā)者好用,才有市場(chǎng),才能國(guó)產(chǎn)化崛起!

risc-v單片機(jī)是國(guó)產(chǎn)化彎道超車的機(jī)會(huì),但就是碎片化嚴(yán)重,驅(qū)動(dòng)封裝的不太好用,且沒(méi)有好用的國(guó)產(chǎn)IDE。要是像stm32那般好用,想不火都難。各家的IDE各自為戰(zhàn),重復(fù)的造輪子,沒(méi)有統(tǒng)一的支持各個(gè)廠家的不同芯片。risc-v的世界缺乏像ARM這種的統(tǒng)一領(lǐng)導(dǎo)和規(guī)范,得形成合力避免重復(fù)和各自為戰(zhàn),才能擴(kuò)大生態(tài),開放共建實(shí)現(xiàn)共贏。開發(fā)者沒(méi)選一個(gè)芯片就得換套IDE?就得重新熟悉一遍操作嗎?

市面上的各大 RISC-V 芯片或 IP 公司,都在做自己的 IDE 用自己的工具鏈。那么為什么各家都在做各自的工具鏈?我認(rèn)為還是沒(méi)有形成類似于 ARM 的 CMSIS 這樣的嵌入式軟件接口標(biāo)準(zhǔn),來(lái)統(tǒng)一管理底層軟件接口,于是乎就變成了各自玩各的沒(méi)有統(tǒng)一。這也是導(dǎo)致 RISC-V 軟件生態(tài)薄弱,碎片化的一個(gè)重要因素,嚴(yán)重影響其生態(tài)。大部分的 RISC-V 廠商的開發(fā) IDE,還是基于開源的 eclipse + gcc toolchains + openocd 的方案來(lái)開發(fā)和調(diào)試芯片產(chǎn)品,雖然這種方案實(shí)現(xiàn)快些,但是IDE太大太臃腫,且僅支持自家的芯片。如果能基于notepad--用QT實(shí)現(xiàn)一款,像Keil一樣好用該多好。

最后,期待國(guó)產(chǎn)單片機(jī)開發(fā)IDE軟件也能朝著更好用,易用的方向發(fā)展,變得更好。

書籍推薦 首頁(yè)關(guān)注博主公眾號(hào)《貓青年》,回復(fù)“書籍”,獲取更多高清電子書資源!完全免費(fèi)!

GitHub - imarvinle/awesome-cs-books: ?? 經(jīng)典編程書籍大全,涵蓋:計(jì)算機(jī)系統(tǒng)與網(wǎng)絡(luò)、系統(tǒng)架構(gòu)、算法與數(shù)據(jù)結(jié)構(gòu)、前端開發(fā)、后端開發(fā)、移動(dòng)開發(fā)、數(shù)據(jù)庫(kù)、測(cè)試、項(xiàng)目與團(tuán)隊(duì)、程序員職業(yè)修煉、求職面試等

其他資源

CMSIS 驅(qū)動(dòng)程序規(guī)范

STM32 RTOS - GPIO Tutorial (CMSIS V2)

Documentation – Arm Developer

?CMSIS-Driver Version 2.8.0

https://www.icxbk.com/article/detail?aid=483文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-450150.html

到了這里,關(guān)于還在老一套?STM32使用新KEIL5的IDE,全新開發(fā)模式RTE介紹及使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • (STM32基礎(chǔ))STM32用keil5開發(fā)前準(zhǔn)備

    (STM32基礎(chǔ))STM32用keil5開發(fā)前準(zhǔn)備

    1)Keil5安裝MDK-ARM版本后,需要安裝對(duì)應(yīng)芯片器件庫(kù),否則新建工程無(wú)芯片可選項(xiàng)。 ?查看設(shè)備管理器? stlink 是否驅(qū)動(dòng)正常,如果是感嘆號(hào)則需要裝驅(qū)動(dòng)? 2、插入STLINK后,在keil安裝目錄下找到安裝驅(qū)動(dòng)程序,安裝STLINK驅(qū)動(dòng)。 3、插入usb轉(zhuǎn)串口模塊后,安裝驅(qū)動(dòng)程序(資料文件

    2024年02月03日
    瀏覽(15)
  • Keil5 開發(fā) STM32 工程創(chuàng)建

    Keil5 開發(fā) STM32 工程創(chuàng)建

    打開Keil5軟件,點(diǎn)Project菜單的的下來(lái)選項(xiàng)New uVision Project…,然后選擇工程文件夾放置的目錄,新建項(xiàng)目目錄,如:LED閃爍 點(diǎn)擊OK后,會(huì)彈出配置運(yùn)行時(shí)環(huán)境的選項(xiàng)框,關(guān)閉即可,該方法使用手動(dòng)配置。 完成后,如下圖: 打開項(xiàng)目目錄,分別創(chuàng)建3個(gè)文件夾:Library, Start, User,

    2024年02月16日
    瀏覽(98)
  • Clion + Keil5 寫stm32

    Clion + Keil5 寫stm32

    最近在學(xué) stm32,使用 Kei5 寫代碼十分難受,代碼提示差,看源碼復(fù)雜,甚至括號(hào)匹配都沒(méi)有。就想著 JetBrains 家的東西能不能用,就找的了稚暉君的《配置CLion用于STM32開發(fā)【優(yōu)雅の嵌入式開發(fā)】》,配置之后又想用 stm32 的原生庫(kù)不想用HAL庫(kù),因?yàn)楦瓍f(xié)科技學(xué)起來(lái)方便。折

    2024年02月05日
    瀏覽(31)
  • keil5成功安裝stm32芯片包

    keil5成功安裝stm32芯片包

    keil安裝stm32芯片包 1.按圖點(diǎn)擊pack installer 2.點(diǎn)擊file-然后點(diǎn)擊import 3.點(diǎn)擊框中stm32芯片包即可 4.返回出現(xiàn)下面的信息則說(shuō)明安裝成功 PS:如果一直顯示安裝不上,檢查芯片包的完整性

    2024年02月13日
    瀏覽(33)
  • STM32初識(shí)---Keil5和CubeMX

    STM32初識(shí)---Keil5和CubeMX

    今天開始,學(xué)習(xí)比52更復(fù)雜的STM32系列單片機(jī): 使用之前的Keil4寫STM32代碼其實(shí)也可以,但需要比較復(fù)雜的設(shè)置,而如果用Keil5會(huì)比較方便。 (這里在打開POJIE軟件的時(shí)候總是會(huì)報(bào)錯(cuò)“?無(wú)法成功完成操作 因?yàn)槲募《净驖撛诘睦浖\\",因此參考了這篇博文解決Win11“無(wú)法

    2024年02月06日
    瀏覽(29)
  • STM32CubeMX+Keil5新建工程

    STM32CubeMX+Keil5新建工程

    STM32CubeMx 軟件是 ST 公司為 STM32 系列單片機(jī)快速建立工程,并快速初始化使用到的外設(shè)、GPIO 等,大大縮短了我們的開發(fā)時(shí)間。簡(jiǎn)單地說(shuō)STM32CubeMX 本身就是一個(gè)工具軟件,我們只要在上面通過(guò)圖形化配置就可以生成STM32 功能代碼工程,這樣節(jié)省我們的工作量。在之前沒(méi)有用這個(gè)

    2024年01月19日
    瀏覽(100)
  • 【STM32】Keil5中生成bin文件

    【STM32】Keil5中生成bin文件

    一、打開魔術(shù)棒 ?二、點(diǎn)擊“User”,勾選After Build的Run#1 三、 添加fromelf文件的路徑(若fromelf文件路徑未添加到環(huán)境變量,請(qǐng)?jiān)谶@里添加詳細(xì)的路徑。例如: D:keil5ARMARMCCbinfromelf.exe ?--bin ?--output ..OBJIAP.bin ..OBJIAP.axf) ?四、一定要注意格式?。?! ① ..OBJIAP.bin? 其中“

    2024年02月05日
    瀏覽(29)
  • Keil5編譯環(huán)境搭建流程----STM32和GD32

    以下藍(lán)色字體是對(duì)應(yīng)文章的鏈接,單擊便可以查看詳細(xì)信息! 文章鏈接: Keil5-MDK下載和安裝教程 資源鏈接: Keil5_MDK安裝包鏈接----點(diǎn)擊下載 文章鏈接: stm32芯片包下載和安裝教程 GD32芯片包下載和安裝教程 資源鏈接: Keil5-STM32芯片包鏈接----點(diǎn)擊下載 Keil5-GD32芯片包鏈接---

    2024年02月05日
    瀏覽(49)
  • STM32F103標(biāo)準(zhǔn)庫(kù)開發(fā):Keil5新建STM32工程

    首先需要搭建Keil5編譯環(huán)境,才可以新建STM32工程。 Keil5編譯環(huán)境搭建流程----STM32和GD32 新建一個(gè)文件夾 template 在文件夾template里面新建四個(gè)文件 (1) CMSIS : 存放內(nèi)核驅(qū)動(dòng)程序和啟動(dòng)引導(dǎo)文件 (2) FWLIB :存放庫(kù)函數(shù)文件 (3) Project :存放工程文件 (4) User : 存放用戶程

    2023年04月08日
    瀏覽(85)
  • STM32——01-開發(fā)軟件Keil5及STM32CubeMX的安裝

    STM32——01-開發(fā)軟件Keil5及STM32CubeMX的安裝

    1.1開發(fā)環(huán)境的安裝 ?編程語(yǔ)言:C語(yǔ)言 需要安裝的軟件有兩個(gè):Keil5和STM32CubeMX 安裝 ????????安裝包(不需要太新,以 MDK324 為例,最新的 MDK327 有問(wèn)題) ????????安裝過(guò)程一路下一步即可(建議不要安裝在 C 盤) ????????安裝路徑一定不要有中文或空格?。。ㄖ匾?/p>

    2024年02月08日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包