0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于STM32的E01和E01C驱动移植

亿佰特物联网应用专家 2024-08-30 12:35 次阅读

实验简介

基于STM32F103C8T6的E01系列(nRF24L01P)和E01C系列(SI24R1)的EBYTE官网例程移植。EBYTE官网例程是基于STM8L151编写,本次实验的目的是将该例程移植到常见的MCU型号STM32F103C8T6,实现基本的无线通信电脑端的串口调试助手操作和显示数据收发。(可以稍加修改,适用于其他STM32系列的MCU)

硬件环境

• 2个E01系列的相同型号的模块(或者2个E01C系列的相同型号的模块)

• 2个USB转TTL模块(CH340版本)

• 2个STM32F103C8T6最小系统板

• 1个STM32烧录器(DAP-LINK或者ST-LINK等等)

• 1台电脑

• 杜邦线若干

软件环境

• STM32的开发软件(MDK_ARM,IAR或者STM32CubeIDE等等)

• STM32CubeMX

• XCOM V2.6 串口调试助手

• CH340驱动

模块简介

视选择型号,参考厂家提供的模块手册。因为E01和E01C分别使用的nRF24L01P和SI24R1射频方案,但是寄存器基本一致,操作方式也大致相同,所以驱动程序可以通用。

本次实验使用E01-ML01D,基于nRF24L01P方案,3.3V供电,最大发射功率0dBm,参考通信距离100m。模块的寄存器和详细操作可以直接参考nRF24L01P的芯片手册。E01-ML01D模块示意及引脚定义如下图。

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

实验步骤

本次实验使用的STM32开发环境是MDK_ARM和STM32CubeMX,烧录器使用的是ST-LINK。涉及到的软件获取和安装方法这里不做介绍,建议参考网上的教程。注意,如果使用的大功率E01或者E01C模块,例如发射功率大于等于20dBm,需要考虑供电是否达到要求,本次使用的是E01-ML01D的发射电流在13mA,一般的STM32F103C8T6核心板都可以满足要求。

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

1.准备EBYTE官网例程

在亿佰特官网搜索E01-ML01D,在【相关下载】一栏,找到通信例程并下载解压。

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外设。

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

④MCU的串口配置

选择USART1,配置USART1参数

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不设置。

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

⑥GPIO配置

直接点击MCU对应引脚,将其配置。将PA4作为SPI1的片选引脚,PB0作为E01-ML01D模块的CE引脚,PB1作为E01-ML01D模块的IRQ引脚。所以需要把PA4和 PB0 配置为GPIO_Output,PB1配置为GPIO_Input。配置引脚后,在GPIO选项中,会显示配置的这三个引脚配置详情。然后在GPIO选项中,需要配置GPIO的其他参数。

这一步完成后,我们要使用的MCU外设已经基本完成配置,接下来是工程的设置和保存。

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

⑦设置工程以及保存路径

配置工程及代码生成配置,最后点击GENERATE CODE,等待进度条完成后会出现一个弹窗,选择Open Project 直接打开工程。接下来就是在MDK_ARM中的操作。

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

3.代码移植

①完成上面的步骤后,已经打开了创建的工程,先进行首次编译,查看是否有编译错误。

正常的编译结果应该是0 Error(s),0 Warning(s)。

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

②实现串口重定向,修改usart.c和usart.h文件

usart.c中修改两个位置。

一个是在/* USER CODE BEGIN 0 */和/* USER CODE END 0 */之间新添加如下代码:

/* USER CODE BEGIN 0 */
uint8_t uart_rx_data = 0;//串口中断接收的数据存储
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)函数,在该函数中的

/* 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

③在创建的工程路径下,新建一个名为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文件

由于涉及到的修改较多,不做一一介绍,直接给出修改后的该文件夹下的所有文件附件。(可联系获取)

⑦修改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)函数:/** * @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的接收和发送中断回调函数,

在/* 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)函数,

在 /* 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 */}

至此,程序移植已经全部完成,再次重新编译。如果出现warning: #1-D: last line of file ends without a newline这个警告,请在该文件最后一行添加新行。

通信验证

①程序下载

将ST-LINK的下载接口与STM32核心板的下载接口连接,对应接线如下:

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

Debug配置:

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

配置完成后,点击LOAD进行下载。

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

下载成功后,会出现如下提示:

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

②硬件连接

建议在接线过程中断电操作。STM32核心板的供电使用自带的USB接口供电。

STM32核心板与E01-ML01D连接

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

STM32核心板与USB转TTL工具连接

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

③通信测试

将核心板通过USB接口供电,USB转TTL工具连接上电脑上的串口调试助手。串口调试助手配置如下:

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

