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

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

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

基于STM32的E01和E01C驅(qū)動移植

億佰特物聯(lián)網(wǎng)應(yīng)用專家 ? 2024-08-30 12:35 ? 次閱讀

實驗簡介

基于STM32F103C8T6的E01系列(nRF24L01P)和E01C系列(SI24R1)的EBYTE官網(wǎng)例程移植。EBYTE官網(wǎng)例程是基于STM8L151編寫,本次實驗的目的是將該例程移植到常見的MCU型號STM32F103C8T6,實現(xiàn)基本的無線通信。電腦端的串口調(diào)試助手操作和顯示數(shù)據(jù)收發(fā)。(可以稍加修改,適用于其他STM32系列的MCU)

硬件環(huán)境

? 2個E01系列的相同型號的模塊(或者2個E01C系列的相同型號的模塊)

? 2個USB轉(zhuǎn)TTL模塊(CH340版本)

? 2個STM32F103C8T6最小系統(tǒng)板

? 1個STM32燒錄器(DAP-LINK或者ST-LINK等等)

? 1臺電腦

? 杜邦線若干

軟件環(huán)境

? STM32的開發(fā)軟件(MDK_ARM,IAR或者STM32CubeIDE等等)

? STM32CubeMX

? XCOM V2.6 串口調(diào)試助手

? CH340驅(qū)動

模塊簡介

視選擇型號,參考廠家提供的模塊手冊。因為E01和E01C分別使用的nRF24L01P和SI24R1射頻方案,但是寄存器基本一致,操作方式也大致相同,所以驅(qū)動程序可以通用。

本次實驗使用E01-ML01D,基于nRF24L01P方案,3.3V供電,最大發(fā)射功率0dBm,參考通信距離100m。模塊的寄存器和詳細操作可以直接參考nRF24L01P的芯片手冊。E01-ML01D模塊示意及引腳定義如下圖。

3859c2e8-6689-11ef-89ff-92fbcf53809c.png3886aa42-6689-11ef-89ff-92fbcf53809c.png

實驗步驟

本次實驗使用的STM32開發(fā)環(huán)境是MDK_ARM和STM32CubeMX,燒錄器使用的是ST-LINK。涉及到的軟件獲取和安裝方法這里不做介紹,建議參考網(wǎng)上的教程。注意,如果使用的大功率E01或者E01C模塊,例如發(fā)射功率大于等于20dBm,需要考慮供電是否達到要求,本次使用的是E01-ML01D的發(fā)射電流在13mA,一般的STM32F103C8T6核心板都可以滿足要求。

38b66ea8-6689-11ef-89ff-92fbcf53809c.png

1.準備EBYTE官網(wǎng)例程

在億佰特官網(wǎng)搜索E01-ML01D,在【相關(guān)下載】一欄,找到通信例程并下載解壓。

38e35d8c-6689-11ef-89ff-92fbcf53809c.png


2.新建STM32工程

①打開STM32CubeMX,新建STM32F103C8T6工程,進入MCU配置。

3901e90a-6689-11ef-89ff-92fbcf53809c.png391d63ce-6689-11ef-89ff-92fbcf53809c.png

②配置System Core選項中的SYS和RCC

Pinout & Configuration 一欄下展開System Core,分別配置SYS和RCC。

3938f634-6689-11ef-89ff-92fbcf53809c.png39487e92-6689-11ef-89ff-92fbcf53809c.png

③Clock Configuration時鐘樹配置

時鐘配置完成后,回到Pinout & Configuration一欄配置其他MCU外設(shè)。

396c5632-6689-11ef-89ff-92fbcf53809c.png

④MCU的串口配置

選擇USART1,配置USART1參數(shù)

398f8814-6689-11ef-89ff-92fbcf53809c.png

開啟USART1全局中斷。

39b715a0-6689-11ef-89ff-92fbcf53809c.png

⑤配置MCU的SPI

選擇SPI1,配置為全雙工主機模式,射頻芯片的SPI速率最大支持10M,所以MCU的SPI的速率要小于等于10M,CPOL選擇Low,CPHA選擇1Edge,NSS引腳控制選擇Software。不啟用SPI1的全局中斷,所以NVIC Setting不設(shè)置。

39cd6b70-6689-11ef-89ff-92fbcf53809c.png

⑥GPIO配置

