一些应用需要定制开发无线串口、指定发送频点、调制方式、加密传输等等,需要使用无线数据的传输场景,需要使用公用频段进行数据传输。
一些场景需要使用Sub-1 GHz频点进行数据传输,比如无线串口,其他无线申请,在国内选择ISM频段也是比较模糊,这里只是做可以使用多个频点进行测试,这里比较有比较中肯的说法。
目前在我国800M 和900M 频段目前已经被GSM的蜂窝移动网所占用,绝大部分的产品都工作在433MHZ左右,315M频段是早期的无线遥控的产品的主要频段,因此在该段的无线电磁环境相当的复杂,进行无线的数据传输是不太可靠的,433M频段目前由于很多新的汽车的遥控器目前也逐步使用该频段,因此也正在变得越来越复杂。所以这两个频段更多的使用在传输简单数据的无线遥控上。而对于水、电、气等公用事业的计量数据采集,国家无线电管理部门释放了两个免申请的无线计量频段(470-510M),专门用于民用计量设备的无线数据传输。
硬件设计
这里选择使用TI CC1200进行无线数传开发,该芯片性能优点较多,下图为主要特性
典型应用图
STM32管脚连接
STM32管脚 | CC1200管脚 | 备注 |
PB8 | GPIO2 | 中断管脚General-purpose I/O,可以配置为中断 |
PA4 | CSn | 片选Active-low chip select |
PA5 | SCLK | 时钟 |
PA6 | SO(GPIO1) | Serial data out (general-purpose I/O) |
PA7 | SI | Serial data in |
PA11 | RESET_N | Asynchronous, active-low digital reset |
PA12 |
|
|
CC1200芯片运行状态机
刚开始软件开发时候,没有搞明白这个图,搞了很长时间,手册翻来翻去,发现这个图被我忽略了。CC1200收发同频,需要对状态机进行控制。
工程代码下载地址:
(1条消息) cc1200驱动STM32无线通信,无线数传无线串口,收发代码工程-嵌入式文档类资源-CSDN文库
代码解读
代码使用keil4.72编写,包含cc1200_rx工程实现无线数据接收、cc1200_tx工程实现无线数据发送
代码下载到板子,一个板子发送,另一个板子接收
整个驱动工程是从TI提供的例程中修改得到,但是TI的例程是使用的自家的MSP430单片机,导致驱动移植到STM32上工作量非常大,也有很大难度。这里完成移植,并测试通过数据收发,也在实际项目中使用。其中:
cc1200_rx工程实现无线数据接收
cc1200_tx工程实现无线数据发送
基础代码,STM32接口定义,主要是SPI接口和复位控制管脚,其中VCTL管脚是项目中独有设计的增大功放的控制IO,可以忽略。
SPI配置
中断配置
功放控制管脚配置
当时项目需要所以射频部分加大了发送功放,一般设计可以没有这个管脚,也就是个IO开关
收发控制,其实就是完善上图CC1200状态机的控制,看懂了上图,代码也就看懂了,代码也就好编写了。
CC1200参数配置
CC1200参数修改,使用TI提供SmartRF Studio ,我项目使用版本比较低,生成的配置文件可能有些差异。导出的配置参数,复制到到cc120x_easy_link_reg_config.h文件,我代码里面做了很多个频点的配置文件,通过读取FLASH的载波频点进行区分使用哪个配置参数
CC1200配置成功后,需要读取配置文件,确认配置是否完全配置进去,这里是个大坑,当初没有做这个判断,每次开机都有不稳定的情况出现,反反复复,折腾了一个月才发现这个问题。