其实网上NRF24L01的资料很多,例程也很多,本不应该有什么大问题,但是确出了各种奇怪的问题,花了不少时间。
STM32F103+NRF24L01
用最小系统板搭了个平台,加上网上的例程,问题是检查NRF24L01的时候,一直没法找到,读写地址寄存器失败,起初怀疑是引线的问题,自己检查连线以及针脚定义,都没有发现问题,既然针脚没有问题怀疑是SPI通讯的问题,接着检查SPI配置,都没有发现明显的错误,尽管分频到256还是不行,十分不解,检查时序代码,因为是网上现成的代码本来想不应该有问题,但是还真的发现问题了,发现网上时序先是将CSN拉高!发送结束后再拉低!这个明显不符,修改后运行正常,哎,网上人家给的例程未必人家就验证过,切记!
STM32F407+NRF24L01
用自己做的系统板子,加上网上的例程搭了下,起初的问题和在f1上的一样,心想只要更改了CSN的问题就也能解决,但是问题依旧!!!十分不解,反复检查引脚连接以及SPI设置,因为都是CUBE生成的配置文件,应该不会有问题啊,开启在线调试,意外发现读写能正常,意识到估计需要加延迟,后续的程序中CSN拉低后加了HAL_DELAY(1),程序就能正常运行了。
STM8L051F3+NRF24L01
自己刚刚接触STM8,这是我第一个做的东西,很多地方都不是很熟悉,stm32用cube就能方便的生成配置,STM8也有cube但是不能生成配置。。。那有啥用!要手动配置时钟,端口,复用等,感觉已经好不习惯了,哎。调通了GPIO,调通了USART,用了网上的例程,配置SPI,结果读写寄存器失败,也算正常吧,毕竟第一次,检查引脚连接,都正确,检查GPIO配置,对这块其实不是很确定,因为有的例程里面配置了SPI,就没有再配置GPIO,有的还会配置GPIO,都试了还是有问题,在线调试发现寄存器返回的是0X08,很奇怪,并不是0X00,用万用表量了一下发现CE口正常,但是CSN口翻转的时候高电平只能到1.36v左右,好奇怪,反复检查了电路原理图,以及手册,这个口也不是真开漏口,不应该这样啊,无意间量了一下附近的引脚,发现和附近的引脚短路了。。。然后用放大镜看有很小很短的一段接上了。。。去除后引脚翻转正常,通讯一切正常
至此所有调试结束,并成功发送接收信息,这个小东西没有想象的简单啊。
关键字:NRF24L01 STM32F4 STM32F1
引用地址:
NRF24L01调试记 (STM32F4,STM32F1,STM8L)
推荐阅读最新更新时间:2024-11-10 22:19
STM8L探索套件学习笔记-EEPROM(十一)
上节将到官方例程使用EEPROM存储外围电路消耗的电流值,今天我们对STM8L的EEPROM介绍下。STM8L带有的32K的FLASH和1K的EEPROM都可以编程和擦除,编程模式有1、字节byte,2、字word,3、BLOCK和4、编程和擦写完中断。 由于默认是锁定的,所以对FLASH和EEPROM编程首先要解锁,解锁的方式是写如寄存器特定值,0X56 0XAE。在IAR编译器当中,__eeprom 用于EEPROM 存储空间, 控制数据存放,控制指针类型和存放。@用于变量的绝对地址定位。也可以用#pragma location 命令。 EEPROM 区域数据存储: 用关键字 __eeprom 控制来存放, __eeprom
[单片机]
STM32F429 >> 14. TIM_(一)_基本定时器
将定时器和GPIO 结合起来使用可以实现非常丰富的功能,例如测量输入信号的脉冲宽度、产生输出波形、产生PWM 控制电机状态等。 STM32F42xxx 系列控制器有 2 个高级控制定时器、10 个通用定时器和 2 个基本定时器,还有 2 个看门狗定时器。 控制器上所有定时器都是彼此独立的,不共享任何资源。 其中最大定时器时钟可通过 RCC_DCKCFGR 寄存器配置为 90MHz 或者 180MHz。 就功能上来说通用定时器包含所有基本定时器功能,而高级控制定时器包含通用定时器所有功能。 基本定时器 基本定时器主要两个功能: 第一就是基本定时功能,生成时基; 第二就是专门用于驱动数模转换器(DAC)。 基本定时器
[单片机]
stm32f429引脚复用
以下内容在stm32f4xx_gpio.h内 /** @defgroup GPIO_Alternat_function_selection_define * @{ */ /** * @brief AF 0 selection */ #define GPIO_AF_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ #define GPIO_AF_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ #define GPIO
[单片机]
STM32F1系列单脉冲模式下最小脉宽为多少?
在微控制器领域,STM32F1系列是一款非常流行的产品,广泛应用于各种嵌入式系统设计。该系列微控制器具有多种特性,其中包括单脉冲模式。在这种模式下,最小脉宽是一个重要的参数,它决定了脉冲信号的持续时间。 STM32F1系列微控制器的PWM(脉冲宽度调制)功能可以产生不同宽度的脉冲。关于最小脉冲宽度的具体数值,这取决于具体的硬件配置和编程设置。 在硬件上,STM32F1系列微控制器通常具有内置的PWM模块,可以配置为产生不同频率和占空比的脉冲。然而,具体的最小脉冲宽度限制取决于硬件电路设计和配置。 在软件编程方面,可以通过设置PWM模块的参数来配置脉冲的宽度。一般来说,可以通过设置比较匹配值或计时器溢出值等方式来控制脉冲宽度。具
[单片机]
STM32F4 开发笔记10:USB FS的枚举方法
FS是Full Speed的意思,指全速USB设备,在电路设计时,通过在DP接1.5K上拉电阻到电源的方法告知主机为全速USB设备,但是在具体使用时,还有问题存在,就是当单片机复位后,主机端虽然还能辨认当前USB设备,但是不能够直接使用,其原因在于USB设备重新启动后,需要完成一个枚举过程,以通知主机。 枚举的具体电路如下图所示,其原理很简单,系统上电后将DE引脚拉高,待USB初始化完毕后,将DE引脚拉低即可。 具体的头文件程序代码如下,建立DE引脚类,并在CUSB类中具体声明。 #ifndef USB_H_ #define USB_H_ #ifdef __cplusplus extern C { cla
[单片机]
STM32F4 SPI2初始化及收发数据【使用库函数】
我的STM32F4 Discovery上边有一个加速度传感器LIS302DL。在演示工程中,ST的工程师使用这个传感器做了个很令人羡慕的东西:解算开发板的姿态。当开发板倾斜时候,处于最上边的LED点亮,其他LED不亮。同时,用MicroUSB数据线将开发板连接电脑时,开发板就会虚拟成一个鼠标。倾斜开发板时,鼠标指针会向倾斜的方向移动。归根结底,就是牛B的ST工程师用加速度传感器完成了姿态解算。 在开发板上,加速度传感器使用了SPI方式用STM32F4芯片进行通信。STM32F4的SPI1 作为主机,与LIS302Dl进行通信,读取或者写入数据。由于我没有使用过STM32的SPI口,因此在板子的空余资源中找到了SPI2接口来做实
[单片机]
STM32F4(读取芯片ID)
唯一设备标识符适合: ● 用作序列号(例如 USB 字符串序列号或其它终端应用程序) ● 在对内部 Flash 进行编程前将唯一 ID 与软件加密原语和协议结合使用时用作安全密钥以提高 Flash 中代码的安全性 ● 激活安全自举过程等 96 位的唯一设备标识符提供了一个对于任何设备和任何上下文都唯一的参考号码。用户永远不能改变这些位。 96 位的唯一设备标识符也可以以单字节/半字/字等不同方式读取,然后使用自定义算法连接起来。 基址:0x1FFF7A10 typedef struct { uint32_t id ; }ChipID; ChipID Get_ChipID(void) { ChipID chi
[单片机]
对一款国产3D霍尔传感器的SPI封装
对一款国产的3D霍尔传感器的SPI封装.上 这篇文章完成我们的封装,以及在STM32F4的板子上面测试。 一次费我这么多引脚,我吐了。看来得上IIC,然后就是板子的引脚选择注意在cubuMX里面和实际的板子丝印多次比对,一个中断脚改了两次,气死我了。 BUTT_OUT 管脚用于检测磁铁与芯片之间的按键功能,并且也可以配置为 Trigger 模式,触发单次测量。 INT:主机向芯片发送持续感应模式或单次测量命令,芯片完成一次对应测量项的测量后,INT 脚会置 1,并且在芯片发送读取命令,读回测量数据以前,都保持为 1。主机向芯片发送唤醒睡眠模式命令后,当芯片周围测量项的变化量超出寄存器中设定的变化阈值时,INT 脚会置 1,并且在芯
[单片机]