STM32: 含nRF24L01无线模块的STM32F030F4P6开发板

很早就打算做这么一块开发板:包含nRF24L01无线模块可以实现近距离通信,同时使用STM32F030F4 MCU提供的有限的GPIO资源对外围设备进行控制,开发板(STM32F030-DEV V1.0)提供:

- 1个User LED用于指示当前的状态

- 1个User button以便手动对当前的状态进行更新

- 1个USART接口,用于打印调试信息或者进行板与板之间的通信

- 1个I2C接口,外接sensor模块(或用于MCU Flash编程,system memory boot mode下)

- 1个SPI接口,用于连接nRF24L01无线模块。

nRF24L01无线模块主要有两种封装模式,这里为了缩小开发板的体积,使用了SMT封装,相比非SMT封装,从当前测试的情况来看,性能会稍微弱一些。

  • 开发板原理图与PCB图

1. 原理图

2016_08_12_stm32f030_dev_sch

2. PCB图

2016_08_12_stm32f030_dev_brd

3. 实物图

stm32f030f4p6_nrf24_1

(不含nRF24L01无线模块)

NOTE:

由于在PCB打样时进行了拼板,元器件的编号已经改变,需要对照上图提供的sch与brd文件。

  • 硬件配置

1. MCU: 使用的是STM32F030F4P6

- ARM Cortex-M0 CPU, 最高可运行在48MHz

- 具有4KiB RAM和16KiB FLASH空间

- Datasheet: DM00088500.pdf

- Reference manual: stm32f030f4_DM00091010.pdf

2. USB 接口:使用的是Micro USB 5S B型牛角连接器。由于STM32F030F4P6没有USB外设,该接口只是用于供电

3. LDO:使用RT9193-33GB芯片,可提供300mA电流

4. 1个用户按键:占用MCU PA0,由于该引脚具有wakeup的功能,可以在standy mode下唤醒MCU

5. 2个LED指示灯

- 红色LED:电源指示灯

- 翠绿色LED:用户指示灯,占用MCU PA4(与SPI接口NSS引脚共用)低电平有效

6. 晶振:提供8MHz外部高速时钟(HSE)

7. 其它接口

- USART接口:通过 SM04B 4Pin连接器向外提供VDD(3.3V), Rx(PA3), Tx(PA2), GND信号

- SWD接口:通过SM04B连接器向外提供VDD(3.3v), SWCLK(PA14), GND, SWDIO(PA13)信号,用于固件更新

- I2C接口:通过SM04B连接器向外提供VDD(3.3V), SCL(PA9), SDA(PA10), GND信号,SCL与SDA通过4.7K电阻上拉

- SPI接口:预留给nRF24L01模块,提供VDD(3.3V), GND, CE(PA1), NSS(PA4), SCK(PA5), MOSI(PA7), MISO(PA6), IRQ(PB1)信号

  • system memory boot mode

在禁用SWD接口的时候,如果我们还需要对MCU中的固件进行更新,可以通过system memory boot mode对固件进行更新。更新所使用的协议为USART,  TX对应的是PA9即开发板中I2C接口中的SCL信号,而RX对应的是PA10即I2C接口中的SDA信号(与USART接口中的Tx、Rx信号刚好互换)。

1. 文档请参考AN2606:

http://www.st.com/content/ccc/resource/technical/document/application_note/b9/9b/16/3a/12/1e/40/0c/CD00167594.pdf/files/CD00167594.pdf/jcr:content/translations/en.CD00167594.pdf

2016_08_12_stm32f030f4p6_system_memory_boot_mode

2. 相关的工具可以从这里下载:

http://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-programmers/flasher-stm32.html

进入system memory boot mode之后,就可以通过Flash Loader Demonstrator禁用Flash的读写保护(擦除Flash之后,又可以通过SWD协议调试及下载固件)。

2016_08_12_flash_loader

3. 操作方法

开发板提供一个JUMP JMP1, 上电前短接这两个引脚,可以使MCU进入system memory boot mode, 通过I2C接口的两个信号线:SDA连接串口线的Tx信号线(TTL 电平),SCL连接串口线的Rx信号线(TTL电平),之后就可以通过Flash Loader Demonstrator工具对MCU中的FLASH进行操作。

  • 相关例程

1. 由HSI提供系统时钟,基于ChibiOS/RT系统控制LED

