国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

寄存器開發,HAL開發和LL開發的區別和參考代碼

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

掃碼添加小助手

加入工程師交流群

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

#include"stm32f4xx.h"

2. 初始化時鐘配置系統時鐘和外設時鐘。

// 配置系統時鐘RCC->CR |= RCC_CR_HSEON; // 啟動外部高速時鐘// 等待HSE穩定while (!(RCC->CR & RCC_CR_HSERDY)) {}RCC->CFGR |= RCC_CFGR_SW_HSE; // 切換系統時鐘到HSE

3. 配置外設直接寫入外設寄存器進行配置。例如,配置GPIO引腳:

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

4. 中斷處理如果使用中斷,配置和實現中斷處理函數。例如,配置USART中斷:

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


5. 主循環在主循環中進行任務處理。例如,使用USART進行通信

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

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

1. 初始化:在程序的開始階段,通常會調用 `HAL_Init()` 來初始化HAL庫。這個函數執行一些底層的初始化工作,包括設置系統時鐘。

HAL_Init();

2. 系統時鐘配置:使用 `HAL_RCC_ClockConfig()` 等函數來配置系統時鐘。這涉及到選擇和配置時鐘源、設置分頻器等。

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

3. 外設初始化

對需要使用的外設進行初始化。這通常涉及使用 `HAL_InitTick()` 和 `HAL_MspInit()` 等函數來初始化一些必要的外設和中斷。

// 初始化系統滴答定時器HAL_InitTick(TICK_INT_PRIORITY);

4. 外設配置使用HAL庫提供的配置函數,例如 `HAL_UART_Init()`、`HAL_GPIO_Init()` 等,對外設進行配置。

// 配置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. 中斷處理如果使用中斷,需要配置和實現相應的中斷處理函數。HAL庫提供了 `HAL_NVIC_SetPriority()` 等函數來配置中斷優先級。

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

6. 主循環在主循環中處理任務。通常使用 `HAL_UART_Transmit()`、`HAL_UART_Receive()` 等函數來進行通信。

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

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

LL庫是HAL庫的底層實現,提供了對STM32微控制器的底層寄存器級別的直接訪問。LL庫是HAL庫的一部分,它的目標是提供對硬件的底層控制,同時保持相對較高的可移植性。

以下是使用LL庫進行開發的一般步驟和示例:

1.包含頭文件在程序中包含LL庫相關的頭文件。

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

2. 初始化時鐘配置系統時鐘和外設時鐘。

LL_Init1msTick(SystemCoreClock); LL_SYSTICK_EnableIT();


3.配置外設直接寫入寄存器進行配置。例如,配置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.中斷處理如果使用中斷,配置和實現中斷處理函數。例如,配置USART中斷:

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


5. 主循環

在主循環中進行任務處理。例如,使用USART進行通信:

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

使用LL庫進行開發相對于使用寄存器級別的開發提供了更高的抽象層次,但仍然直接操作硬件寄存器。這使得LL庫的使用更加直觀,同時保持了相對較高的性能。

