|
|
7 stundas atpakaļ | |
|---|---|---|
| STM32F10x_FWLib | 7 stundas atpakaļ | |
| app | 7 stundas atpakaļ | |
| core | 7 stundas atpakaļ | |
| keil_v5 | 7 stundas atpakaļ | |
| peripheral | 7 stundas atpakaļ | |
| project | 7 stundas atpakaļ | |
| radio | 7 stundas atpakaļ | |
| .gitignore | 7 stundas atpakaļ | |
| README.md | 7 stundas atpakaļ | |
| gitFocePushRemote.bat | 7 stundas atpakaļ | |
| gitInit.bat | 7 stundas atpakaļ | |
| gitPushRemote.bat | 7 stundas atpakaļ | |
| keilkilll.bat | 7 stundas atpakaļ |
软件开发移植,先看这里 跳转
..\adapterBoardDriver_xxxxxxxxxxxxxxx_Vxx
├──app \\常用应用模块封装
| └──
├──core \\MCU内核文件
| └──
├──STM32F10x_FWLib \\MCU官方库函数
└──
├──image \\md文件显示用的图片
| └──
├──keil_v5 \\keil编译器工程文件,包含编译生成的HEX文件
| └──Object \\编译生成的HEX文件在此文件夹
├──peripheral \\项目用到的MCU外设
| └──
├──project \\项目的主函数和GPIO定义包含文件
| └──
├──radio \\射频底层驱动文件
| ├──myRadio_gpio.c \\射频驱动接口硬件初始化
| └──myRadio.c \\为无线应用通用封装API
| └──...
448MHz的中心频点ret = rf_init();这个返回值是否等于OK磐启微电子PAN3029计算器.xlsx计算得到最终的波特率
keil工程已经设置了4个选项:
project_AT:表示该工程的MCU型号选择的是雅特力AT32F413RCT7单片机,不带自定义boot功能,即不设置偏移地址project_ST:表示该工程的MCU型号选择的是ST意法半导体STM32F103RCT6单片机,不带自定义boot功能,即不设置偏移地址project_AT_APP:表示该工程的MCU型号选择的是雅特力AT32F413RCT7单片机,带自定义boot功能,设置偏移地址为0x000C800project_ST_APP:表示该工程的MCU型号选择的是ST意法半导体STM32F103RCT6单片机,带自定义boot功能,设置偏移地址为0x000C800模块演示板出厂默认烧录project_ST_APP工程,该工程是带boot功能的,默认选择的Debug工具是CMSIS-DAP Debugger工具,在Option->Debug->Setting->Flash Download->Programming Algorithm->Start中设置了起始地址,如果更换了Debug工具,起始地址会恢复默认,需要重新设置起始地址。
软件功能框图
软件开发主要就是涉及射频模块驱动,与硬件相关的主要就是SPI接口和一些辅助IO口(比如中断信号脚),这部分软件主要放在./radio/myRadio_gpio.c中。
中断信号是通过回调函数RADIO_GPIO_CALLBACK的方式从./radio/myRadio_gpio.c回调到./radio/myRadio.c中处理,回调函数的方式只是为了方便软件编写,用户可以直接把外部中断函数直接放在./radio/myRadio.c中处理。
SPI_HARD来选择,具体见./radio/myRadio_gpio.c/void myRadio_gpio_init(RADIO_GPIO_CALLBACK cb)调用./radio/myRadio.c/myRadio_abort()函数,将射频模块进入低功耗模式,进入低功耗模式后,射频模块将不接收任何无线信号,只有当射频模块进入接收状态后,才能再次接收无线信号。
rf_deepsleep();可进入超低功耗模式,电流功耗400na左右,唤醒后需要重新初始化调用rf_sleep();可进入低功耗模式,电流功耗1ua左右
void myRadio_abort(void)
{
if (rf_handle == 0)
{
return;
}
}
调用./radio/myRadio.c/myRadio_receiver()函数,将射频模块进入接收状态,进入接收状态后,射频模块将接收周围环境中的无线信号,并可以接收数据包。在接收状态或者发送过程不能重新调用该函数,发送需要等待发送完成才能再次调用该函数,不然会打断无线发送。接收到无线数据后,射频模块会通过IRQ引脚产生输出个信号,然后再./radio/myRadio.c/myRadio_process(void)函数中读取fifo中的数据包。
void myRadio_receiver(void)
{
if (rf_handle == 0)
{
return;
}
rf_workProcess = RF_PRC_RX;
}
调用./radio/myRadio.c/myRadio_transmit(rfTxPacket_ts *packet)函数,将射频模块进入发送状态,进入发送状态后,射频模块将发送数据包,发送完成后才可以调用接收函数进入接收状态,发送完成后,射频模块会通过IRQ引脚产生输出个信号,然后再./radio/myRadio.c/myRadio_process(void)函数中读取发送完成状态。
void myRadio_transmit(rfTxPacket_ts *packet)
{
if (rf_handle == 0)
{
return;
}
rf_workProcess = RF_PRC_TX;
}
调用./radio/myRadio.c/myRadio_init(int agr0, void *agr1_ptr)函数,将射频模块初始化,初始化完成后,射频模块将进入接收状态,该函数会初始化一个默认的参数,如果需要自定义参数,比如频率信道,发射功率,无线波特率等参数,可以调用相关函数接口重新设置,如果不需要自定义参数,也可以通过修改rf_set_default_para();中的默认参数:
./radio/myRadio.c/myRadio_setFrequency(uint32_t freq):设置射频模块工作频率./radio/myRadio.c/myRadio_setTxPower(uint8_t power):设置射频模块发射功率./radio/myRadio.c/myRadio_setRfParams(uint8_t sf, uint8_t bw, uint8_t cr):设置射频模块无线波特率,信道带宽,编码速率初始化完成后就可以进入接收状态或者发送无线数据包了,具体使用方法可以参考示例代码。
void myRadio_init(int agr0, void *agr1_ptr)
{
myRadio_gpio_init(myRadio_gpioCallback);
/**-------------------------radio init----------------------------------**/
/**-------------------------radio init end----------------------------------**/
myRadio_delay(10);
RF_EXT_PA_TO_IDLE();
if ((rfRxCallBack )agr1_ptr)
{
rxCb = (rfRxCallBack )agr1_ptr;
}
rf_handle = 0xe5;
}
调用./radio/myRadio.c/myRadio_process(void)函数,该函数需要放在主函数中不断判断检测是否有中断触发(可以放在while循环中执行),然后根据中断标志来解析处理。状态处理可以直接在相应的位置处理,或者通过回调函数rxCb将结果返回上一层处理
REG_IRQ_RX_DONE:表示接收到无线数据包REG_IRQ_TX_DONE:表示无线数据包发送成功
void myRadio_process(void)
{
rfRxPacket_ts rfRxPacket;
if (rf_handle == 0)
{
return;
}
if (rf_ifq == false)
{
return;
}
rf_ifq = false;
if (!((rf_workProcess == RF_PRC_TX) || (rf_workProcess == RF_PRC_RX)))
{
return;
}
}
可以通过void myRadio_setBaudrate(uint32_t br)或者void myRadio_setRfParams(uint8_t sf, uint8_t bw, uint8_t cr)来设置。
void myRadio_setBaudrate(uint32_t br):通过数组选择定义好的几组扩频因子、带宽、码率的组合即可void myRadio_setRfParams(uint8_t sf, uint8_t bw, uint8_t cr):通过参数设置具体的扩频因子、带宽、码率1、本工程驱动软件只提供做演示项目使用,未经过大批量项目验证,客户需谨慎使用,如果使用在正式项目中引发的所有问题,本司概不负责。使用过程若发现任何问题,可及时与本司相关人员联系。 2、本工程所有文件可以用于商业性项目移植,无需向本司申请。