自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (4)
  • 收藏
  • 关注

原创 STM32串口DMA接收一帧数据分段问题

需求:波特率19200,接收不定长的数据,有其他单片机按字节发送,但是一帧数据有1.7ms间隔。有上位机通过VS的串口接口发送,一帧数据有200ms间隔,最后两个byte都是crc校验。同一时间只会存在一种发送方式。原方案:缓冲区长度128byte,接收数据8~33byte不等,1ms检查一次接收长度是否变化,若长度无变化则停止一帧的接收。问题:接收其他单片机数据没问题,但是接收上位机数据会出现分段的情况,不完整的数据导致后面crc校验不通过。解决:接收完数据后立即进行crc校验,不通过则累计长度,下次数据

2022-07-02 16:23:33 1236 3

原创 VS2019 C#自定义用户控件定时器导致工程卡死退出的问题

问题场景:一个上位机用于显示以太网传来的数据,自定义用户控件里面使用了datagridview用来显示数据,相应的加了一个定时器刷新数据,主界面调用这个自定义用户控件。然后调试可以正常进行,结束调试,然后重新打开主界面的设计页面,VS2019卡死退出。解决方法:注释掉定时器里面的内容,进行一次调试,然后可以正常打开主界面的设计页面,需要时去掉注释即可。原理未知,有大佬知道可以教教...

2022-04-10 17:35:33 1180

原创 内存越界问题查找

确认malloc申请内存的大小与memcpy,memset操作的大小一般都是malloc了个小内存,但是memcpy或memset了个大一点的内存,然后导致内存越界内存越界会导致不可意料的结果,所以如果底层代码报错,不要死磕,查查最近自己写的部分是不是有问题...

2022-02-21 15:55:55 954

原创 rtthread rt_sem_take断言问题来源定位

