chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

寄存器開(kāi)發(fā),HAL開(kāi)發(fā)和LL開(kāi)發(fā)的區(qū)別和參考代碼

撞上電子 ? 2023-11-17 08:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1,寄存器開(kāi)發(fā)【難度值:難】
寄存器開(kāi)發(fā)是一種直接訪問(wèn)微控制器寄存器的編程方法,它提供了對(duì)硬件的極大靈活性和直接控制。在寄存器級(jí)開(kāi)發(fā)中,程序員通過(guò)直接寫入和讀取寄存器來(lái)配置和控制微控制器的外設(shè),而不依賴高級(jí)的抽象層。
以下是寄存器級(jí)開(kāi)發(fā)的一般步驟和示例:1.包含頭文件在程序中包含與目標(biāo)微控制器系列相關(guān)的寄存器定義頭文件。

#include"stm32f4xx.h"

2. 初始化時(shí)鐘配置系統(tǒng)時(shí)鐘和外設(shè)時(shí)鐘。

// 配置系統(tǒng)時(shí)鐘RCC->CR |= RCC_CR_HSEON; // 啟動(dòng)外部高速時(shí)鐘// 等待HSE穩(wěn)定while (!(RCC->CR & RCC_CR_HSERDY)) {}RCC->CFGR |= RCC_CFGR_SW_HSE; // 切換系統(tǒng)時(shí)鐘到HSE

3. 配置外設(shè)直接寫入外設(shè)寄存器進(jìn)行配置。例如,配置GPIO引腳:

// 配置GPIO引腳GPIOA->MODER |= GPIO_MODER_MODER5_0; // 將引腳5配置為通用輸出模式GPIOA->OTYPER &= ~GPIO_OTYPER_OT_5; // 將引腳5配置為推挽輸出

4. 中斷處理如果使用中斷,配置和實(shí)現(xiàn)中斷處理函數(shù)。例如,配置USART中斷:

// 配置USART中斷NVIC_SetPriority(USART1_IRQn, 0);NVIC_EnableIRQ(USART1_IRQn);


5. 主循環(huán)在主循環(huán)中進(jìn)行任務(wù)處理。例如,使用USART進(jìn)行通信

