【stm32】UART串口中断方式收发任意长度数据(HAL库开发,中断中不使用库函数 使用寄存器和自定义存储函数)

一、起因为什么要写一个串口接收不定长数据,还要把数据保存起来??因为存起来的数据要用要判断要很具数据做不同的处理,要把数据拿到后解析。但是,最开始想当然的使用HAL库中的HAL_UART_Receive_IT() 和HAL_UART_Receive(),调用函数发现怎么也不对,总是有bug。网上查了一堆,博客很多,解决不了我的问题啊,按照他们的方法我还是不能接收到数据。后来参考了野火的教程,直接用寄存器,自己再单独写了个函数解决。二、代码main.c 直接写while循环就O..
分类: 其他 发布时间: 10-16 22:32 阅读次数: 0

【STM32】MCU(STM32f103)+TCP模组(ESP8266)移植阿里云MQTT的C_SDK到mcu 连接阿里云物联网

零、写在前面1.发开发开板:野火 stm32f103 指南者wifi芯片 :ESP8266 板载的模块C_SDK :阿里云官网 c_sdk_3.0.1版本2.开发过程一、阿里云物联网创建产品、设备这一部分略,网上非常多的例子,官网文档资料也很详细二、官网文档阅读三、移植过程四、编写wapper.c中的接口五、调试六、写在后面 总结...
分类: 其他 发布时间: 10-16 22:32 阅读次数: 0

【4G模块】中移物联ML302 + GD32F407 使用支持MQTT协议AT指令接入阿里云物联网平台

目录〇、目的、GD32、ML302相关简介0.目的:1.ML302:2.LTE Cat.1:3.GD32F407 一、GD芯片创建工程写驱动:LED、串口4、4G模块1.创建工程2.LED的GPIO驱动3.debug串口驱动4.4G模组的供电、开机、串口二、测试ML302能否正常连接TCP服务器 AT指令说明三、使用MQTT协议连接阿里云物联网平台四、成果展示:〇、目的、GD32、ML302相关简介0.目的:使用手上的开发板(mcu...
分类: 其他 发布时间: 10-16 22:32 阅读次数: 0

《数据结构与算法分析》Chap2:算法分析

按照阅读顺序记录笔记算法是为求解一个问题需要遵循的、被清楚地指定的简单指令集和,确定某个算法是正确的,之后确定算法需要多少时间或空间就是最重要的了。数学基础时间复杂度:一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号 ),简称时间复杂度。也就是当N
分类: 其他 发布时间: 10-16 22:31 阅读次数: 0

019:全面的MyString

这道题是运算符重载、动态内存分配的很好的例题#include <cstdlib>#include <iostream>using namespace std;int strlen(const char * s) { int i = 0; for(; s[i]; ++i); return i;}void strcpy(char * d,const char * s){ int i = 0; for( i = 0; s[i]; ++i) d[i] = s[i]
分类: 其他 发布时间: 10-16 22:31 阅读次数: 0

020:继承自string的MyString

#include <cstdlib>#include <iostream>#include <string>#include <algorithm>using namespace std;class MyString:public string{// 在此处补充你的代码};int main(){ MyString s1("abcd-"),s2,s3("efgh-"),s4(s1); MyString SArray[4] = {"bi
分类: 其他 发布时间: 10-16 22:31 阅读次数: 0

第六周学习:虚函数和多态

虚函数类定义中,前面有virtual关键字的成员函数就是虚函数,且只用写在声明中。构造函数和静态成员函数不能使virtual function多态表现形式一:派生类 指针可以赋给基类指针通过基类指针调用基类和派生类中同名的虚函数时:1.若该指针指向一个基类对象,那么被调用是基类的虚函数。2.若该指针指向一个派生类对象,那么被调用的是派生类的虚函数这种机制叫多态。多态表现形式二:派生类对象可以赋给基类引用基类引用调用基类和派生类中同名虚函数若该引用引用一个基类对象,则调用
分类: 其他 发布时间: 10-16 22:31 阅读次数: 0

C++ 类继承总结笔记