相关的代码请从这里下载:2016_08_12_stm32f030_dev_v1_led_hsi.tar.gz

程序运行时,User LED会以1Hz的频率闪烁,同时如果通过USART1连接串口终端可以看到如下信息:

2016_08_12_stm32f030_dev_v1.0_led_hsi

2. 由HSE提供系统时钟,基于ChibiOS/RT系统控制LED

由于开发板自带8MHz晶振,可以使用外部高速时钟(HSE),与HSI例程相比,只是重新配置了系统时钟,区别如下:

diff --git a/ChibiOS/demos/STM32/RT-STM32F030F4/mcuconf.h b/ChibiOS/demos/STM32/RT-STM32F030F4/mcuconf.h
index 26b8377..d79f57e 100644
--- a/ChibiOS/demos/STM32/RT-STM32F030F4/mcuconf.h
+++ b/ChibiOS/demos/STM32/RT-STM32F030F4/mcuconf.h
@@ -39,15 +39,15 @@
 #define STM32_NO_INIT                       FALSE
 #define STM32_PVD_ENABLE                    FALSE
 #define STM32_PLS                           STM32_PLS_LEV0
-#define STM32_HSI_ENABLED                   TRUE
+#define STM32_HSI_ENABLED                   FALSE
 #define STM32_HSI14_ENABLED                 TRUE
 #define STM32_LSI_ENABLED                   TRUE
-#define STM32_HSE_ENABLED                   FALSE
+#define STM32_HSE_ENABLED                   TRUE
 #define STM32_LSE_ENABLED                   FALSE
 #define STM32_SW                            STM32_SW_PLL
-#define STM32_PLLSRC                        STM32_PLLSRC_HSI_DIV2
+#define STM32_PLLSRC                        STM32_PLLSRC_HSE
 #define STM32_PREDIV_VALUE                  1
-#define STM32_PLLMUL_VALUE                  12
+#define STM32_PLLMUL_VALUE                  6
 #define STM32_HPRE                          STM32_HPRE_DIV1
 #define STM32_PPRE                          STM32_PPRE_DIV1
 #define STM32_MCOSEL                        STM32_MCOSEL_NOCLOCK

相关的代码可以从这里下载:2016_08_12_stm32f030_dev_v1_led_hse.tar.gz

3. 使用STM32F030F4P6控制WS2812B(基于ChibiOS/RT)

STM32: 使用STM32F030F4P6控制WS2812B

4. 使用STM32F030F4P6控制nRF24L01模块进行简单收发操作(基于ChibiOS/RT系统)

相关的代码可以从这里下载(使用HSE):2016_08_12_stm32f030_dev_v1_nrf24_hse.tar.gz

NOTE:

-nRF24L01相关代码来自:http://www.playembedded.org/blog/en/2015/07/16/a-radio-frequency-transceiver-library-nrf24l01-and-chibiosrt/

- 编译时需要修改main.c文件,以确实编译出来的固件是作为transmitter还是作为receiver。

5. 基于STM32F030F4P6 MCU运行FreeRTOS v8.1.2系统简单例程 - 点亮LED

待更新!

  • 参考文档

1.  STM32F030F4开发:文档收集与准备工作

stm32f030f4开发:文档收集与准备工作

2. 使用ST-LINK/V2调试器,通过openocd更新固件的方法:

STM32: 使用openocd更新stm32f030F4固件

2. 通过OpenOCD去除STM32F030F4P6写保护的方法

STM32: 通过openocd设置STM32F103CBT6芯片的读保护

NOTE:

看起来STM32F030F4P6的写保护设置与STM32F103CBT6不同。

《STM32: 含nRF24L01无线模块的STM32F030F4P6开发板》有5个想法

    1. Because it’s much cheaper and easier to write code for MCU system.
      You can use this module to establish a network, please refer (I have not test yet) http://maniacbug.github.io/RF24Network/index.html. And better network topology.

  1. 可包含NRF24L01无线模块的STM32F030F4P6开发板
    本开发板使用STM32F030F4P6 MCU, 预留nRF24L01无线模块接口

    https://item.taobao.com/item.htm?spm=2013.1.0.0.uxiw18&id=537149781025&ns=1&abbucket=1#detail

发表评论

电子邮件地址不会被公开。 必填项已用*标注