# 斥候无线模块-STM32开发例程包
这是使用STM32连接斥候模块进行无线组网通信的演示程序。
斥候(Chhol)模块的命令串口使用**CC9D协议**,外接的STM32微控制器需要实现此协议,
将带有地址信息的数据告知斥候模块,即可完成组网通信。
## 程序集说明
|路径|说明|
| -----------------| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|BSP|BSP,即板级支持包(Board Support Package),包含了和电路板与硬件相关的程序。具体来说,有Uart、LED、调试串口(用与printf输出程序)、和系统定时器。|
|Chhol|斥候无线模块相关的程序,这部分程序和硬件无关。<br />其中CC9D协议支持用于理解和构造与斥候模块通信的数据包;<br />Crc8用于完成CC9D中需要的循环冗余校验;<br />byte_queue是串口缓冲队列,用于暂存串口收发需要的数据。|
|Libraries|由`STMicroelectronics`提供的库函数。|
|chhol_base_demo|基础通信的例程,可以完成简单的数据收发。|
|chhol_adc_report|ADC采集上报例程,可以采集ADC值,定制上报,在ADC值大幅变化后也会上报。|
## chhol_base_demo介绍
这一演示程序使用常见的STM32开发板搭建,微控制器使用uart连接到斥候模块,和另一个斥候模块进行通信。
在这一演示中
### 硬件接线
![第一个demo的实物情况](assets/第一个demo的实物情况-20240802065355-8a332qy.png)
其接线包括:
|GPIO编号|外部连接到|MCU内的功能|
| ----------| ----------------------------------------------------| -----------------------------------------------------|
|A5|红色LED|GPIO,控制红色LED的开关|
|A6|黄色LED|GPIO,控制黄色LED的开关|
|A7|绿色LED|GPIO,控制绿色LED的开关|
|C13|蓝色LED|GPIO,控制蓝色LED的开关|
|A2|斥候模块命令串口RX|USART2_TX,串口发送引脚|
|A3|斥候模块命令串口TX|USART2_RX,串口接收引脚|
|A9|USB转Uart的Rx|USART1_TX,串口发送引脚,用于printf|
|A10|USB转Uart<span data-type="text" style="color: var(--b3-font-color8);">(未连接)</span>|USART1_RX,串口接收引脚,用于接收指令,现在未连接。|
### 软件介绍
整个系统的软件构成如下图:
![image](assets/image-20240803061626-5qgwyo5.png)
### 接收无线包并处理
收到任何包后,CC9D会调用`sCc9dPkg* _cc9d_receivePkg(sCc9dPkg* pkg, uint8 data_len)`在这个函数中,应当根据收到包的信息,选择接收的处理程序:
```c
sCc9dPkg* _cc9d_receivePkg(sCc9dPkg* pkg, uint8 data_len) {
switch (pkg->to_port) {
case 16://将16号端口分配给LED,因此,从此处收到的数据需要发给
ledControl(pkg, data_len);
break;
default://应该避免给模块发送目的端口号没有使用的包。
printf("Reserved port %d get a pkg, from %X.%d\n\tdatas: ", pkg->to_port, pkg->remote_addr, pkg->from_port);
for(int i=0;i<data_len;i++){
printf("%02x ", pkg->datas[i]);
}
printf("\n");
break;
}
//返回pkg,意味着在退出此函数后CC9D继续使用pkg接收下一个包。
//如果程序中还要继续使用pkg中的数据,则必须准备一个未用的包指针,以供CC9D接收数据。
return pkg;
}
```
### 无线发出包
可以在任何程序序列中进行发送包,发送时需要进行以下操作:
1. 准备发送包结构体。
2. 填入地址和端口信息。
3. 填入数据。
4. 使用`void cc9d_SendPkg(sCc9dPkg pkg_mem_type* pkg, uint8 data_len)`进行发送,并以参数提供之前构建的结构体和需要发送的数据的长度。
发送的程序看起来是这样的:
```c
sCc9dPkg send_pkg;//发送包的数据体
send_pkg.from_port = 32;//源端口号
send_pkg.to_port = 32;//目的端口号
send_pkg.remote_addr = 0x0000;//目的地址
send_pkg.datas[0] = (sno >> 0) & 0xff;
send_pkg.datas[1] = (sno >> 8) & 0xff;
send_pkg.datas[2] = 0x56;
send_pkg.datas[3] = 0x78;
cc9d_SendPkg(&send_pkg,4);//调用这个函数,进行发送,第二个参数是数据部分的长度,单位是byte。
```
`cc9d_SendPkg`函数不会占用`send_pkg`空间,在`cc9d_SendPkg`返回后就可以释放`send_pkg`占用的空间。
另外需要注意,`cc9d_SendPkg`不是线程安全的,如果在中断线程和主线程内都会调用`cc9d_SendPkg`,就需要在调用前后添加临界区。
### 关于队列
在此程序中,广泛用到了循环队列。队列可以先接收多个字节并保存,过后在需要数据时,按顺序将数据取出。
在Uart接收数据时,在Uart的中断线程内,将数据存入队列,而后主线程中合适的位置,将数据取出并使用;
在Uart发送数据时,可以在主线程中连续的将大量字节写入队列,并开启发送中断;在中断线程中,每当一个字节发送回完成,就从队列中取出下一个字节发送,直到发送完成。
在 Uart2的接收和发送事物,以及printf的发送事务中,用到了队列。
需要注意,如果一次发送了过多数据,或者长时间没有从接收队列中取出数据,造成队列中储存超过其容量的数据,就会造成数据丢失。
可以在程序中设置队列的容量,其容量必须是2的整数幂。
```c
//串口收发缓冲区
static uint8 tx_buf[256];
static sByteQueue tx_queue;
static uint8 rx_buf[256];
static sByteQueue rx_queue;
//串口缓冲区初始化
static void initQueue(void) {
//初始化这两个队列
ByteQueue_init(&tx_queue, tx_buf, 256);
ByteQueue_init(&rx_queue, rx_buf, 256);
}
```
```c
static uint8 tx_buf[256];
static sByteQueue u1tx_queue;
static void initQueue(void) {
//初始化这两个队列
ByteQueue_init(&u1tx_queue, tx_buf, 256);
}
```
在程序中,队列的长度都被设置为256字节,实际可以存放255字节数据。
### 演示现象
将0002节点连接到STM32,0000连接到电脑,可以看到STM32每个2秒发送一个包。![image](assets/image-20240803070516-6wcyp17.png)
发送命令到0002.16,可以控制LED点亮:
|命令|效果|
| -----------| -------------|
|0002.16:1|红色LED点亮|
|0002.16:2|黄色LED点亮|
|0002.16:3|绿色LED点亮|
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
stm32 ************** 斥候无线模块-STM32开发例程包 这是使用STM32连接斥候模块进行无线组网通信的演示程序。 斥候(Chhol)模块的命令串口使用CC9D协议,外接的STM32微控制器需要实现此协议, 将带有地址信息的数据告知斥候模块,即可完成组网通信。 程序集说明 路径 说明 BSP BSP,即板级支持包(Board Support Package),包含了和电路板与硬件相关的程序。具体来说,有Uart、LED、调试串口(用与printf输出程序)、和系统定时器。 Chhol 斥候无线模块相关的程序,这部分程序和硬件无关。 其中CC9D协议支持用于理解和构造与斥候模块通信的数据包; Crc8用于完成CC9D中需要的循环冗余校验; byte_queue是串口缓冲队列,用于暂存串口收发需要的数据。 Libraries 由STMicroelectronics提供的库函数。 chhol_base_demo 基础通信的例程,可以完成简单的数据收发。 chhol_adc_report ADC采集上报例程,可以采集ADC值,定制上报,在ADC值大幅变化后也会上报。
资源推荐
资源详情
资源评论
收起资源包目录
使用STM32微控制器,与斥候无线模块通信的例程(源码+文档) (122个子文件)
stm32f10x_tim.c 104KB
stm32f10x_flash.c 59KB
stm32f10x_rcc.c 49KB
stm32f10x_adc.c 45KB
stm32f10x_i2c.c 43KB
stm32f10x_can.c 43KB
stm32f10x_usart.c 36KB
system_stm32f10x.c 35KB
stm32f10x_fsmc.c 34KB
stm32f10x_spi.c 29KB
stm32f10x_dma.c 28KB
stm32f10x_sdio.c 27KB
stm32f10x_gpio.c 22KB
stm32f10x_dac.c 18KB
core_cm3.c 16KB
stm32f10x_cec.c 11KB
stm32f10x_pwr.c 8KB
stm32f10x_rtc.c 8KB
stm32f10x_bkp.c 8KB
main.c 7KB
misc.c 7KB
stm32f10x_exti.c 7KB
stm32f10x_wwdg.c 5KB
main.c 5KB
stm32f10x_dbgmcu.c 5KB
stm32f10x_iwdg.c 5KB
stm32f10x_it.c 3KB
stm32f10x_it.c 3KB
uart2.c 3KB
stm32f10x_crc.c 3KB
print.c 3KB
cc9d.c 3KB
crc8.c 1KB
adc.c 1KB
systick.c 1KB
led.c 584B
byte_queue.c 584B
.gitignore 272B
stm32f10x.h 611KB
core_cm3.h 82KB
stm32f10x_tim.h 50KB
stm32f10x_rcc.h 29KB
stm32f10x_i2c.h 29KB
stm32f10x_can.h 26KB
stm32f10x_fsmc.h 26KB
stm32f10x_flash.h 24KB
stm32f10x_sdio.h 21KB
stm32f10x_adc.h 21KB
stm32f10x_dma.h 20KB
stm32f10x_gpio.h 19KB
stm32f10x_spi.h 17KB
stm32f10x_usart.h 16KB
stm32f10x_dac.h 15KB
misc.h 9KB
stm32f10x_bkp.h 7KB
stm32f10x_exti.h 6KB
stm32f10x_cec.h 6KB
stm32f10x_pwr.h 4KB
stm32f10x_rtc.h 4KB
stm32f10x_dbgmcu.h 4KB
stm32f10x_iwdg.h 4KB
stm32f10x_conf.h 3KB
stm32f10x_conf.h 3KB
stm32f10x_conf.h 3KB
stm32f10x_wwdg.h 3KB
stm32f10x_crc.h 2KB
system_stm32f10x.h 2KB
cc9d.h 1KB
usrbool.h 525B
led.h 511B
typedef.h 414B
byte_queue.h 376B
crc8.h 267B
adc.h 103B
uart2.h 100B
systick.h 87B
print.h 77B
LICENSE 1KB
readme.md 6KB
readme.md 5KB
readme.md 3KB
第一个demo的实物情况-20240802065355-8a332qy.png 8.51MB
image-20240803070516-6wcyp17.png 296KB
image-20240803061626-5qgwyo5.png 152KB
image-20240802041313-jdea2w4.png 32KB
cc9d.py 8KB
draw.py 3KB
chhol.py 1KB
startup_stm32f10x_xl.s 16KB
startup_stm32f10x_cl.s 16KB
startup_stm32f10x_hd.s 15KB
startup_stm32f10x_xl.s 15KB
startup_stm32f10x_cl.s 15KB
startup_stm32f10x_hd_vl.s 15KB
startup_stm32f10x_hd_vl.s 15KB
startup_stm32f10x_hd.s 15KB
startup_stm32f10x_md_vl.s 13KB
startup_stm32f10x_ld_vl.s 13KB
startup_stm32f10x_md_vl.s 13KB
startup_stm32f10x_xl.s 12KB
共 122 条
- 1
- 2
资源评论
LeonDL168
- 粉丝: 2913
- 资源: 778
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 毕设和企业适用springboot智慧城市数据分析平台类及在线学习平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市数据分析平台类及智能客服系统源码+论文+视频.zip
- 毕设和企业适用springboot智慧交通平台类及城市智能管理系统源码+论文+视频.zip
- 毕设和企业适用springboot智慧交通平台类及公寓管理系统源码+论文+视频.zip
- 毕设和企业适用springboot智慧交通平台类及电商产品推荐平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧交通平台类及电子产品维修平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧交通平台类及机器人控制平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧交通平台类及旅游规划平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧交通平台类及健身管理平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧交通平台类及平台生态系统源码+论文+视频.zip
- 毕设和企业适用springboot智慧交通平台类及气象数据管理系统源码+论文+视频.zip
- 毕设和企业适用springboot智慧交通平台类及区块链平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧交通平台类及人力资源管理平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧交通平台类及视频直播系统源码+论文+视频.zip
- 毕设和企业适用springboot智慧交通平台类及食品配送平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧交通平台类及数字营销平台源码+论文+视频.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功