将STM32核心板复位,它首先会检查与E01-ML01D的连接。如果连接成功,则会打印Link successful。如果链接失败,则会打印Link Fail Please check and reset module。最大连接次数为6次,每次连接会打印当前连接次数。

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

数据发送和接收,例程使用了nRF24L01P的ACK功能,所以在发送成功则会打印Send TX_DS,发送失败会打印Send MAX_RT。

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

总结

以上实验中,实现了基于STM32F103C8T6核心板的E01-ML01D的驱动移植以及通信验证,其中的E01-ML01D可以替换为任意型号的nRF24L01P或者Si24R1的模块。也可以稍加修改,适用于其他STM32系列的MCU。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16645

    浏览量

    347660
  • 驱动
    +关注

    关注

    12

    文章

    1785

    浏览量

    84890
  • STM32
    +关注

    关注

    2256

    文章

    10822

    浏览量

    352381
收藏 人收藏

    评论

    相关推荐

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

    E1985B B.02-E1985C C.02-E1985C C.01-E6785B B.01语法指南
    发表于 08-21 14:40

    长虹FSP2054E01C_FSP2053E01相关资料推荐

    长虹FSP205-4E01C_FSP205-3E01液晶电源及保护电路原理与维修(L6599D_NCP1013AP06_UCC28051)文件下载
    发表于 06-04 06:43

    求助,是否需要禁用VCP以通过STM32F429I-DISC1 (E01) 上的引脚PA9和PA10访问USART1?

    你好,我正在尝试使用 FT2232HL 作为 USART 转 USB 接口连接到我的 STM32F429I-DISC1(E01 版本)板的 USART1 引脚 PA9 和 PA10。我在
    发表于 12-27 07:05

    DS28E01-100.pdf

    GENERAL DESCRIPTIONThe DS28E01-100 combines 1024 bits of EEPROMwith challenge-and-response
    发表于 04-15 11:48 35次下载

    24c01a的读写程序

    #include /*************************************************向24C01A写入一个字节输入:E
    发表于 01-19 23:08 58次下载

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

    基于stm32_的fatfs0.07e移植过程分享
    发表于 11-05 17:04 0次下载

    dsPIC33E/PIC24E 系列参考手册—第01章 简介

    dsPIC33E/PIC24E 系列参考手册—第01章 简介
    发表于 05-25 17:19 28次下载

    TPD1E01B04 适用于 USB Type-C 和 Thunderbolt 3 的单通道 ESD 保护二极管

    电子发烧友网为你提供TI(ti)TPD1E01B04相关产品参数、数据手册,更有TPD1E01B04的引脚图、接线图、封装手册、中文资料、英文资料,TPD1E01B04真值表,TPD1E01
    发表于 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英寸)双数字通用七段显示器

    电子发烧友网为你提供Broadcom(ti)HDSP-G01E相关产品参数、数据手册,更有HDSP-G01E的引脚图、接线图、封装手册、中文资料、英文资料,HDSP-G01E真值表,HDSP-G
    发表于 07-04 10:49
    HDSP-G<b class='flag-5'>01E</b> 10.16毫米(0.4英寸)双数字通用七段显示器

    STM32程序移植的NRF24L01模块详细说明

    本文档的主要内容详细介绍的是STM32程序移植的NRF24L01模块详细说明包括了:发送,接收,源码,资料等。
    发表于 06-02 08:00 12次下载
    <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功放电路图介绍。
    发表于 04-19 09:28 37次下载

    ESP-01/01S/07/07S/12E/12F/12S用户手册

    ESP-01/01S/07/07S/12E/12F/12S用户手册
    发表于 05-21 11:55 37次下载

    DCAP3000系列-V20D(E)01-技术说明书-CH

    DCAP3000系列-V20D(E)01-技术说明书-CH(电源技术)-DCAP3000系列-V20D(E)01-技术说明书-CH             
    发表于 09-23 14:31 3次下载
    DCAP3000系列-V20D(<b class='flag-5'>E</b>)<b class='flag-5'>01</b>-技术说明书-CH

    DS1855E-C01+T&R 数据采集 - 数字电位器

    电子发烧友网为你提供Maxim(Maxim)DS1855E-C01+T&R相关产品参数、数据手册,更有DS1855E-C01+T&R的引脚图、接线图、封装手册、中文资料、英文资料,DS1855E-C01+T&R真值表,DS185
    发表于 01-23 18:03
    DS1855<b class='flag-5'>E-C01</b>+T&R 数据采集 - 数字电位器

    e² studio 2024-01发布说明

    电子发烧友网站提供《e² studio 2024-01发布说明.pdf》资料免费下载
    发表于 01-30 09:47 1次下载
    <b class='flag-5'>e</b>² studio 2024-<b class='flag-5'>01</b>发布说明