一线通协议解析

news/2024/11/15 3:55:14/

简单列举一下电动车的一线通协议解析代码,自己记录用

/*** @brief : 一线通初始化内部函数** @return vd_bool_t*/
vd_bool_t isdn_inside_init(void) {drv_gpio_t drv_gpio;drv_gpio.pin  = PLATFORM_ISDN_PIN;drv_gpio.mode = DRV_GPIO_MODE_INPUT;drv_gpio.pull = DRV_GPIO_NOPULL;drv_gpio_init(&drv_gpio);drv_gpio_requst_irq(drv_gpio.pin, DRV_GPIO_MODE_EXTI_IT_RISING, isdn_pin_isr);printf("isdn_init_successful\r");return vd_true;
}
/*** @brief : 一线通中断处理函数** @param pin:中断引脚* @param value:引脚电平* @return vd_void_t*/
static vd_void_t isdn_pin_isr(vd_uint8_t pin, vd_uint8_t value) {if (value == 1) {t1_time = drv_systick_get();                                          //触发高电平时刻drv_gpio_irq_mode(PLATFORM_ISDN_PIN, DRV_GPIO_MODE_EXTI_IT_FALLING);  //高电平配置下降沿触发if ((t1_time - t2_time >= 10000) && start_signal == 0) {start_signal = 2;  //起始信号} else if (t2_time != 0 && start_signal == 1) {low_time = t1_time - t2_time;  //低电平持续时间}} else {t2_time = drv_systick_get();                                         //触发低电平时刻drv_gpio_irq_mode(PLATFORM_ISDN_PIN, DRV_GPIO_MODE_EXTI_IT_RISING);  //低电平配置上升沿触发if (t1_time != 0 && start_signal == 1) {high_time = t2_time - t1_time;  //高电平持续时间} else if (t1_time != 0 && start_signal == 2) {start_signal = 1;          //开始接收数据high_time = low_time = 0;  //高低电平持续时间清空}}if (high_time != NULL && low_time != NULL && start_signal == 1) {high_or_low = (low_time > high_time) ? LOW : HIGH;  //高低电平时间比例drv_isdn_interaction(high_or_low);                  //字节组合函数high_time = low_time = 0;                           //时间清空}}
}/*** @brief : 字节组合函数** @param bit_value: 传入的位数* @return vd_bool_t*/
static vd_bool_t drv_isdn_interaction(vd_uint8_t bit_value) {vd_uint8_t byte_bit;byte_bit = bit_value;// isdn_sum[bit_num] = bit_value; //存入bitbyte |= byte_bit << (7 - bit_num);bit_num++;if (bit_num == 8) {bit_num = 0;  //位数清零log_debug("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r");log_debug("receive byte : %d\n",byte);isdn_sum[byte_num] = byte;                      //存入字节byte = 0;                                       //字节清零byte_num++;                                     //字节数+1if (byte_num /12 == 1) {start_signal = 0;  //起始信号清除protocol_push_queue(PLATFORM_ISDN0, isdn_sum, 12);  //往队列里面丢数据memset(&isdn_sum,0,12);byte_num     = 0;}}return vd_true;
}

http://www.ppmy.cn/news/477153.html

相关文章

机械设备行业专题:摩托车专题-大排量和电动化新兴赛道正在崛起

本期内容提要:  本周专题&#xff1a;摩托车种类较多&#xff0c;燃油车目前仍是主流&#xff0c;仍以小排量为主。 2020 年我国摩托车总销量中占比最大的是 50-150ml 排量的摩托车&#xff0c;占 比达到 71%&#xff0c;其次是 150-250ml 的占比 8%&#xff0c;250ml 以上…

创建型模式应用实验

创建型模式应用实验 创建型模式&#xff08;Creational Pattern&#xff09;的主要特点是将对象的创建与使用分离&#xff0c;根据对象的创建与组合方式的不同&#xff0c;创建型模式可分为单例&#xff08;Singleton&#xff09;模式、原型&#xff08;Prototype&#xff09;…

72V转12V转5V 1A2A3A电瓶车72V降压方案_AH8619

AH8619是一款高性准谐振 Buck 控制器可提供高精度恒压和恒流输出性能&#xff0c;186V-4884V-3702V适用于所有小功率 DC-DC 降压的应用中&#xff0c;100V降压电源芯片 电瓶72V降压Dc-DC [36V-85V 宽电压降压】输出电压可调 频率130KHz 超高的输入电压范围&#xff0c;3A的大电…

第十章 os.path模块

1. os.path模块介绍 os 模块是Python 内置的与操作系统功能和文件系统相关的模块。该模块的子模块os.path 是专门用于进行路径操作的模块。常用的路径操作主要有判断目录是否存在、创建目录、删除目录和遍历目录等。 说明:在使用os.path 模块时&#xff0c;推荐使用字符串&…

LeetCode27——移除元素

题目来源 https://leetcode.cn/problems/remove-element 题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输…

构建高可用、高并发和高性能的微服务系统(Spring Cloud实现)

目前Java都在流行一个说词&#xff1a;高并发。 反正不管是不是&#xff0c;反正就是高并发。 谈高并发&#xff0c;我们需要知道几个名词&#xff1a; -响应时间(Response Time&#xff0c;RT)-吞吐量(Throughput)-每秒查询率QPS(Query Per Second)-每秒事务处理量TPS(Transa…

力扣算法刷题Day35|贪心:柠檬水找零 根据身高重建队列 用最少数量的箭引爆气球

力扣题目&#xff1a;#860.柠檬水找零 刷题时长&#xff1a;30min 解题方法&#xff1a;分类讨论模拟 复杂度分析 时间空间 问题总结 找零关键要看手里的钞票面值&#xff0c;并不是总和够了即能找零15元找零可以用105 或者555 本题收获 分类模拟 情况一&#xff1a;账…

小白到运维工程师自学之路 第三十九集 (HAproxy 负载均衡)

一、概述 HAProxy是一款高性能的负载均衡软件&#xff0c;可以将来自客户端的请求分发到多个服务器上&#xff0c;以提高系统的可用性和性能。HAProxy支持多种负载均衡算法&#xff0c;包括轮询、加权轮询、最少连接数等。同时&#xff0c;HAProxy还支持会话保持、健康检查、SS…