1 Star 0 Fork 4

操作系统 / 433

forked from veneno / 433 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
433_send.c 6.69 KB
一键复制 编辑 原始数据 按行查看 历史
veneno 提交于 2020-03-02 13:57 . 初版
#include "433_send.h"
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
//#include "delay.h"
//#include "gpio.h"
/**
* 程序名称: 433信号发送
* 433发送过程:1.电平时间设置 Witty433_Init(unsigned int set_level_buf[8]) -->
* 2.发送内容和次数设置 SendInput_433(unsigned char *data,unsigned int dataBitNum,unsigned char sendNum) -->
* 3.发送 StartSend_433()
* 433自定义内容: 芯片类型、管脚操作、延时函数delay_us_433、delay_ms_433及芯片ID随芯片/操作系统不同由用户定义。
* 433的各个电平时间,433的地址码,433的控制码,433的发送次数由用户自定义。
*/
/* 选择芯片类型(用户自定义) */
#define STM32FL151
/* 433发射管脚操作函数(用户自定义) */
#define Pin_433_H HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8,GPIO_PIN_SET)
#define Pin_433_L HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8,GPIO_PIN_RESET)
/* 433延时函数 */
static void (*delay_us_433)(unsigned int us);
static void (*delay_ms_433)(unsigned short ms);
static void delay_long_us(unsigned int long_us);
/* 433地址码默认设置*/
static unsigned int GetAddrFromChipID(unsigned char *addr);
static Witty433 witty433;
static unsigned char addr[3];
static unsigned int addr_len = 24;
void delay_long_us(unsigned int long_us)
{
unsigned short ms = long_us/1000;
unsigned int us = long_us%1000;
if(ms)delay_ms_433(ms);
if(us)delay_us_433(us);
}
unsigned int GetAddrFromChipID(unsigned char *addr)
{
#ifdef STM32F10X
addr[0]=*(unsigned char*)(0x1ffff7ed); //芯片ID第5、6、7位作为addr
addr[1]=*(unsigned char*)(0x1ffff7ee);
addr[2]=*(unsigned char*)(0x1ffff7ef);
#elif defined STM32FL151
addr[0]=*(unsigned char*)(0x1ff80055);
addr[1]=*(unsigned char*)(0x1ff80056);
addr[2]=*(unsigned char*)(0x1ff80057);
#elif defined ESP32 //esp32用户自定义选择--默认随机数
addr[0]=srand()%255;
addr[1]=srand()%255;
addr[2]=srand()%255;
#else
addr[0]=srand()%255; //未选择芯片类型则随机指定地址
addr[1]=srand()%255;
addr[2]=srand()%255;
#endif
return 3*8; //地址码位数
}
/**********************************电平时间参数设置初始化(自定义部分)************************************/
void Witty433_Init(unsigned int set_level_buf[8]) //这个set_level_buf[8]数组保存的是各个电平时间,单位是us
{
SetStartLevelTime_433(set_level_buf[0],set_level_buf[1]); //设置起始码 高 低 电平时间
SetOneLevelTime_433(set_level_buf[2],set_level_buf[3]); //设置bit1 高 低 电平时间
SetZeroLevelTime_433(set_level_buf[4],set_level_buf[5]); //设置bit0 高 低 电平时间
SetEndLevelTime_433(set_level_buf[6],set_level_buf[7]); //设置结束码 高 低 电平时间
addr_len = GetAddrFromChipID(addr); //默认选择芯片ID的24Bit作为433地址码,用户可自行更改
SetAddr_433(addr,addr_len);
delay_us_433 = delay_us; //设置433微秒延时函数(自定义部分)
delay_ms_433 = delay_ms; //设置433毫秒延时函数(自定义部分)
witty433.delay_433 = delay_long_us;
}
/************************************* 433电平时间参数设置函数 ****************************************/
/* 设置起始码电平时间 */
void SetStartLevelTime_433(unsigned int time_H,unsigned int time_L)
{
witty433.StartLevelTime_H = time_H;
witty433.StartLevelTime_L = time_L;
}
/* 设置结束码电平时间 */
void SetEndLevelTime_433(unsigned int time_H,unsigned int time_L)
{
witty433.EndLevelTime_H = time_H;
witty433.EndLevelTime_L = time_L;
}
/* 设置bit0电平时间 */
void SetZeroLevelTime_433(unsigned int time_H,unsigned int time_L)
{
witty433.ZeroLevelTime_H = time_H;
witty433.ZeroLevelTime_L = time_L;
}
/* 设置bit1电平时间 */
void SetOneLevelTime_433(unsigned int time_H,unsigned int time_L)
{
witty433.OneLevelTime_H = time_H;
witty433.OneLevelTime_L = time_L;
}
/******************************* 433发送参数设置函数 ****************************************/
/* 设置地址码 */
void SetAddr_433(unsigned char *addr,unsigned int addrBitNum)
{
witty433.Addr = addr;
witty433.AddrBitNum = addrBitNum;
}
/* 设置数据域 */
void SetSendData_433(unsigned char *sendData,unsigned int sendDataBitNum)
{
witty433.SendData = sendData;
witty433.SendDataBitNum = sendDataBitNum;
}
/* 设置连续发送次数 */
void SetSendNumber_433(unsigned char sendNumber)
{
witty433.SendNumber = sendNumber;
}
/******************************* 发送初始化函数 ****************************************/
/* 传入发送参数内容--数据域及发送次数 */
void SendInput_433(unsigned char *data,unsigned int dataBitNum,unsigned char sendNum)
{
SetSendNumber_433(sendNum); //设置sendNum连续发送次数,不同厂商的可能不一样,需要注意
SetSendData_433(data,dataBitNum); //data数组是具体的控制数据,dataBitNum是数据的位数
}
/*******************************发送一次433信号***************************************/
void StartSend_433() //先传入发送参数,再发送
{
int i = 0;
for(i = 0; i < witty433.SendNumber; i++)
{
SendStart_433();
SendAddr();
SendData();
}
SendEnd_433();
}
/************************************************************************************/
/* 发送起始码 */
void SendStart_433()
{
Pin_433_H;
witty433.delay_433(witty433.StartLevelTime_H);
Pin_433_L;
witty433.delay_433(witty433.StartLevelTime_L);
}
/* 发送地址码 */
void SendAddr()
{
unsigned char byteNum = witty433.AddrBitNum/8;
unsigned char bitNum = witty433.AddrBitNum%8;
unsigned char i = 0;
for(i = 0; i < byteNum; i++)
{
SendBit_433(witty433.Addr[i],8);
}
SendBit_433(witty433.Addr[i],bitNum);
}
/* 发送数据域 */
void SendData()
{
unsigned char byteNum = witty433.SendDataBitNum/8;
unsigned char bitNum = witty433.SendDataBitNum%8;
unsigned char i = 0;
for(i = 0; i < byteNum; i++)
{
SendBit_433(witty433.SendData[i],8);
}
SendBit_433(witty433.SendData[i],bitNum);
}
/* 发送结束码 */
void SendEnd_433()
{
Pin_433_H;
witty433.delay_433(witty433.EndLevelTime_H);
Pin_433_L;
witty433.delay_433(witty433.EndLevelTime_L);
}
/* 发送bit0 */
void SendBit0_433()
{
Pin_433_H;
witty433.delay_433(witty433.ZeroLevelTime_H);
Pin_433_L;
witty433.delay_433(witty433.ZeroLevelTime_L);
}
/* 发送bit1 */
void SendBit1_433()
{
Pin_433_H;
witty433.delay_433(witty433.OneLevelTime_H);
Pin_433_L;
witty433.delay_433(witty433.OneLevelTime_L);
}
/* 发送16进制数据--1Byte */
void SendHex_433(unsigned char byte)
{
SendBit_433(byte,8);
}
/* 发送bit数据--待发送数据及待发送数据bit数0~8 */
void SendBit_433(unsigned char byte,unsigned char bitNum)
{
unsigned short data = (0x01<<bitNum)>>1; //
unsigned char i = 0;
for(i = 0;i < bitNum;i++)
{
if(byte & data)
{
SendBit1_433();
}
else
{
SendBit0_433();
}
data=data>>1;
}
}
C
1
https://gitee.com/QUIC/deal433.git
git@gitee.com:QUIC/deal433.git
QUIC
deal433
433
master

搜索帮助