直接點擊MCU對應(yīng)引腳,將其配置。將PA4作為SPI1的片選引腳,PB0作為E01-ML01D模塊的CE引腳,PB1作為E01-ML01D模塊的IRQ引腳。所以需要把PA4和 PB0 配置為GPIO_Output,PB1配置為GPIO_Input。配置引腳后,在GPIO選項中,會顯示配置的這三個引腳配置詳情。然后在GPIO選項中,需要配置GPIO的其他參數(shù)。

這一步完成后,我們要使用的MCU外設(shè)已經(jīng)基本完成配置,接下來是工程的設(shè)置和保存。

39e8d6bc-6689-11ef-89ff-92fbcf53809c.png3a0fc786-6689-11ef-89ff-92fbcf53809c.png3a3b142c-6689-11ef-89ff-92fbcf53809c.png3a628a70-6689-11ef-89ff-92fbcf53809c.png

⑦設(shè)置工程以及保存路徑

配置工程及代碼生成配置,最后點擊GENERATE CODE,等待進度條完成后會出現(xiàn)一個彈窗,選擇Open Project 直接打開工程。接下來就是在MDK_ARM中的操作。

3a7eda0e-6689-11ef-89ff-92fbcf53809c.png3a9a31aa-6689-11ef-89ff-92fbcf53809c.png3aa01bb0-6689-11ef-89ff-92fbcf53809c.png

3.代碼移植

①完成上面的步驟后,已經(jīng)打開了創(chuàng)建的工程,先進行首次編譯,查看是否有編譯錯誤。

正常的編譯結(jié)果應(yīng)該是0 Error(s),0 Warning(s)。

3aa3daa2-6689-11ef-89ff-92fbcf53809c.png

②實現(xiàn)串口重定向,修改usart.c和usart.h文件

usart.c中修改兩個位置。

一個是在/* USER CODE BEGIN 0 */和/* USER CODE END 0 */之間新添加如下代碼:

/* USER CODE BEGIN 0 */
uint8_t uart_rx_data = 0;//串口中斷接收的數(shù)據(jù)存儲
int fputc(int ch, FILE *f){ HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF); return ch;}/* USER CODE END 0 */

另一個是修改void MX_USART1_UART_Init(void)函數(shù),在該函數(shù)中的

/* USER CODE BEGIN USART1_Init 2 */和 /* USER CODE END USART1_Init 2 */之間加入代碼:

void MX_USART1_UART_Init(void){
/* USER CODE BEGIN USART1_Init 0 */
/* USER CODE END USART1_Init 0 */ /* USER CODE BEGIN USART1_Init 1 */ /* USER CODE END USART1_Init 1 */
huart1.Instance = USART1; huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN USART1_Init 2 */ HAL_UART_Receive_IT(&huart1,&uart_rx_data,1);//開啟接收中斷 /* USER CODE END USART1_Init 2 */
}

Usart.h中,需要包含stdio.h,在/* USER CODE BEGIN Includes */和/* USER CODE END Includes */之間加入代碼:

/* USER CODE BEGIN Includes */#include "stdio.h"/* USER CODE END Includes */

Usart.h中,在/* USER CODE BEGIN Private defines */和/* USER CODE END Private defines */之間加入代碼:

/* USER CODE BEGIN Private defines */extern uint8_t uart_rx_data;/* USER CODE END Private defines */

啟用MicroLIB

3aa7ac40-6689-11ef-89ff-92fbcf53809c.png

③在創(chuàng)建的工程路徑下,新建一個名為MyFiles的文件夾,并將例程中的如下文件均復制到MyFiles文件夾中。

3ad2b728-6689-11ef-89ff-92fbcf53809c.png3ae6199e-6689-11ef-89ff-92fbcf53809c.png

④添加MyFiles的文件夾路徑到工程。

3b066ef6-6689-11ef-89ff-92fbcf53809c.png

⑤在工程中新建文件夾,并將復制的文件添加到工程之中

3b2880e0-6689-11ef-89ff-92fbcf53809c.png

⑥修改添加到MyFiles文件夾下的所有.c和.h文件

由于涉及到的修改較多,不做一一介紹,直接給出修改后的該文件夾下的所有文件附件。(可聯(lián)系獲取)

⑦修改main.c文件

在/* USER CODE BEGIN Includes */和/* USER CODE END Includes */之間添加為app.h 和bsp.h的包含:

/* USER CODE BEGIN Includes */#include "bsp.h"#include "app.h"/* USER CODE END Includes */

修改int main(void)函數(shù):/** * @brief The application entry point. * @retval int */int main(void){ /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_SPI1_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ BSP_MCU_Initial(); BSP_RF_Initial(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ APP_Process(); } /* USER CODE END 3 */}

