关于烈火四轴遥控器串口上传分析

发布者:MysticalEssence最新更新时间:2019-08-28 来源: eefocus关键字:烈火  四轴遥控器  串口 手机看文章 扫描二维码
随时随地手机看文章

已发送遥控器供电电压为例 函数Print_BSP_VOLTAGE中data前5位为帧头,最后一位校验。


void Print_BSP_VOLTAGE(void)

{

    uint8_tdata[13];

    uint8_t count;

    data[0] = '$';

    data[1] = 'M';

    data[2] = '>';//

    data[3] = 7;  //校验用数据长度

    data[4] = MSP_ANALOG;

    data[5] =  (uint8_t)(Battery_Fly/10.0f)& 0xFF;

    data[6] =  0;

    data[7] =  0;

    data[8] =  0;

    data[9]  = 0;

    data[10] = 0;

    data[11] = 0;

    data[12] = Get_Checksum(data);

    for(count=0;count<13;count++)

    {

        PrintHexU8(data[count]);

    }

}


    XOR校验函数,可参考:http://linux.programdevelop.com/1233350/    以及   http://heyunhuan513.blog.163.com/blog/static/160204220073268595690/



uint8_t Get_Checksum(uint8_t mydata[])

    uint8_t i;

    uint8_t checksum=0;

    uint8_t length = mydata[3];

    for(i=0;i


    数据发送函数



void PrintHexU8(uint8_t data)

{

    TxBuff[Count++] = data;  

    if(!(USART1->CR1 & USART_CR1_TXEIE))    //判断发送中断由上次发送结束后关闭

    USART_ITConfig(USART1, USART_IT_TXE, ENABLE); //重新打开发送中断,在USART发送中断里写入发送数据

}


    准备工作已完成,进入发送中断



void USART1_IRQHandler(void)

{

 

    if(USART1->SR & USART_SR_TC && (USART1->CR1 & USART_CR1_TXEIE) )//为使SR_TC置位,已保证第一个字节能发    送,在串口初始化后添加USART_ClearFlag(USART1, USART_FLAG_TC);

    {

        USART1->DR = TxBuff[TxCount++];//写入DR发送缓存,自动清除SR_TC中断标志

        if(TxCount == Count)

        {

            USART1->CR1 &= ~USART_CR1_TXEIE;//发送完成后关闭发送中断

        }

    }

}


关键字:烈火  四轴遥控器  串口 引用地址:关于烈火四轴遥控器串口上传分析

上一篇:STM32 HAL库 串口DMA发送完成中断
下一篇:STM32使用HAL库驱动USART详解及例程

推荐阅读最新更新时间:2024-11-13 10:51

基于51串口通讯编程软件架构剖析
前言: 串口通讯对于所有的 嵌入式 工程师十分常见,对于一个与外界交互的系统必须依赖一些手段,比如串口、USB、红外、GPRS之类的数据通讯传输方式。而串口作为一种廉价的短距离可靠的通讯方式得到了广泛应用。 废话少说了,就此打住,进入正题。 本文主要从软件结构上讲解如何在资源比较缺乏的系统上实现通讯协议的串口通讯编程,以及如何优化程序效率,从而使系统更快、更稳定运行。 正文: 我们以51 单片机 为例。51中一般针对串口通讯编程,通常采取中断接受查询发送的方式。中断函数在接受数据到达时被重复调用,其实是个重复入栈的过程,所以不宜将函数写的太长,函数太长一般会导致栈太深占用系统资源,二是处理时间过长,可能导致通讯出错。为了防止
[单片机]
8051单片机串口波特率计算方式
STC12C5A60S2单片机兼容80C51单片机,其串口波特率可以由定时器产生,也可以由独立波特率发生器产生。其波特率模式可以是固定的,也可以是可变的。 固定波特率:当 模式0的通信速度设置 位UART_M0x6/AUXR.5 = 0时,其波特率 = SYSclk/12 当 模式0的通信速度设置 位UART_M0x6/AUXR.5 = 1时,其波特率 = SYSclk/2 可变波特率:使用串行通信模式2,即可自定义串口通信波特率,其计算公式为:波特率 = 2^SMODE /64×( SYSclk 系统工作时钟频率) 当SMOD=1时,波特率=2/64( SYSclk) =1/32( SYSclk) ; 当SMOD
[单片机]
关于CubeMX的串口全双工接收发送锁死的问题
一,现象描述 在使用STM32 CubeMX生成的工程中用到了串口2,发送开启了DMA模式,接收使用中断,每次接收一个字节,在回调函数中调用HAL_UART_Receive_IT(&huart2,(u8 *)&rx_data_2,1)接收开启函数。刚开始工作还算正常,但运行一段时间后(时间长度随机),调试窗口上串口数据不再更新,使用示波器检查引脚仍有数据接收到,STM32整体运行正常。初步判断,串口2发生异常错误。 二,问题分析 1,初始化配置检查 好像没有什么问题 2,代码检查 MX自动生成的初始化代码就不贴了。 main函数中开启接收: void main(void) { ... if(HAL_UA
[单片机]
STM8L101F3P6串口查询接收
/******************************Copyright (c)***********************************/ /* */ /* 老李电子工作 */ /* */ /*------------------------------File Info-------------------------------------*/ /* File name: main.c
[单片机]
中断和串口剖析
以前对STC89C52单片机的串口中断始终没有深入的了解 今天没什么事,就好好的琢磨了一下,前提是单片机开启了串口中断 1、先说串口接收数据中断吧:当单片机串口接收到数据后,产生中断,单片机跳到中断程序中,可以选择接收数据或者进行其他的操作,此时的串口数据可以作为控制信号,也可以仅仅是一个触发动作,具体的操作根据中断函数实现具体的功能。在中断函数最后,需要将串口接收标志位RI清0。 2、发送中断:当单片机向串口发送数据后,单片机产生串口发送中断,同理,所发送的数据仅仅是出发中断,中断函数的具体功能和所发的数据没有必然的关系,串口发送的作用是触发中断。同样,不要忘了在最后将 TI 清0. 总的来讲,在STC89C52中,串口
[单片机]
单片机控制串口通信
串口通信的内容比较重要,大家一定要掌握,工业上应用非常多,其中232总线、485总线以及以它们为基础建成的ModBus网络工业通信系统都需要用到串口,下面我来为大家一步步介绍串口通信的相关知识。 一、通信数据的发送方式简介 通信是机器与机器之间数据交换的桥梁,按数据发送方式分为串口通信和并口通信也可以叫串行通信和并行通信。 串行通信: 串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。 注意: 串口用于ASCII码字符的传输,通信使用3根线完成,分别是地线、发送、接收。 由于串口通信是异步的,端口能
[单片机]
labview实现串口通信(三)
在调试的过程中,我们经常会发现有收到的数据延迟的现象,现在提出几点解决的方法: (1)在循环中加入适量的延时,通过一个简单的例子看, 你会发现在cpu的占用率在加延时和不加的时候有很大的区别,当加的时候基本不占,而不加延时的时候达到100%。我在调试串口通信时候,发现while loop里加一个延时会有很好的效果(假如有一个或某几个线程占用了 100% 的 CPU,此时系统对其他线程就会反应迟钝。例如,程序的执行线程占用了100% 的 CPU,那么用户对界面的操作就会迟迟得不到响应,甚至于用户会误认为程序死锁了。所以在程序中要尽量避免出现 100% 占用 CPU 的情况。 目前大多数的计算机还是单核单个 CPU 的,因此要避
[测试测量]
STM8 74hc165并口输入转为串口输入子程序
软件设计 /********************************************************************* 目 的: 建立74hc165操作库 目标系统: 基于STM8单片机 应用软件: Cosmic CxSTM8 *********************************************************************/ #include stm8s207s8.h #define HC165_IN_RXD cbi(PD_ODR,6);cbi(PD_CR1,6);cbi(PD_CR2,6); //数据口 #define HC165_GET_
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved