
上回在NUCLEO_L552ZE_Q_STM32Nucleo_144 开发板上测试了外部中断的使用,本想着这回来一篇有关TrustZone的文章,毕竟这才是Cortex-M33的重要的内容,于是花了些时间去研究,然而现实总是那么残酷,在这碰了壁,自己建立的工程下载进去之后没有反应,就想着先去看看官方给的GPIO_IOToggle_TrustZone例程,按照说明文件里的步骤下载到开发板上,结果还是没有任何反应,我也是一头雾水,在网上也找不到任何有关的资料,说明文档是英文的,看得也是一知半解的,所以就没弄成,还是决定先放在一边吧,不能被这个耽搁了。恰好手上有两个nRF24L01P模块,还有两块stm32f103c8t6小板子,于是就鼓捣了一下使用它们来做个无线通信测试,下面就请跟随我进入正题吧。 评测内容: 1、使用STM32F103C8T6系统板连接nRF24L01P作为主机发送一固定长度字符串,NUCLEO_L552ZE_Q_STM32Nucleo_144 开发板的板载SPI通信接口连接nRF24L01P作为从机接收,并且通过uart串口将接收到的数据发送到PC上位机显示,使用板载LED指示发送和接收状态。 所需元件: 1、NUCLEO_L552ZE_Q_STM32Nucleo_144 开发板*1; 2、STM32F103C8T6系统板*1; 3、nRF24L01P模块*2; 2、板载红色LED; 评测步骤: 1、新建工程: 本次测评我使用STM32CubeMX的开发板模板进行工程创建,针对NUCLEO_L552ZE_Q_STM32Nucleo_144 开发板上的板载硬件已经默认帮配置好了,只需要根据自己的需求配置SPI接口便可以了,按照如下步骤便可创建一个开发板的默认配置工程; ![]() ![]() 2、配置SPI接口: 根据下图配置将SPI接口设置好,SPI接口使用的是开发板上的CN7排座的SPI_A接口,在STM32CubeMX上SPI1的默认SCK引脚在PA1上,我根据开发板的原理图将其改到了PA5,需要注意的是,nRF24L01P的IRQ引脚需要设置成上拉输入模式; ![]() nRF24L01P的SPI接口 ![]() SPI配置选项 ![]() 开发板接口原理图 3、设置串口波特率: 开发板上与STLink虚拟串口连接使用的是LPUART1,工程创建的时候已经默认配置好了,使用PG7和PG8两个引脚,波特率为209700Bits/s,这个波特率不是我想要的,所以将它改成了921600Bits/s; ![]() 4、保存工程: 保存好配置工程并且生成MDK_v5工程; ![]() 5、测试串口的工作情况: 因为不能保证nRF24L01P能够顺利的工作,因此我是先测试串口能够正常工作之后再考虑加入nRF24L01P;这也是一种调试代码的技巧,一点点来,不然什么东西都一下子加上,调试的时候出问题就会不清楚问题的出处具体是在哪里; 在这里,又再一次体现出了HAL库强大的封装工艺了,在标准库函数上要实现发送一个字符串,需要自己调用串口发送字符的函数来循环实现发送字符串的函数,而在HAL库上,只需要一个函数,不管是发送字符还是发送字符串,统统都能搞定。 就像以前学习串口通信的时候发送Hello World一样,添加如下代码到main函数的循环里,
![]() 6、添加nRF24L01P相关的代码: nRF24L01P的代码我使用的是购买该模块的时候官方提供的测试模板,模块使用的是泽耀科技生产的挪威原装芯片nRF24L01P模块,不是黑色PCB板那种,但应该都是通用的,接口也是一样的,已经成功在我的STM32F103C8T6系统板上正常收发了,代码我会在末尾的附件中给出, 复制模板的nRF24L01P源代码和头文件到本工程中并添加到工程里; ![]() 由于使用的环境不一样,需要做一点修改,首先是引脚宏定义,在nRF24L01P.h文件的开头添加#include "main.h",并且将不需要的头文件包含去掉,nRF24L01P.h文中定义了模块的CSN、CE、IRQ三个接口的引脚,改成如下;
接下来是将SPI读写函数替换HAL库的SPI读写函数,在这里又再一次凸显出了HAL库的那个简单易用的优点;
7、编写代码实现无线接收功能:将nRF24L01P.h包含到main.c文件中,在文件开头定义一个用于接收数据的数组;
在main函数中添加如下代码,实现nRF24L01P的无线接收功能
![]() ![]() 总结: nRF24L01对我来说是个噩梦,为了能够发挥NRF24L01P的最远传输距离,曾经一点点啃英文数据手册应用在51单片机上(黑色小模块给的例程都是NRF24L01而不是NRF24L01P的,前者的传输距离较短,后者的资料有点少),前些天为了将原先51单片机上程序移植到STM32上,荒废了几天时间,还是无法发送数据,气得我直接将模块给废了,然后就遇到了这款红色版的模块,例程和资料都可以再公司官网上下载到,很详细靠谱。 NUCLEO_L552ZE_Q_STM32Nucleo_144 开发板的SPI和UART串口评测就这些,简单来说,使用HAL库来开发的代码确实要简单很多,开发板上的STLink还提供有虚拟串口,并且将SPI接口也都在一个地方引出来了,对于接线来说很方便。OK,有关nRF24L01P的细节东西比较多,有些地方没有阐述清楚的,欢迎在评论区指出。 ![]() |
【STM32L562E-DK】健康手环基础界面开发(一)—— 准备工作
STM32硬件结构学习
【STM32L562E-DK】健康手环基础界面开发(二)—— GUI移植
STM32L562E-DK 驱动FMC接口的LCD屏
STM32L562E-DK移植lua脚本语言
STM32L5 系列微控制器和 TrustZone® 开发入门
STM32CubeL5 TFM 应用程序入门
STM32CubeIDE 中基于 STM32L5 系列的项目入门
STM32U5对比STM32L5有 哪些更新?
STM32L5 中如何关闭 TrustZone ?