(这图片这么小看个批哦…)总结的顺序就没多大逻辑了,但是能把基本的关系大概概括起来,仅供参考,不喜来喷我并且告诉我我的错误哈哈哈。1. 派生类和基类的关系形成继承关系:class derived: public base{...}派生类从基类里继承了数据成员(实现)和方法(接口)这句话的意思是,基类有的,派生类也会有。比如下面代码,基类有一个string类对象(复合),两个方法。那么派生类也会有一个string类对象与两个方法。class base{ private: str.
分类: 其他 发布时间: 10-16 22:30 阅读次数: 0

数据结构与算法:链表知识笔记

链表的类型声明struct Node;typedef struct Node* PtrToNode;typedef PtrToNode List //header ptrtypedef PtrToNode Position //当前位置List MakeEmpty(List L); //制作空链表int IsEmpty(List L);int IsLast(List L);Position Find(ElementType x, List L);void Delete(Elemen
分类: 其他 发布时间: 10-16 22:30 阅读次数: 0

第七周学习:输入输出、C++重定向、流操纵算子

istream 是用于输入的流类,cin就是该类对象。ostream是用于输出的流类,cout就是该类对象。ifstream是用于从文件读取数据的类ofstream是用于像文件写入数据的类iostream是既能输出又能输入的类fstream是既能从文件读取数据,又能写入数据的类标准流对象:cin \ cout \ cerr \ clogcin是标准输入流,用于从键盘读取数据,也可以被重定向为从文件中读取数据cout标准输出流,也可以重定向为向文件写入数据cerr和clog是...
分类: 其他 发布时间: 10-16 22:30 阅读次数: 0

第七周学习:文件读写

程序写入文件用ofstream对象来管理输出流该对象与特定的文件关联起来使用cout一样的方法使用该对象,只不过输出将进入文件而不是screena. 要包含header fstreamb. 声明一个ofstream对象 (out file)c. 使用open函数来将对象与文件关联程序将输出的数据放入缓冲区,当缓冲区满的时候将缓冲区内容传输到目标文件。如果有两个对象,则会创建两个缓冲区。文件输出到程序用ifstream对象管理输出流对象与文件connect使用cin一样的方法使
分类: 其他 发布时间: 10-16 22:30 阅读次数: 0

第七周学习:函数模板

函数模板:模板以泛型编写程序而不是具体类型。这样可以轻松调用同一块内容而数据类型不同的函数。//Swap函数(ps.不要using了std命名空间还命名swap,会有二义性冲突)template <class T>void Swap(T& a,T& b) { T temp =a; a = b; b = temp;}struct stu{ double a; double b;};template<> void Swap(stu&
分类: 其他 发布时间: 10-16 22:29 阅读次数: 0

数据结构与算法:栈笔记

栈的两种常见表达形式:链表&&数组链表形式// function:Struct Node;typedef struct Node* Stack;Stack CreateStack() ; //创建stackint IsEmpty(Stack S); void DisposeStack(Stack S); //销毁stackvoid MakeEmpty(Stack S); //格式化stackvoid Push(int x, Stack S); //pus
分类: 其他 发布时间: 10-16 22:29 阅读次数: 0

《More Effective C++》 笔记1

条款1:区别指针和引用没有所谓的null reference。reference总是指向一个对象。所以如果有一个变量,既可以指向一个对象,又可以不指向任何对象,那使用指针。如果必须指向一个对象,不能是null,那就用引用。reference的使用可能会比指针高效,因为引用不需要测试其有效性,而指针一般都需要先检查是否指向null、pointers可以被重新赋值,而reference总是指向最初获得的那个对象。string s1("Jeff");string s2("Jack")
分类: 其他 发布时间: 10-16 22:29 阅读次数: 0

数据结构与算法:队列

队列的特点就是从尾部进队列,从头部出队列,所以可以有两个指针,一个指向头部,一个指向尾部。然后用一个变量记录队列的目前长度,一个变量表示队列的最大长度,以此来判断是否为空,是否为满。然后设一个数组,来存放队列的值,数组大小为最大长度(动态分配,因此设一个指向数组的指针)Function:Struct QueueR{ int rear; int front; int* Array; int Size; int Capacity;} ; //假设存放的都是int类型数据typ.
分类: 其他 发布时间: 10-16 22:29 阅读次数: 0

第七周学习:类模板、派生、友元

类模板与继承类模板从类模板派生类模板从模板类派生类模板从普通类派生普通类从模板类派生//类模板从类模板派生template<class T1,class T2>class A{ T1 x; T2 y;};template<class T3,class T4>class B :public A<T4, T3> //实例化{ T3 u; T4 v;};template<class T>class C : public
分类: 其他 发布时间: 10-16 22:28 阅读次数: 0

MFC小项目:串口工具

项目1. 发送和接收器//写简单的串发器三个Button书写如下:void CUartToolDlg::OnClickedButtonCreceive(){ // TODO: 在此添加控件通知处理程序代码 m_receive.Empty(); UpdateData(FALSE);}void CUartToolDlg::OnClickedButtonCsend(){ // TODO: 在此添加控件通知处理程序代码 m_send.Empty(); UpdateDa
分类: 其他 发布时间: 10-16 22:28 阅读次数: 0

MFC小项目:简单计算器

计算器界面如下:首先制定对话框,一个edit control,16个button,然后分别命名ID,给button们创建消息处理函数,给编辑框设置变量(double)2.然后明确功能:(有四类)数字类运算符类Clear类Equal类创建三个变量num1,num2,num3,分别保存被加数、加数、运算符字符的枚举值假如依次键入 a + b =//数字类//在数字a的消息处理函数num1 =a; m_result = num1; //控件变量UpdateData(FA
分类: 其他 发布时间: 10-16 22:27 阅读次数: 0

LeetCode第二题:两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807来源:力扣(LeetCode)链接:https://leetcode-
分类: 其他 发布时间: 10-16 22:27 阅读次数: 0

UAC:如何将软件添加到信任区

WIN+R打开运行,输入regedit打开注册表找到Layers目录计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers右边新建字符串值,名称为你要信任的软件的完整地址(精确到.exe)比如visual studio 2019的地址(我的电脑的)C:\Program Files (x86)\Microsoft Visual Studio\2019\Communi..
分类: 其他 发布时间: 10-16 22:27 阅读次数: 0