问题:(sem != RT_NULL) assertion failed at function:rt_sem_take, line number:333定位:找到rt_sem_take函数里的RT_ASSERT(sem != RT_NULL);语句在上面加一个sem == RT_NULL判断,并在判断语句里打个断点 if(sem == RT_NULL) { rt_kprintf("qiaonima\r\n"); //此处打断点 return RT_ERROR; }

2022-02-15 09:24:35 1637

原创 rtthread stm32无法进入线程

现象:由rtthread模板移植代码,进入调度函数rt_system_scheduler_start();后,没有进入线程,经过调试发现卡死在了startup_stm32xxxx.s里面了。DCMI_IRQHandler CRYP_IRQHandler HASH_RNG_IRQHan

2022-02-15 09:05:13 1184

原创 逻辑分析仪DSLogic配合DSView解码CAN

**逻辑分析仪DSLogic接法:**通道地接CAN地,通道正接CANL对于CAN通讯显性电平,总线电压差2V,用逻辑"0"表示,隐性电平,总线电压差0V,用逻辑"1"表示DSView的解码是依据逻辑上的高低电平,CANL对地的高低变化与逻辑"相符"DSview设置:1.阈值电压设为2V,因为CANL对地在1.5V到2.5V之间2.采样时间至少要大于发送周期,采样频率设为默认的1MHz即可3.点开始进行波形捕获4.设置两个光标,需要包含解码的数据帧区间第一个光标要在数据帧第一个边沿前面

2022-01-19 16:43:07 5451 7

原创 C语言地址测试

#include "stdio.h"typedef struct _TEST_{ char A; char B; char C;}test;int main(){ int a; int b[10] = { 0 }; printf("%p\r\n", &a); printf("%p\r\n", &a + 1); printf("%p\r\n", (test*)&a + 1); printf("%p\r\n", (int)&a + 1);

2021-11-26 12:06:35 495 1

原创 STM32定时器中断,只进入一次,后面就进不去

Period设置成0导致的

2021-10-08 18:25:16 5099 2

原创 STM32F407 作为SPI从机,使用软件管理SSI方式处理片选

注意事项:主从机一定要共地初始化部分://以下是SPI模块的初始化代码,配置成从机模式 void SPI1_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_A

2021-10-03 19:18:11 1783

原创 结构体地址测试

#include <stdio.h>typedef struct _DS_IO_IN_{ int IN01_IO : 1 ; //ÊäÈëͨµÀ01 int IN02_IO : 1 ; //ÊäÈëͨµÀ02 int IN03_IO : 1 ; //ÊäÈëͨµÀ03 int IN04_IO : 1 ; //ÊäÈëͨµÀ04 int IN05_IO : 1

2021-09-28 23:21:11 82

原创 求二维数组行数与列数

int A[2][6] = { 0 };int row_A = ((int)A[1] - (int)A[0]) / sizeof(int);int column_A = sizeof(A) / sizeof(int) / row_A;printf("%d\t%d", row_A, column_A);

2021-09-23 22:11:14 232

原创 获取当前设备int的最大值与最小值

//1000 - 1,即0111,第一位0表示正,其余为全为1标志最大int max_int = (1 << (8 * sizeof(int) - 1)) - 1;//比最大值大1就是最小值,1000 “负零” 即最小值int min_int = 1 << (8 * sizeof(int) - 1); //最小值绝对值比最大值绝对值大1...

2021-09-20 00:22:12 176

原创 老旧Ulink出现SWD Communication Failure现象

如果接线确认没问题的话,可以降低一下烧录速度试试

2021-09-08 13:46:12 1292

原创 单片机串口设备地址异常跳变

移植RT_thread, 在调试串口过程中,串口设备数据地址一直在跳变,而且跳变的两个地址固定,很有可能是一直在复位。从复位入手,最后发现是copy了一个初始化了独立看门狗的.c文件,去使能独立看门狗,复位现象消失。...

2021-09-07 15:50:41 317

原创 关于+的优先级大于&这件事

#include <stdio.h>#include <string.h>typedef struct _RegSetAnaHMI_{ unsigned int EleQ1_L; // µç¶ÈÁ¿1 unsigned int EleQ1_H; // µç¶ÈÁ¿1 unsigned int EleQ2_L; // µç¶ÈÁ¿2 unsigned int EleQ2_H;

2021-09-01 21:28:03 169

原创 汉诺塔的C语言递归实现

汉诺塔问题目标:把A上的‘盘子’全部移动到C上,每次只能移动一个,而且移动过程中小‘盘子’只能在大‘盘子’上面。要用递归解决该问题就需要找到f(n)f(n)f(n)与f(n−1)f(n-1)f(n−1)的关系f(n)f(n)f(n)即将n个‘盘子’从A移动到Cf(n)f(n)f(n)可以分解为:① n-1个 ‘盘子’从A移动到B②第n个‘盘子’从A移动到C③ n-1个‘盘子’从B移动到C构造函数:输入为塔中‘盘子’的个数,以及三个位置,因为n-1个‘盘子’的起始位置与目标位置与n个‘

2021-04-18 09:38:29 207

原创 算法的特点

程序 = 数据结构 + 算法算法的特点1.有穷性一个算法应包含有限的操作步骤。而不是无限。2.确定性算法中的每一个步骤都应当是确定的。而不应该是含糊的、模棱两可的。3.有效性算法中的每一个步骤都应当能有效执行,并得到确定的结果。4.有一个或多个输出算法的目的是为了求解,"解”就是输出。没有输出的算法是没有意义的。5.有零个或多个输入所谓输入是指在执行算法时需要从外界取得必要的信息。...

2021-04-16 00:37:25 2333

原创 C语言GCC编译过程

.c文件 -> 预编译 -> 编译 -> 链接 -> 可执行程序 <- C语言的库文件-E 预编译(生成.e文件)预编译是将include包含的头文件内容替换到C文件中,同时将代码中没用的注释部分删除。-S 汇编(生成.s文件)将C语言转换为汇编语言-C 编译(生成.o文件)将代码编译为二进制的机器指令链接(生成.exe文件)GCC没有任何参数,代表就是链接...

2021-04-15 21:07:49 201

原创 常用CMD - DOS指令

dir:列出当前目录下的文件以及文件夹md:创建目录rd:删除目录cd:进入指定目录cd…:退回到上一级目录cd/:退回到根目录del:删除文件exit: 退出dos命令行

2021-04-15 16:48:11 129

原创 C语言关键字

1.C语言32个关键字autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile2. C语言34种运算符算数运算符:+ , - , * , / , % , ++, -

2021-04-15 15:48:03 53

原创 C#使用Random生成多个不同随机数

错误的做法创建多个Random实例,这样得到的随机数将全部是一样的 int randomdata1; int randomdata2; int randomdata3; Random random1 = new Random(); Random random2 = new Random(); Random random3 = new Random(); randomdata1 = random1.Next(10); randomdata2 = random2.Next(10); r

2021-04-12 11:55:11 1883 3

原创 C#数组

如果需要跟踪相同类型的大量数据,比如说,一个高度列表或一群狗,可以用数组(array)来实现。C#的数组是特殊的,因为这是一组变量,却处理为一个对象。利用数组,可以修改和存储多个数据,而不必单独跟踪每一个变量。创建一个数组时,就像其他变量一样,要用一个名和一个类型来申明。bool[] myarray;myarray = new bool[15];myarray[4] = true;使用数组时,首先要申明一个指向这个数组的引用变量。然后需要使用new语句创建数组,并指定数组大小。然后可以设

2021-04-08 15:18:20 641

原创 C#变量的类型

常使用的类型char用来存储单个字符int可以存储-2147483648 ~ 2147483647之间的任何整数(−231-2^{31}−231 ~2312^{31}231)string可以存储任意长度的文本(包括空串“”)bool是个布尔值,包括true和falsedouble可以存储±5.0×10−324\pm5.0×10^{-324}±5.0×10−324 ~ ±1.7×10308\pm1.7×10^{308}±1.7×10308之间的任意小数(16位有效数字)2.更多表示整数的类型.

2021-04-08 09:10:21 455

原创 C#类与对象

对象是C#的一种工具,可以处理一组类似的事物。创建一个对象,只需要new关键字以及类名。下面a1,a2,a3就是对象class A{ //...}A a1 = new A();A a2 = new A();A a3 = new A();类对于对象来说就是设计蓝图,由类创建一个新对象时,称为改类的实例。...

2021-04-06 16:04:03 135

原创 C#命名空间总结

1.命名空间可以跨越多个文件2.命名空间里的类可以互相调用3.使用partial可以把同一个类写到不同文件的命名空间里面例:程序PetFiler,有两个文件,SomeClass.cs和MoreClass.cs①SomeClass.csnamespace PetFiler{ class Dog { public void Perk { //... } } partial class Cat { public void Meow { //... } }

2021-04-06 09:42:31 651

原创 C语言short反码位移测试

#include <stdio.h>int main(void) { short a = 127; short b = -127; int c ; printf("%d\r\n",sizeof(a)); printf("%d\r\n",sizeof(b)); printf("%x\r\n",a); printf("%x\r\n",b); printf("%x\r\n",a<<16&0xff); printf("%x\r\n",b<<16&.

2021-02-26 15:37:24 134

原创 STM32F4的GPIO使用

一.GPIO时钟使能void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);参数RCC_AHB1Periph可选择的范围如下:#define RCC_AHB1Periph_GPIOA ((uint32_t)0x00000001)#define RCC_AHB1Periph_GPIOB ((uint32_t)0x00000002)#define R

2021-01-30 00:02:51 2935

原创 STM32F407通用IO(GPIO)

一.GPIO简介每个通用IO口包括4个32位配置寄存器:GPIOx_MODERGPIOx_OTYPERGPIOx_OSPEEDRGPIOx_PUPDR2个32位数据寄存器:GPIOx_IDRGPIOx_ODR1个32位置位/复位寄存器:GPIOx_BSRR1个32位锁定寄存器:GPIOx_LCKR2个32位复用功能选择寄存器:GPIOx_AFRHGPIOx_AFRL二.GPIO主要特性...

2021-01-27 22:41:23 2399

原创 STM32F407存储器组织结构

程序存储器、数据存储器、寄存器和 I/O 端口排列在同一个顺序的 4 GB 地址空间内。各字节按小端格式在存储器中编码。字中编号最低的字节被视为该字的最低有效字节,而编号最高的字节被视为最高有效字节。有关外设寄存器映射的详细信息,请参见相关章节。可寻址的存储空间分为 8 个主要块,每个块为 512 MB。未分配给片上存储器和外设的所有存储区域均视为“保留区”。请参见产品数据手册中的存储器映射图。...

2021-01-25 00:27:47 1160 1

原创 STM32F407总线

主系统由 32 位多层 AHB 总线矩阵构成,可实现以下部分的互连:● 八条主控总线:— Cortex™-M4F 内核 I 总线、D 总线和 S 总线— DMA1 存储器总线— DMA2 存储器总线— DMA2 外设总线— 以太网 DMA 总线— USB OTG HS DMA 总线● 七条被控总线:— 内部 Flash ICode 总线— 内部 Flash DCode 总线— 主要内部 SRAM1 (112 KB)— 辅助内部 SRAM2 (16 KB)— 辅助内部 SRAM3 (

2021-01-24 23:56:33 1114

原创 路由器NAT原理

举一个简单的例子,假设学校的路由器分配给你的地址是是IP1,而学校的路由器对外IP地址为IP2,当你向服务器发送请求后,假设是通过A端口,这个数据包在经过路由器时,原IP地址会被改写成路由器的IP地址IP2,而端口会被改写为路由器的一个空闲端口B,同时会维护一个转发表,使得目的为端口B的数据包都转发到IP1计算机的A端口。...

2020-05-27 19:47:16 415

转载 复数的幅角Arg与幅角主值arg

Arg(z)表示复数z的幅角,它有无穷多个值,任两个值的差是2π的整数倍。arg(z)则表示复数z幅角的主值,复数幅角主值的范围的规定各种书上不尽一致,有的规定是[0,2π),有的则规定是(-π,π]。arg(z)可以通过复数的实部与虚部求反三角函数的来。必须指出,只要是复数z的某一个幅角值(即使不是主值)也可以用arg(z)表示。arg(z)与Arg(z)之间的关系是:Arg(z)=arg(z)+2kπ (k为整数)。...

2020-05-19 22:20:35 15279

原创 傅里叶级数的奇偶延拓

复习高数,突然想到傅里叶级数的奇偶延拓求法和直接求有什么关系出现这种疑问是因为总有些不明确周期的题,让人傻傻分不清于是折腾了一晚上,终于搞清楚了,做个笔记以防忘记以f(x)=1−x2f(x)=1-x^2f(x)=1−x2 其中 x⊂[0,π]x\subset[0,\pi ]x⊂[0,π]为例直接求取法直接对函数进行周期延拓,周期为π\piπ,相应频率为2n,则:a0=2π∫0π(1−x2)dx=2(1−π23)a_0=\frac{2}{\pi} \int_{0}^{\pi} (1-x^2)dx=

2020-05-19 05:48:41 27057 7

原创 Python自定义高精度小数计算来获取巴塞尔问题的近似值

巴塞尔问题,也就是以下级数的和:∑n=1∞1n2=lim⁡x→∞(112+122⋯+1n2)\sum_{n=1}^{\infty}\frac{1}{n^2} =\lim_{x \to \infty} (\frac{1}{1^2}+\frac{1}{2^2}\cdots +\frac{1}{n^2} )n=1∑∞​n21​=x→∞lim​(121​+221​⋯+n21​)其精确值已经被证明是 π26\frac{\pi ^2}{6}6π2​现在用python编写程序从正面逼近巴塞尔问题的精确值直接计算

2020-05-18 22:31:07 2226

原创 PS钢笔工具笔记

钢笔就是就是一二三阶贝塞尔曲线的组合,贝塞尔始末点加贝塞尔锚点控制一条条贝塞尔曲线钢笔抠图选择路径模式添加点后,按住鼠标左键不松并移动鼠标,实现添加贝塞尔锚点直接松开就是直线了(只有贝塞尔始末点)在已有的贝塞尔曲线上点一下会添加贝塞尔始末点,并且按当前斜率自动添加贝塞尔锚点在已有的贝塞尔始末点上点一下会去除贝塞尔始末点按住Alt点击贝塞尔始末点可添加和删除贝塞尔锚点按住Ctrl可以用鼠标左键拖动贝塞尔始末点,也可以调整贝塞尔锚点将路径弄成闭合回路后,按Ctrl加回车选区,按Ctrl加J把选区

2020-05-18 05:23:07 358

原创 用傅里叶级数表示复平面上的图形

设图形为时间的函数 f(t)=a(t)+ib(t)f(t) = a(t) + i b(t)f(t)=a(t)+ib(t) (a(t)和b(t)为时间的函数)f(t)为闭环曲线或者有限的曲线f(t)为闭环曲线时,随着时间t的增加,f(t)在曲线上转圈圈。f(t)为有限的曲线时,随着时间t的增加,f(t)会从曲线头部走到尾部,然后跳到头部从新走起显然以上两种情况下f(t)都是时间t下的周期函数,可以由傅里叶级数表示设f(t)为周期为1的函数,(0,1)为f(t)的一个周期区间则傅里叶级数的指数形式:

2020-05-15 20:19:31 818 1

转载 pip 自己更新及下载安装各种库超时的解决办法

pip更新超时:python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simplepip下载安装超时(将最后的packages改为需要下载安装的库名)pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=100 packages...

2020-05-15 15:16:58 193

原创 javascript 弹窗与控制台日志

三种弹窗: var flag=confirm("!!!"); //确认弹窗,flag确认获得true,取消获得false var info = prompt("!!!"); //输入弹窗,info获得输入数据 alert("!!!"); //警告弹窗控制台日志:console.log("!!!"); //打开浏览器控制台可以看到输出...

2020-05-03 01:45:18 299

原创 哔哩哔哩 B站视频引用到自己的网站的方法

先上个例子<iframe height=100% width=100% src="//player.bilibili.com/player.html?bvid=BV1LC4y1s7gd&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> <...

2020-04-10 14:39:04 8866 2

原创 浏览器控制台自动完成教务系统学生互评

var input=document.getElementsByTagName("input") //获取所有input标签var td=document.getElementsByTagName("td") //获取所有td标签 for (var i=0;i<input.length;i+=1) { input[i].value=(Math.rand...

2020-04-07 12:07:25 238

ragged2e.sty

安装Manim的依赖需要MiKTex,可是安装的MiKTex后还是提示ms包里面缺少ragged2e.sty,而且魔性的是MiKTeX Package Manager 里面的ms包本来就没有ragged2e.sty。将这个文件丢到H:\MiKTeX\tex\latex\ms里面就不会提示缺少ragged2e.sty了

2020-05-15

35BYJ412P步进电机驱动 c8t6

35BYJ412P步进电机驱动,开发板用STM32c8t6,驱动用uln2003.

2018-08-10

LED数码管驱动程序 STM32c8t6

开发板用的是STM32c8t6,四个并联的数码管的驱动程序.。。。。。。。。。。。。。。。。。。。。。。。。。

2018-08-10

四相五线 28BYJ-48步进电机驱动 STM32c8t6

开发板用的是STM32c8t6,电机驱动模块用的是L298N(只要是能用单片机信号控制驱动电路的开关就行),28BYJ-48步进电机驱动

2018-08-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除