【单片机】SI4432 Based Networking 2

2024-04-20 21:48

本文主要是介绍【单片机】SI4432 Based Networking 2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

编写一个简单地碰撞检测示例程序:

void RF_SendProcedure_CSMA_CA(void)
{static const u8 random_withdraw_time_table[] = {5,22,19,14,12,20,9,10,6,11,7,13,8,23,25,17,16,21,24,18};static u8 random_withdraw_time_select = 0;SI4432_SwitchState(SI4432_STATE_RX);int timeout = 500;printf("%d\r\n",SI4432_RSSI());while(CCA == CCA_FAILED){
//		printf("%d ",SI4432_RSSI());LED = ~LED;delay_ms(random_withdraw_time_table[random_withdraw_time_select]);timeout -= random_withdraw_time_table[random_withdraw_time_select];if(timeout < 0)break;random_withdraw_time_select++;if(random_withdraw_time_select == sizeof(random_withdraw_time_table) / sizeof(random_withdraw_time_table[0]))random_withdraw_time_select = 0;}LED = 1;if(timeout < 0){printf("CCA timeout\r\n");}else{SI4432_TxState(SI4432_STATE_IDLE_READY);}
}

程序中直接判断CCA引脚的状态,如果为1表示信道忙,则进行随机退避,随机数使用的简单的随机数表,网页工具:http://www.99cankao.com/numbers/random-number-generator.php:

主程序收到串口发来的 ‘a’ 字符的时候发送一次数据。

	while(1){if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) == SET)USART_ClearFlag(USART1,USART_FLAG_ORE);if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE) == SET){uart_data = USART_ReceiveData(USART1);if(uart_data == 'a'){printf("Send:%d\t",++sent);
//				SI4432_TxState(SI4432_STATE_IDLE_READY);RF_SendProcedure_CSMA_CA();SI4432_SwitchState(SI4432_STATE_RX);}else{sent = 0;got = 0;}}if(SI4432_Flags & SI4432_FLAGS_NEW_PACKAGE){SI4432_Flags &= ~SI4432_FLAGS_NEW_PACKAGE;printf("Got:%d\r\n",++got);SI4432_FETCH_DATA();}
//		delay_ms(100);}

在后再来一个 “搅屎棍” :

这个 “搅屎棍” 设备没什么其它任务,高速循环发送数据即可,注意修改发送头码,不要和那两个节点的接收头码相同:

	while(1){printf("a");SI4432_TX_MODE();delay_ms(10);}

“搅屎棍” 启动之前,两个节点的互相通讯是没有问题的,而且发送的时候RSSI的值都是正常值(信道通畅):

启动 “搅屎棍” 之后,的确有冲突现象发生(LED闪烁表示冲突退避),而且冲突退避算法有效果,收发都没有丢包:


有奇怪的偶然发生的现象发生,随机断开两个节点或者 “搅屎棍” 会发生两个节点发送不出去数据,信道一直处于忙碌状态,或者是一个节点1可以发送出去数据,节点2收不到数据(几乎收不到,发送500个收到6个),但是节点2发送数据节点1是能收到的,拔掉 “搅屎棍” 的电源,一切恢复正常。奇怪。还有件奇怪的事情,发送数据的时候我的耳机里面偶然会有非常微弱呲呲的声音(合适的角度认真听才听到),耳机的音圈尽然收到了433Mhz的信号了?还是电脑里面的某些器件收到信号了?

虽然有一个简单的冲突检测功能,但是还是需要应答的功能,设计一个简单的数据交互方式:

struct transaction
{struct transaction *next;int tid;    int flag;int status;u8 *tx_buff;u8 *rx_buff;
};

每一个传输都以 transaction(事务) 为最小单位:

还有不少没考虑到的细节,可以继续优化,具体的软件程序就不在这更新了。

这篇关于【单片机】SI4432 Based Networking 2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/921400

相关文章

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

基于stm32的河流检测系统-单片机毕业设计

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机设计精品

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口

MCU5.51单片机的最小系统

1.最小系统的组成部分 晶振电路(时钟),复位电路,电源电路(控制电压,保持稳定),下载电路(外加的,用于烧录程序) 烧录: 通过下载电路,把程序下载到单片机中用于运行 2.晶振电路 电路图: 是晶振 是电容 为了防止晶振起振时产生影响,因此加电容 3.复位电路 电路图: 按按钮RSTK1(保持一段时间的高电平)即可实现STC芯片的复位 4.电源电路 电路图:

单片机XTAL引脚引出的晶振分析

51单片机的18,19脚XTAL1,XTAL2用来提供外部振荡源给片内的时钟电路。 XTAL1和XTAL2引脚,该单片机可以使用外部时钟也可以使用内部时钟。 当使用内部时钟时,此二引线端用于外接石英晶体和微调电容; 当使用外部时钟时,用于接外部时钟信号,NMOS接XTAL2,CMOS接XTAL1。 原理: XTAL1和XTAL2分别是一个反相器的输入和输出。NMOS的反相器是

MACS bdgdiff: Differential peak detection based on paired four bedGraph files.

参考原文地址:[http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html](http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html) 文章目录 一、MACS bdgdiff 简介DESCRIPTION 二、用法

Neighborhood Homophily-based Graph Convolutional Network

#paper/ccfB 推荐指数: #paper/⭐ #pp/图结构学习 流程 重定义同配性指标: N H i k = ∣ N ( i , k , c m a x ) ∣ ∣ N ( i , k ) ∣ with c m a x = arg ⁡ max ⁡ c ∈ [ 1 , C ] ∣ N ( i , k , c ) ∣ NH_i^k=\frac{|\mathcal{N}(i,k,c_{