很早就打算做这么一块开发板:包含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. 原理图
2. PCB图
3. 实物图
(不含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
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协议调试及下载固件)。
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连接串口终端可以看到如下信息:
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)
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开发:文档收集与准备工作
2. 使用ST-LINK/V2调试器,通过openocd更新固件的方法:
2. 通过OpenOCD去除STM32F030F4P6写保护的方法
NOTE:
看起来STM32F030F4P6的写保护设置与STM32F103CBT6不同。
why not use a Bluetooth 4.0 SOC chip?
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.
可包含NRF24L01无线模块的STM32F030F4P6开发板
本开发板使用STM32F030F4P6 MCU, 预留nRF24L01无线模块接口
https://item.taobao.com/item.htm?spm=2013.1.0.0.uxiw18&id=537149781025&ns=1&abbucket=1#detail