總的來說,新手推薦學習HAL,因為簡單,網上資料也多,等對HAL有一定的基礎之后,再學習LL庫,LL庫是直接操作寄存器的,代碼比較精簡,運行效率比較高,也是一種趨勢。寄存器現在完全不推薦,因為ST官方都放棄了。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    8381

    瀏覽量

    164564
  • 寄存器
    +關注

    關注

    31

    文章

    5608

    瀏覽量

    129969
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    《機智云Gokit3開發篇》4 RGB燈的介紹與驅動移植(HAL庫)

    的色彩控制能力。本文聚焦Gokit3開發板(MCU模式,主控STM32F103C8T6),以HAL庫為開發基礎,從P9813驅動芯片的工作原理入手,系統講解RGB燈的
    的頭像 發表于 01-28 19:11 ?5065次閱讀
    《機智云Gokit3<b class='flag-5'>開發</b>篇》4 RGB燈的介紹與驅動移植(<b class='flag-5'>HAL</b>庫)

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

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

    機智云Gokit3開發篇 — 搭建Gokit3工程(HAL庫版)

    微控制,支持多種開發環境,使學習與開發變得更加便捷。本文將帶您從零基礎開始,逐步搭建Gokit3的HAL庫工程,并通過簡單的點燈實驗,讓您感受開發
    的頭像 發表于 01-08 19:14 ?451次閱讀
    機智云Gokit3<b class='flag-5'>開發</b>篇 — 搭建Gokit3工程(<b class='flag-5'>HAL</b>庫版)

    嵌入式系統必懂的 20 個寄存器

    嵌入式開發看起來很復雜,但很多操作其實都離不開寄存器。寄存器就是MCU內部的存儲單元,它們控制著處理和外設的行為。熟悉這些寄存器,你就能更
    的頭像 發表于 11-14 10:28 ?1100次閱讀
    嵌入式系統必懂的 20 個<b class='flag-5'>寄存器</b>

    主流低代碼開發平臺有哪些:加速數字化轉型的核心力量

    在數字化轉型浪潮席卷各行各業的當下,企業對快速開發、靈活迭代應用程序的需求日益迫切。低代碼開發平臺憑借其可視化編程、模塊化組件和簡化開發流程的特點,成為解決傳統
    的頭像 發表于 11-03 16:53 ?588次閱讀

    代碼開發平臺推薦:2025國內低代碼開發平臺排名TOP10

    代碼開發平臺排行榜 在企業數字化轉型的浪潮中,低代碼開發平臺正逐漸成為企業實現高效開發和快速迭代的重要工具。隨著技術的不斷進步和市場需求的
    的頭像 發表于 10-28 10:22 ?733次閱讀

    【六岳微LY-F335開發板試用體驗】軟件開發環境及調試下載

    和Register窗口查看寄存器和內存單元的值可能沒有改變??梢試L試刷新窗口,如果任然得不到更新,可以用代碼判斷相應的值。 6.3遇到一些奇奇怪怪的問題,請重啟CCS軟件 在JTAG有連接,開發板上電,硬件配置文件
    發表于 09-26 15:55

    怎么用LL命令讀取SPI?

    用cubemx構建工程,MDK開發,這個項目采用AD4020 20位2MSPS外置ADC,ADC轉換速率高達0.5us,而STM32H5用HALHAL_SPI_Receive(&
    發表于 09-09 08:17

    HarmonyOS 代碼工坊的指尖開發,讓 APP 開發所見即所得

    沙盤被直接搬入了移動設備本身。眼尖的開發者應該已經發現,最近華為應用市場“應用嘗鮮”專區里,上架了一款名為“HarmonyOS 代碼工坊”的新應用,下載量持續攀升。 開發者只需要下載“HarmonyOS
    的頭像 發表于 06-24 12:08 ?827次閱讀
    HarmonyOS <b class='flag-5'>代碼</b>工坊的指尖<b class='flag-5'>開發</b>,讓 APP <b class='flag-5'>開發</b>所見即所得

    使用寄存器點亮LED燈

    學習本章時,配合以上芯片手冊中的“19. I/O Ports”章節一起閱讀,效果會更佳,特別是涉及到寄存器說明的部分。本章內容涉及到較多寄存器方面的深入內容,對于初學者而言這些內容豐富也較難理解,但非常有必要細讀研究、夯實基礎。
    的頭像 發表于 05-28 17:37 ?1311次閱讀
    使用<b class='flag-5'>寄存器</b>點亮LED燈

    Java開發者必備的效率工具——Perforce JRebel是什么?為什么很多Java開發者在用?

    Perforce JRebel是一款Java開發效率工具,旨在幫助java開發人員更快地編寫更好的應用程序。JRebel可即時重新加載對代碼的修改,無需重啟或重新部署應用程序,就能讓開發
    的頭像 發表于 04-27 13:44 ?852次閱讀
    Java<b class='flag-5'>開發</b>者必備的效率工具——Perforce JRebel是什么?為什么很多Java<b class='flag-5'>開發</b>者在用?

    如何用C語言操作寄存器——瑞薩RA系列FSP庫開發實戰指南(10)

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

    STM32開發入門進階必備!《STM32嵌入式系統開發—基于STM32CubeMX和HAL庫》新書發布!

    近日,由華清遠見教育科技集團精心編撰的教育部高等學校電子信息類專業教學指導委員會規劃教材、普通高等教育電子信息類專業系列教材——《STM32嵌入式系統開發—基于STM32CubeMX和HAL庫》重磅
    的頭像 發表于 04-03 14:54 ?1925次閱讀
    STM32<b class='flag-5'>開發</b>入門進階必備!《STM32嵌入式系統<b class='flag-5'>開發</b>—基于STM32CubeMX和<b class='flag-5'>HAL</b>庫》新書發布!

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

    形式如下:1. 使用標準外設庫開發 2.使用寄存器開 3.使用 CubeMax 生成代碼工具開發 下面我們先來說一下目前這幾種形式的區別:1
    發表于 04-03 11:24 ?0次下載

    使用LPS22DF開發一款壓差傳感,AVG這個寄存器該怎么配置?

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