while (1) { // 等待發(fā)送緩沖區(qū)就緒while(!(USART1->SR&USART_SR_TXE)){} // 發(fā)送數(shù)據(jù) USART1->DR = data_to_send; // 等待接收緩沖區(qū)非空 while (!(USART1->SR & USART_SR_RXNE)) {} // 接收數(shù)據(jù) received_data = USART1->DR;}

在寄存器級(jí)開(kāi)發(fā)中,程序員需要仔細(xì)閱讀芯片手冊(cè)和寄存器定義,了解寄存器的功能和配置方式。這樣做的好處是可以對(duì)硬件有更直接的控制,但同時(shí)也需要更多的了解和小心處理硬件細(xì)節(jié)。
2,HAL庫(kù)開(kāi)發(fā)【難度值:易】當(dāng)使用HAL庫(kù)進(jìn)行開(kāi)發(fā)時(shí),主要是通過(guò)調(diào)用HAL庫(kù)提供的函數(shù)來(lái)配置和控制STM32微控制器的外設(shè)。HAL庫(kù)旨在提供一種跨STM32系列通用的接口,使得開(kāi)發(fā)者可以以相對(duì)高層次的抽象水平來(lái)進(jìn)行開(kāi)發(fā),而不必深入了解底層硬件的細(xì)節(jié)。
以下是使用HAL庫(kù)進(jìn)行開(kāi)發(fā)的一般步驟:

1. 初始化:在程序的開(kāi)始階段,通常會(huì)調(diào)用 `HAL_Init()` 來(lái)初始化HAL庫(kù)。這個(gè)函數(shù)執(zhí)行一些底層的初始化工作,包括設(shè)置系統(tǒng)時(shí)鐘。

HAL_Init();

2. 系統(tǒng)時(shí)鐘配置:使用 `HAL_RCC_ClockConfig()` 等函數(shù)來(lái)配置系統(tǒng)時(shí)鐘。這涉及到選擇和配置時(shí)鐘源、設(shè)置分頻器等。

//配置系統(tǒng)時(shí)鐘為最大頻率HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_5);

3. 外設(shè)初始化

對(duì)需要使用的外設(shè)進(jìn)行初始化。這通常涉及使用 `HAL_InitTick()` 和 `HAL_MspInit()` 等函數(shù)來(lái)初始化一些必要的外設(shè)和中斷。

// 初始化系統(tǒng)滴答定時(shí)器HAL_InitTick(TICK_INT_PRIORITY);

4. 外設(shè)配置使用HAL庫(kù)提供的配置函數(shù),例如 `HAL_UART_Init()`、`HAL_GPIO_Init()` 等,對(duì)外設(shè)進(jìn)行配置。

// 配置UARTUART_HandleTypeDef uart;uart.Instance = USART1;uart.Init.BaudRate = 115200;uart.Init.WordLength = UART_WORDLENGTH_8B;uart.Init.StopBits = UART_STOPBITS_1;uart.Init.Parity = UART_PARITY_NONE;uart.Init.Mode = UART_MODE_TX_RX;uart.Init.HwFlowCtl = UART_HWCONTROL_NONE;uart.Init.OverSampling = UART_OVERSAMPLING_16;HAL_UART_Init(&uart);

5. 中斷處理如果使用中斷,需要配置和實(shí)現(xiàn)相應(yīng)的中斷處理函數(shù)。HAL庫(kù)提供了 `HAL_NVIC_SetPriority()` 等函數(shù)來(lái)配置中斷優(yōu)先級(jí)。

// 配置USART中斷 HAL_NVIC_SetPriority(USART1_IRQn, 0, 1); HAL_NVIC_EnableIRQ(USART1_IRQn);

6. 主循環(huán)在主循環(huán)中處理任務(wù)。通常使用 `HAL_UART_Transmit()`、`HAL_UART_Receive()` 等函數(shù)來(lái)進(jìn)行通信。

while (1) { // 接收數(shù)據(jù) HAL_UART_Receive(&uart,rx_buffer,1,HAL_MAX_DELAY); //處理數(shù)據(jù) // 發(fā)送數(shù)據(jù) HAL_UART_Transmit(&uart, tx_buffer, sizeof(tx_buffer), HAL_MAX_DELAY); }

以上是使用HAL庫(kù)進(jìn)行STM32開(kāi)發(fā)的一般步驟。HAL庫(kù)提供了大量的函數(shù)和抽象,使得開(kāi)發(fā)者能夠相對(duì)輕松地進(jìn)行STM32微控制器的開(kāi)發(fā),而不必深入研究底層硬件的復(fù)雜性。 3,LL庫(kù)開(kāi)發(fā)【難度值:中】

LL庫(kù)是HAL庫(kù)的底層實(shí)現(xiàn),提供了對(duì)STM32微控制器的底層寄存器級(jí)別的直接訪問(wèn)。LL庫(kù)是HAL庫(kù)的一部分,它的目標(biāo)是提供對(duì)硬件的底層控制,同時(shí)保持相對(duì)較高的可移植性。

以下是使用LL庫(kù)進(jìn)行開(kāi)發(fā)的一般步驟和示例:

1.包含頭文件在程序中包含LL庫(kù)相關(guān)的頭文件。

#include "stm32f4xx_ll_gpio.h" #include "stm32f4xx_ll_rcc.h"

2. 初始化時(shí)鐘配置系統(tǒng)時(shí)鐘和外設(shè)時(shí)鐘。

LL_Init1msTick(SystemCoreClock); LL_SYSTICK_EnableIT();


3.配置外設(shè)直接寫入寄存器進(jìn)行配置。例如,配置GPIO引腳:

// 配置GPIO引腳 LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA); LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_5, LL_GPIO_MODE_OUTPUT); LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_5, LL_GPIO_SPEED_FREQ_LOW);

4.中斷處理如果使用中斷,配置和實(shí)現(xiàn)中斷處理函數(shù)。例如,配置USART中斷:

// 配置USART中斷 NVIC_SetPriority(USART1_IRQn, 0); NVIC_EnableIRQ(USART1_IRQn);


5. 主循環(huán)

在主循環(huán)中進(jìn)行任務(wù)處理。例如,使用USART進(jìn)行通信:

while (1) { // 發(fā)送數(shù)據(jù) while (!LL_USART_IsActiveFlag_TXE(USART1)) {} LL_USART_TransmitData8(USART1, data_to_send);
// 等待接收數(shù)據(jù) while (!LL_USART_IsActiveFlag_RXNE(USART1)) {} received_data = LL_USART_ReceiveData8(USART1); }

使用LL庫(kù)進(jìn)行開(kāi)發(fā)相對(duì)于使用寄存器級(jí)別的開(kāi)發(fā)提供了更高的抽象層次,但仍然直接操作硬件寄存器。這使得LL庫(kù)的使用更加直觀,同時(shí)保持了相對(duì)較高的性能。

總的來(lái)說(shuō),新手推薦學(xué)習(xí)HAL,因?yàn)楹?jiǎn)單,網(wǎng)上資料也多,等對(duì)HAL有一定的基礎(chǔ)之后,再學(xué)習(xí)LL庫(kù),LL庫(kù)是直接操作寄存器的,代碼比較精簡(jiǎn),運(yùn)行效率比較高,也是一種趨勢(shì)。寄存器現(xiàn)在完全不推薦,因?yàn)镾T官方都放棄了。

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

    關(guān)注

    48

    文章

    8305

    瀏覽量

    163559
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5601

    瀏覽量

    129574
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4956

    瀏覽量

    73492
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    從“能用”到“懂原理”:ARMv8寄存器架構(gòu)深度拆解

    做嵌入式或芯片開(kāi)發(fā)的同學(xué),大概率都有過(guò)這樣的困惑: 寫匯編時(shí)知道X0-X30是通用寄存器,調(diào)用函數(shù)時(shí)按規(guī)矩用X0-X7傳參,但為什么是這8個(gè)?剩下的寄存器又該怎么劃分職責(zé)?調(diào)試異常時(shí),盯著SPSR
    的頭像 發(fā)表于 01-10 07:10 ?33次閱讀
    從“能用”到“懂原理”:ARMv8<b class='flag-5'>寄存器</b>架構(gòu)深度拆解

    機(jī)智云Gokit3開(kāi)發(fā)篇 — 搭建Gokit3工程(HAL庫(kù)版)

    微控制,支持多種開(kāi)發(fā)環(huán)境,使學(xué)習(xí)與開(kāi)發(fā)變得更加便捷。本文將帶您從零基礎(chǔ)開(kāi)始,逐步搭建Gokit3的HAL庫(kù)工程,并通過(guò)簡(jiǎn)單的點(diǎn)燈實(shí)驗(yàn),讓您感受開(kāi)發(fā)
    的頭像 發(fā)表于 01-08 19:14 ?149次閱讀
    機(jī)智云Gokit3<b class='flag-5'>開(kāi)發(fā)</b>篇 — 搭建Gokit3工程(<b class='flag-5'>HAL</b>庫(kù)版)

    嵌入式系統(tǒng)必懂的 20 個(gè)寄存器

    嵌入式開(kāi)發(fā)看起來(lái)很復(fù)雜,但很多操作其實(shí)都離不開(kāi)寄存器。寄存器就是MCU內(nèi)部的存儲(chǔ)單元,它們控制著處理和外設(shè)的行為。熟悉這些寄存器,你就能更
    的頭像 發(fā)表于 11-14 10:28 ?906次閱讀
    嵌入式系統(tǒng)必懂的 20 個(gè)<b class='flag-5'>寄存器</b>

    代碼開(kāi)發(fā)平臺(tái)推薦:2025國(guó)內(nèi)低代碼開(kāi)發(fā)平臺(tái)排名TOP10

    代碼開(kāi)發(fā)平臺(tái)排行榜 在企業(yè)數(shù)字化轉(zhuǎn)型的浪潮中,低代碼開(kāi)發(fā)平臺(tái)正逐漸成為企業(yè)實(shí)現(xiàn)高效開(kāi)發(fā)和快速迭代的重要工具。隨著技術(shù)的不斷進(jìn)步和市場(chǎng)需求的
    的頭像 發(fā)表于 10-28 10:22 ?536次閱讀

    HarmonyOS 代碼工坊的指尖開(kāi)發(fā),讓 APP 開(kāi)發(fā)所見(jiàn)即所得

    沙盤被直接搬入了移動(dòng)設(shè)備本身。眼尖的開(kāi)發(fā)者應(yīng)該已經(jīng)發(fā)現(xiàn),最近華為應(yīng)用市場(chǎng)“應(yīng)用嘗鮮”專區(qū)里,上架了一款名為“HarmonyOS 代碼工坊”的新應(yīng)用,下載量持續(xù)攀升。 開(kāi)發(fā)者只需要下載“HarmonyOS
    的頭像 發(fā)表于 06-24 12:08 ?737次閱讀
    HarmonyOS <b class='flag-5'>代碼</b>工坊的指尖<b class='flag-5'>開(kāi)發(fā)</b>,讓 APP <b class='flag-5'>開(kāi)發(fā)</b>所見(jiàn)即所得

    如何用C語(yǔ)言操作寄存器——瑞薩RA系列FSP庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南(10)

    由于寄存器的數(shù)量是非常之多的,如果每個(gè)寄存器都用像*((uint32_t*)(0x40080000+0x0020*1))這樣的方式去訪問(wèn)的話,會(huì)顯得很繁瑣、很麻煩。為了更方便地訪問(wèn)寄存器,我們會(huì)借助C語(yǔ)言結(jié)構(gòu)體的特性去定義
    的頭像 發(fā)表于 04-22 15:30 ?1855次閱讀
    如何用C語(yǔ)言操作<b class='flag-5'>寄存器</b>——瑞薩RA系列FSP庫(kù)<b class='flag-5'>開(kāi)發(fā)</b>實(shí)戰(zhàn)指南(10)

    STM32開(kāi)發(fā)入門進(jìn)階必備!《STM32嵌入式系統(tǒng)開(kāi)發(fā)—基于STM32CubeMX和HAL庫(kù)》新書發(fā)布!

    近日,由華清遠(yuǎn)見(jiàn)教育科技集團(tuán)精心編撰的教育部高等學(xué)校電子信息類專業(yè)教學(xué)指導(dǎo)委員會(huì)規(guī)劃教材、普通高等教育電子信息類專業(yè)系列教材——《STM32嵌入式系統(tǒng)開(kāi)發(fā)—基于STM32CubeMX和HAL庫(kù)》重磅
    的頭像 發(fā)表于 04-03 14:54 ?1676次閱讀
    STM32<b class='flag-5'>開(kāi)發(fā)</b>入門進(jìn)階必備!《STM32嵌入式系統(tǒng)<b class='flag-5'>開(kāi)發(fā)</b>—基于STM32CubeMX和<b class='flag-5'>HAL</b>庫(kù)》新書發(fā)布!

    STM32的幾種開(kāi)發(fā)方式,你都知道嗎?(可下載)

    形式如下:1. 使用標(biāo)準(zhǔn)外設(shè)庫(kù)開(kāi)發(fā) 2.使用寄存器開(kāi) 3.使用 CubeMax 生成代碼工具開(kāi)發(fā) 下面我們先來(lái)說(shuō)一下目前這幾種形式的區(qū)別:1
    發(fā)表于 04-03 11:24 ?0次下載

    使用LPS22DF開(kāi)發(fā)一款壓差傳感,AVG這個(gè)寄存器該怎么配置?

    我正在使用LPS22DF開(kāi)發(fā)一款壓差傳感,但是中間遇到一個(gè)問(wèn)題就是,不知道AVG這個(gè)寄存器該怎么配置,我再手冊(cè)上沒(méi)有找到說(shuō)明。 比如我將ODR設(shè)置為200Hz,AVG=4和AVG=512,裝滿一個(gè)FIFO的時(shí)間是固定的?我測(cè)試
    發(fā)表于 03-07 07:53

    STM32開(kāi)發(fā)板教程之STM32開(kāi)發(fā)指南免費(fèi)下載

    介紹了幾個(gè)常用的系統(tǒng)文件(程序);3,實(shí)戰(zhàn)篇,主要通過(guò) 56 個(gè)實(shí)例(絕大部分是直接操作寄存器完成的)帶領(lǐng)大家一步步深入 STM32 的學(xué)習(xí)。   本指南為 ALIENTEK 戰(zhàn)艦 STM32 開(kāi)發(fā)板的配套教程,在開(kāi)發(fā)
    發(fā)表于 02-28 09:08 ?188次下載

    工程師開(kāi)發(fā)利器:STM32CubeMX 與 eDesignSuite 的協(xié)同開(kāi)發(fā)

    STM32 全系列芯片。HAL/LL 庫(kù)支持:提供高抽象的 HAL 庫(kù)(便于移植)和低層 LL 庫(kù)(高效寄存器操作)的靈活選擇。二、eDe
    的頭像 發(fā)表于 02-26 14:07 ?1294次閱讀
    工程師<b class='flag-5'>開(kāi)發(fā)</b>利器:STM32CubeMX 與 eDesignSuite 的協(xié)同<b class='flag-5'>開(kāi)發(fā)</b>

    代碼加密、源代碼防泄漏c/c++與git服務(wù)開(kāi)發(fā)環(huán)境

    代碼加密對(duì)于很多研發(fā)性單位來(lái)說(shuō)是至關(guān)重要的,當(dāng)然每家企業(yè)的業(yè)務(wù)需求不同所用的開(kāi)發(fā)環(huán)境及開(kāi)發(fā)語(yǔ)言也不盡相同,今天主要來(lái)講一下c++及git開(kāi)發(fā)環(huán)境的源
    的頭像 發(fā)表于 02-12 15:26 ?1023次閱讀
    源<b class='flag-5'>代碼</b>加密、源<b class='flag-5'>代碼</b>防泄漏c/c++與git服務(wù)<b class='flag-5'>器</b><b class='flag-5'>開(kāi)發(fā)</b>環(huán)境

    代碼與傳統(tǒng)開(kāi)發(fā)區(qū)別代碼與無(wú)代碼開(kāi)發(fā)區(qū)別

    在軟件開(kāi)發(fā)領(lǐng)域,傳統(tǒng)開(kāi)發(fā)、低代碼開(kāi)發(fā)以及無(wú)代碼開(kāi)發(fā)是三種不同的
    的頭像 發(fā)表于 01-31 10:48 ?1212次閱讀

    24l01寄存器列表指南免費(fèi)下載

      寄存器的功能是存儲(chǔ)二進(jìn)制代碼,它是由具有存儲(chǔ)功能的觸發(fā)組合起來(lái)構(gòu)成的。一個(gè)觸發(fā)可以存儲(chǔ)1位二進(jìn)制代碼,故存放n位二進(jìn)制
    發(fā)表于 01-22 17:25 ?1次下載

    STC15系列常用寄存器匯總免費(fèi)下載

      寄存器的功能是存儲(chǔ)二進(jìn)制代碼,它是由具有存儲(chǔ)功能的觸發(fā)組合起來(lái)構(gòu)成的。一個(gè)觸發(fā)可以存儲(chǔ)1位二進(jìn)制代碼,故存放n位二進(jìn)制
    發(fā)表于 01-22 17:24 ?10次下載