<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[STM32使用串口IDLE中断的两种接收不定长数据的方式]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lsy0607</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lsy0607]]></copyright><item><title><![CDATA[STM32+串口空闲中断实现不定长数据接收]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/106121929</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/106121929</guid><author>lsy0607</author><pubDate>Thu, 14 May 2020 16:01:11 +0800</pubDate><description><![CDATA[常见的数据帧断帧方式有两种，一种是通过固定的协议格式断帧，另外一个是通过两帧数据的时间断帧，下面介绍最后一种，利用STM32F1的串口空闲中断实现不定长的数据断帧。笔者使用的标准官方库。
空闲中断是接受数据后出现一个字节的空闲状态，就会触发空闲中断。利用该特性区分两个不同数据帧。
1.初始化USART
​	按照官方的初始化流程配置，需要注意一点就是需要开启接收中断和空闲中断。

/**
  * @brief  USART初始化.
  * @param
	* @arg BaudRate 波特率
  * @re]]></description><category></category></item><item><title><![CDATA[STM32使用串口IDLE中断的两种接收不定长数据的方式]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/106121013</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/106121013</guid><author>lsy0607</author><pubDate>Thu, 14 May 2020 15:39:46 +0800</pubDate><description><![CDATA[本文转载：https://blog.youkuaiyun.com/qq_29413829/article/details/63262321
现在有很多数据处理都要用到不定长数据，而单片机串口的RXNE中断一次只能接收一个字节的数据，没有缓冲区，无法接收一帧多个数据，现提供两种利用串口IDLE空闲中断的方式接收一帧数据，方法如下:
方法1：实现思路：采用STM32F103的串口1，并配置成空闲中断IDLE模式且使能DMA接收，并同时设置接收缓冲区和初始化DMA。那么初始化完成之后，当外部给单片机发送数据的时候，假设这帧数]]></description><category></category></item><item><title><![CDATA[第六十七课：经典问题分析五-----狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/102485266</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/102485266</guid><author>lsy0607</author><pubDate>Fri, 11 Oct 2019 22:09:38 +0800</pubDate><description><![CDATA[一、编写程序判断一个变量是不是指针。
实例分析1：指针判断
#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

class Test
{
public:
    Test()
    {
    }
    virtual ~Test()
    {
    }
};

template
&lt;type...]]></description><category></category></item><item><title><![CDATA[第六十六课：C++中的类型识别-----狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/102484139</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/102484139</guid><author>lsy0607</author><pubDate>Thu, 10 Oct 2019 16:32:41 +0800</pubDate><description><![CDATA[问题：C++中如何得到动态类型？？
解决方案：----利用多态

在基类中定义虚函数返回具体的类型信息
所有的派生类都必须实现类型相关的虚函数
每个类中的类型虚函数都需要不同的实现

实例分析1：动态类型识别
#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

class Base
{
public:
 ...]]></description><category></category></item><item><title><![CDATA[第六十二课：单例类模板----狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/102456364</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/102456364</guid><author>lsy0607</author><pubDate>Wed, 09 Oct 2019 11:20:17 +0800</pubDate><description><![CDATA[一、需求的提出
在架构设计时，某些类在整个系统生命周期中最多只能有一个对象的存在，如何定义一个类，使得这个类最多只能创建一个对象。？
实例分析1；单例模式初探
#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

class SObject
{
    static SObject* c_instance;...]]></description><category></category></item><item><title><![CDATA[第六十一课：智能指针类模板----狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/102453829</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/102453829</guid><author>lsy0607</author><pubDate>Wed, 09 Oct 2019 10:30:17 +0800</pubDate><description><![CDATA[一、智能指针的意义

现代C++开发库中最重要的类模板之一
C++中自动内存管理的主要手段
能够在很大程度上避开内存相关的问题

STL中的智能指针auto_ptr

生命周期结束时，销毁指向的内存空间
不能指向堆数组，只能指向堆对象（变量）
一片堆空间只属于一个智能指针对象
多个智能指针对象不能指向同一片堆空间

实例分析1：auto_ptr使用初探
#include &lt;iostream&...]]></description><category></category></item><item><title><![CDATA[第六十课：数组类模板-----狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/102374705</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/102374705</guid><author>lsy0607</author><pubDate>Wed, 09 Oct 2019 09:29:00 +0800</pubDate><description><![CDATA[一、预备知识
有趣的面试题：
用你觉得最高效的方法求：1+2+3+4+5…+N的值
实例分析1：数值型模板参数
#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

template
&lt; typename T, int N &gt;//&lt; typename T, double N &gt;//报...]]></description><category></category></item><item><title><![CDATA[第五十九课：类模板深度解析----狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/102371019</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/102371019</guid><author>lsy0607</author><pubDate>Tue, 08 Oct 2019 11:32:25 +0800</pubDate><description><![CDATA[一、多参数类模板
类模板可以定义任意多个不同的类型参数
实例分析1：类模板的特化
#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

template
&lt; typename T1, typename T2 &gt;
class Test
{
public:
    void add(T1 a, T2...]]></description><category></category></item><item><title><![CDATA[第五十八课：类模板的概念和意义----狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/102328185</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/102328185</guid><author>lsy0607</author><pubDate>Mon, 07 Oct 2019 21:58:02 +0800</pubDate><description><![CDATA[一、在C++中是否能够将泛型编程应用于类？
类模板

一些类主要用于存储和组织数据元素
类中数据组织的方式和数据元素的具体类型无关
如：数组类，链表类，stack类，queue类

C++中的类模板

以相同的方式处理不同的类型
在类声明前使用template进行标识
用于说明类中使用的泛指类型T

template &lt;typename T&gt;
class Operator
{
publ...]]></description><category></category></item><item><title><![CDATA[第五十七课：深入理解函数模板---狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/102324259</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/102324259</guid><author>lsy0607</author><pubDate>Mon, 07 Oct 2019 20:36:06 +0800</pubDate><description><![CDATA[一、函数模板

编译器从函数模板通过具体类型产生不同的函数
编译器会对函数模板进行两次编译
对模板代码本身进行编译
对参数替换后的代码进行编译

注意事项：
函数模板本身不允许隐式类型转换
自动推导类型是，必须严格匹配
显示类型指定时，能够进行隐式类型转换
实例分析1：函数模板本质分析
#include &lt;iostream&gt;
#include &lt;string&gt;

using...]]></description><category></category></item><item><title><![CDATA[第五十六课：函数模板的概念和意义---狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/101725785</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/101725785</guid><author>lsy0607</author><pubDate>Sun, 29 Sep 2019 23:49:52 +0800</pubDate><description><![CDATA[一、C++中有几种交换变量的方法？
定义宏代码块VS定义函数
实例分析1：变量的交换
#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

#define SWAP(t, a, b)    \
do                       \
{                        \
   ...]]></description><category></category></item><item><title><![CDATA[第五十五课：经典问题分析四（new与malloc，构造函数，析构函数，虚函数，多态，dynamic_cast）---狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/101720134</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/101720134</guid><author>lsy0607</author><pubDate>Sun, 29 Sep 2019 23:12:57 +0800</pubDate><description><![CDATA[一、
new和malloc的区别是什么？
delete和free的区别是什么？
new关键字与malloc函数的区别

new关键字是C++的一部分
malloc是由C库提供的函数
new一具体类型为单位进行内存分配
malloc一字节为单位进行内存分配
new在申请内存空间时可进行初始化
malloc仅根据需要申请定量的内存空间

实例分析1：new和malloc的区别
#include &lt...]]></description><category></category></item><item><title><![CDATA[第五十四课：被遗弃的多重继承（下）---狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/101715298</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/101715298</guid><author>lsy0607</author><pubDate>Sun, 29 Sep 2019 21:47:13 +0800</pubDate><description><![CDATA[一、多重继承的问题三
实例分析1：多重继承问题3
#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

class BaseA
{
public:
    virtual void funcA()
    {
        cout &lt;&lt; "BaseA::funcA()" &lt;&lt; e...]]></description><category></category></item><item><title><![CDATA[第五十三课：被遗弃的多重继承（上）---狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/101712097</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/101712097</guid><author>lsy0607</author><pubDate>Sun, 29 Sep 2019 19:54:42 +0800</pubDate><description><![CDATA[一、C++中是否允许一个类继承自多个父类？

C++支持编写多重继承的代码
一个子类可以拥有多个父类
子类拥有所有父类的成员变量
子类继承所有父类的成员函数
子类对象可以当作任意父类对象使用、

二、多重继承的语法规则
class Derived:public BaseA,
			public BaseB,
			public BaseC
{

};

实例分析1：多重继承问题一
#include...]]></description><category></category></item><item><title><![CDATA[第五十二课：C++中的抽象类---狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/101487447</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/101487447</guid><author>lsy0607</author><pubDate>Fri, 27 Sep 2019 00:55:21 +0800</pubDate><description><![CDATA[一、什么是抽象类？
面向对象中的抽象概念
在进行面向对象分析时，会发现一些抽象的概念，比如图形面积如何计算？
在没有明确什么图形之前，并不能做到。
所以对概念上的图形求面积是没有意义的。
class shape
{
public:
double area()
{
return 0;
}
};

shape只是一个概念的类型，没有具体的对象。
shape类有没有存在的必要？

面向对象中的抽象类
（...]]></description><category></category></item><item><title><![CDATA[第五十一课：C++对象模型分析（下）---狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/101402318</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/101402318</guid><author>lsy0607</author><pubDate>Thu, 26 Sep 2019 01:43:02 +0800</pubDate><description><![CDATA[一、继承对象模型
实例分析1：继承对象模型初探
#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

class Demo
{
protected:
    int mi;
    int mj;
public:
    virtual void print()
    {
        cout &lt...]]></description><category></category></item><item><title><![CDATA[第五十课：对象模型分析（上）---狄泰软件学院]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/101400148</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/101400148</guid><author>lsy0607</author><pubDate>Thu, 26 Sep 2019 01:23:59 +0800</pubDate><description><![CDATA[一、回归本质

class是一种特殊的struct
在内存中class依旧可以看作变量的集合
class中的成员函数与成员变量是分开存放的
（1）每个对象由独立的成员变量
（2）所有的对象共享类中的成员函数

实例分析1：对象内存布局初探

#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

class ...]]></description><category></category></item><item><title><![CDATA[第四十九课：多态的概念和意义----狄泰软件学院C++课程]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/101236592</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/101236592</guid><author>lsy0607</author><pubDate>Tue, 24 Sep 2019 00:16:59 +0800</pubDate><description><![CDATA[一、多态的概念和意义
面向对象中期望的行为：

根据实际的对象类型判断如何调用重写函数
父类指针（引用）指向
（1）父类对象则调用父类中定义的函数
（2）子类对象则调用子类中定义的重写函数

注意：在上一课中讲到了父类子类之间的赋值兼容问题，这里根据需要复习一下第四十八课。
C++语言直接支持多态的概念

通过使用virtual关键字对多态进行支持
被virtual声明的函数被重写后具有多态性
被...]]></description><category></category></item><item><title><![CDATA[初探常量指针、指向常量的指针和指向常量的常指针]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/101207089</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/101207089</guid><author>lsy0607</author><pubDate>Mon, 23 Sep 2019 15:28:43 +0800</pubDate><description><![CDATA[1 常量指针，简称常指针。
int * const p
常指针，从字面的意思来理解，就是指针变量所指的空间地址是常量。需要强调的是这个地址在一开始就确定为常量，那么地址不能被修改，也就是说确定了指向谁之后，不能再指向其它地址。（C++中的引用也是这个道理）。但是这个地址里面存储的内容可以被修改。
#include &lt;iostream&gt;
using namespace std;
int ...]]></description><category></category></item><item><title><![CDATA[电路设计中上拉电阻与下拉电阻的作用]]></title><link>https://blog.youkuaiyun.com/lsy0607/article/details/101204565</link><guid>https://blog.youkuaiyun.com/lsy0607/article/details/101204565</guid><author>lsy0607</author><pubDate>Mon, 23 Sep 2019 15:11:15 +0800</pubDate><description><![CDATA[在电路设计中，我们把连接到VCC的电阻叫做上拉电阻，把连接到GND的电阻叫做下拉电阻。而在数字电路中，信息是通过数学逻辑“1”和“0”l来表示的。在模拟电路转数字电路中，我们把高电平定为“1”，低电平定义为“0”。在电路设计时如果存在未知的状态，这将对数字信息的产生不确定的因素，因此在电路设计中上拉电阻和下拉电阻可以消除这些不确定的因素。
一、输入电路

按键电路为例

轻触开关没有按下时，电路图...]]></description><category></category></item></channel></rss>