添加USART1的接收和發(fā)送中斷回調(diào)函數(shù),

在/* USER CODE BEGIN 4 */和/* USER CODE END 4 */加入代碼:

/* USER CODE BEGIN 4 */void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ if(huart == &huart1) { Uart_Rx_interrupt_Cb();
}}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart){ if(huart == &huart1) { Uart_Tx_interrupt_Cb(); }}/* USER CODE END 4 */

⑧修改stm32f1xx_it.c文件

添加對app.h的包含,在/* USER CODE BEGIN Includes */和/* USER CODE END Includes */之間加入代碼:

/* USER CODE BEGIN Includes */#include "app.h"/* USER CODE END Includes */

修改void SysTick_Handler(void)函數(shù),

在 /* USER CODE BEGIN SysTick_IRQn 1 */和/* USER CODE END SysTick_IRQn 1 */之間加入:

/** * @brief This function handles System tick timer. */void SysTick_Handler(void){ /* USER CODE BEGIN SysTick_IRQn 0 */ /* USER CODE END SysTick_IRQn 0 */ HAL_IncTick(); /* USER CODE BEGIN SysTick_IRQn 1 */ Uart_1ms_Interrupt_Cb(); /* USER CODE END SysTick_IRQn 1 */}

至此,程序移植已經(jīng)全部完成,再次重新編譯。如果出現(xiàn)warning: #1-D: last line of file ends without a newline這個警告,請在該文件最后一行添加新行。

通信驗證

①程序下載

將ST-LINK的下載接口與STM32核心板的下載接口連接,對應(yīng)接線如下:

3b4cedcc-6689-11ef-89ff-92fbcf53809c.png

Debug配置:

3b700b9a-6689-11ef-89ff-92fbcf53809c.png

配置完成后,點擊LOAD進行下載。

3bae4b1c-6689-11ef-89ff-92fbcf53809c.png

下載成功后,會出現(xiàn)如下提示:

3bcc0382-6689-11ef-89ff-92fbcf53809c.png

②硬件連接

建議在接線過程中斷電操作。STM32核心板的供電使用自帶的USB接口供電。

STM32核心板與E01-ML01D連接

3bdf5d2e-6689-11ef-89ff-92fbcf53809c.png

STM32核心板與USB轉(zhuǎn)TTL工具連接

3bee6b3e-6689-11ef-89ff-92fbcf53809c.png

③通信測試

將核心板通過USB接口供電,USB轉(zhuǎn)TTL工具連接上電腦上的串口調(diào)試助手。串口調(diào)試助手配置如下:

3bfb6924-6689-11ef-89ff-92fbcf53809c.png

將STM32核心板復位,它首先會檢查與E01-ML01D的連接。如果連接成功,則會打印Link successful。如果鏈接失敗,則會打印Link Fail Please check and reset module。最大連接次數(shù)為6次,每次連接會打印當前連接次數(shù)。

3bff33ba-6689-11ef-89ff-92fbcf53809c.png

數(shù)據(jù)發(fā)送和接收,例程使用了nRF24L01P的ACK功能,所以在發(fā)送成功則會打印Send TX_DS,發(fā)送失敗會打印Send MAX_RT。

3c0c4dac-6689-11ef-89ff-92fbcf53809c.png

總結(jié)

以上實驗中,實現(xiàn)了基于STM32F103C8T6核心板的E01-ML01D的驅(qū)動移植以及通信驗證,其中的E01-ML01D可以替換為任意型號的nRF24L01P或者Si24R1的模塊。也可以稍加修改,適用于其他STM32系列的MCU。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16662

    瀏覽量

    347724
  • 驅(qū)動
    +關(guān)注

    關(guān)注

    12

    文章

    1788

    瀏覽量

    84895
  • STM32
    +關(guān)注

    關(guān)注

    2257

    文章

    10826

    瀏覽量

    352428
收藏 人收藏

    評論

    相關(guān)推薦

    E1985B B.02 E1985C C.02 E1985C C.01 E6785B B.01語法指南

    E1985B B.02-E1985C C.02-E1985C C.01-E6785B B.01語法指南
    發(fā)表于 08-21 14:40

    長虹FSP2054E01C_FSP2053E01相關(guān)資料推薦

    長虹FSP205-4E01C_FSP205-3E01液晶電源及保護電路原理與維修(L6599D_NCP1013AP06_UCC28051)文件下載
    發(fā)表于 06-04 06:43

    求助,是否需要禁用VCP以通過STM32F429I-DISC1 (E01) 上的引腳PA9和PA10訪問USART1?

    你好,我正在嘗試使用 FT2232HL 作為 USART 轉(zhuǎn) USB 接口連接到我的 STM32F429I-DISC1(E01 版本)板的 USART1 引腳 PA9 和 PA10。我在
    發(fā)表于 12-27 07:05

    DS28E01-100.pdf

    GENERAL DESCRIPTIONThe DS28E01-100 combines 1024 bits of EEPROMwith challenge-and-response
    發(fā)表于 04-15 11:48 ?35次下載

    24c01a的讀寫程序

    #include /*************************************************向24C01A寫入一個字節(jié)輸入:E
    發(fā)表于 01-19 23:08 ?58次下載

    基于stm32_的fatfs0.07e移植過程分享

    基于stm32_的fatfs0.07e移植過程分享
    發(fā)表于 11-05 17:04 ?0次下載

    dsPIC33E/PIC24E 系列參考手冊—第01章 簡介

    dsPIC33E/PIC24E 系列參考手冊—第01章 簡介
    發(fā)表于 05-25 17:19 ?28次下載

    TPD1E01B04 適用于 USB Type-C 和 Thunderbolt 3 的單通道 ESD 保護二極管

    電子發(fā)燒友網(wǎng)為你提供TI(ti)TPD1E01B04相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有TPD1E01B04的引腳圖、接線圖、封裝手冊、中文資料、英文資料,TPD1E01B04真值表,TPD1E01
    發(fā)表于 10-16 11:16
    TPD1<b class='flag-5'>E01</b>B04 適用于 USB Type-<b class='flag-5'>C</b> 和 Thunderbolt 3 的單通道 ESD 保護二極管

    HDSP-G01E 10.16毫米(0.4英寸)雙數(shù)字通用七段顯示器

    電子發(fā)燒友網(wǎng)為你提供Broadcom(ti)HDSP-G01E相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有HDSP-G01E的引腳圖、接線圖、封裝手冊、中文資料、英文資料,HDSP-G01E真值表,HDSP-G
    發(fā)表于 07-04 10:49
    HDSP-G<b class='flag-5'>01E</b> 10.16毫米(0.4英寸)雙數(shù)字通用七段顯示器

    STM32程序移植的NRF24L01模塊詳細說明

    本文檔的主要內(nèi)容詳細介紹的是STM32程序移植的NRF24L01模塊詳細說明包括了:發(fā)送,接收,源碼,資料等。
    發(fā)表于 06-02 08:00 ?17次下載
    <b class='flag-5'>STM32</b>程序<b class='flag-5'>移植</b>的NRF24L<b class='flag-5'>01</b>模塊詳細說明

    天龍AVR1507_1517E1C_SM_V01功放電路圖

    天龍AVR1507_1517E1C_SM_V01功放電路圖介紹。
    發(fā)表于 04-19 09:28 ?37次下載

    ESP-01/01S/07/07S/12E/12F/12S用戶手冊

    ESP-01/01S/07/07S/12E/12F/12S用戶手冊
    發(fā)表于 05-21 11:55 ?37次下載

    DCAP3000系列-V20D(E)01-技術(shù)說明書-CH

    DCAP3000系列-V20D(E)01-技術(shù)說明書-CH(電源技術(shù))-DCAP3000系列-V20D(E)01-技術(shù)說明書-CH? ? ? ? ? ? ?
    發(fā)表于 09-23 14:31 ?3次下載
    DCAP3000系列-V20D(<b class='flag-5'>E</b>)<b class='flag-5'>01</b>-技術(shù)說明書-CH

    DS1855E-C01+T&R 數(shù)據(jù)采集 - 數(shù)字電位器

    電子發(fā)燒友網(wǎng)為你提供Maxim(Maxim)DS1855E-C01+T&R相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有DS1855E-C01+T&R的引腳圖、接線圖、封裝手冊、中文資料、英文資料,DS1855E-C01+T&R真值表,DS185
    發(fā)表于 01-23 18:03
    DS1855<b class='flag-5'>E-C01</b>+T&R 數(shù)據(jù)采集 - 數(shù)字電位器

    e2 studio 2024-01發(fā)布說明

    電子發(fā)燒友網(wǎng)站提供《e2 studio 2024-01發(fā)布說明.pdf》資料免費下載
    發(fā)表于 01-30 09:47 ?1次下載
    <b class='flag-5'>e</b>2 studio 2024-<b class='flag-5'>01</b>發(fā)布說明