自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 问答 (1)
  • 收藏
  • 关注

原创 压栈和出栈,基于A7的汇编指令

1.压栈和出栈:: 压栈也称进栈,例如一个正在执行程序被中断函数打断,需要从 A 函数跳到中断服务函数,此时为了保持A函数执行进度,需要进行保护现场(进栈),出栈对应就是恢复现场; 压栈和进栈遵循:先入后出,后入先出,从高地址向下增长;(随心情更)...

2021-03-28 09:54:52 676 1

原创 LORA模块初始化失败

LORA模块初始化失败了,单片机和模块之间通信协议为SPI;阅读文档发现,是因为SPI速率太高倒置初始化失败导致:不同主频的单片机每个模式的引脚速率不同,那个模块要求SPI < 10MHZ,F4上只能选第一个。...

2022-02-24 16:52:38 5299

原创 LORA扩频技术的特点和应用

扩频技术,特点是传输信息所用的带宽远大于信息本身带宽,特点是强抗干扰、强隐蔽性,易于实现码分多址。扩频后的信号带宽增加,幅度降低,类似于打铁把铁压扁了。但是并不一定会是功耗降低!LORA采用扩频技术,通过高扩频因子,极大的提高了信号抗干扰能力,这是LORA采用扩频技术最主要的优点,即便是使用相同的频率同时向主机发送信号,也不会相互干扰。LORA采用了数字扩频、数字信号处理、以及前身纠错编码技术,拥有前所未有的性能,是物联网局域网通讯种最优秀的一 种解决方案。...

2022-02-23 13:56:57 4932

原创 32位单片机驱动矩阵键盘

经过一天的实验总结出矩阵键盘最佳方案(可提出不同看法)1. 不要用外部中断驱动矩阵键盘,谁用谁知道(况且外部中断资源也比较宝贵);2. 引脚电器属性至关重要!!!!3. 低电平把高电平拉低还是高电平把低电平拉高,实验可以得到最好的方案,不唯一。方案:矩阵键盘逐列扫描,行引脚设置为 下拉输入,列引脚设置为 下拉推挽输出,采用 高电平把被下拉的输入拉高的方式,按键没有按下为低电平,按下为高电平。 该方案键盘为普通机械键盘,测试无需消抖,准确率达到10...

2022-02-06 18:42:19 465

原创 Rt-Thread 线程栈栈顶指针的生长方向:

阅读RT-Thread源码的时候,注意到一个细节,程序内存栈的生长方向应该是向下的,那么程序内存栈的栈顶指针应该是栈最低地址。 然而在CPU接口的源码中,栈顶指针的地址是栈地址 + 栈大小, 思考了一会儿才明白,程序内存栈的栈空间确实是从高地址向下生长,但是线程栈并不是程序内存栈,而是程序内存栈中的一个区间,该区间仍然遵循自下而上的栈生长方式...

2022-01-29 12:34:22 746

原创 STM32使用DMA不定长接受数据:

前言:STM32的DMA可以绕开cpu进行数据传输,串口的DMA使得cpu的资源得到部分释放。(使用DMA之前做好flash的初始化,裸机程序一般都是库函数初始化好的) 1. cubemx配置好串口和DMA2.main函数初始化串口DMA(因为使用rtthread操作系统,所以main.c和main函数都是自己写的)3. 串口空闲中断初始化4.串口空闲中断服务函数需要自己编写,自己添加(编写最好编写在uart.c)5.编...

2021-10-09 20:50:36 357

原创 stm32使用hal库配置串口接收中断

emmmm记录一下遇到的问题,此函数使能串口接收中断,并且进入中断后需要重新设置,否则只能进入一次。第三个参数是接受到多少数据后进入中断,也就是接收缓冲区。这个参数最好设置为1,在中断中一个个处理接受的的每个字节。...

2021-10-06 13:56:54 2253

原创 rtthread中rt_kprintf串口重定义:

用 rtthread - nano 的时候配置 rt_printf,可以通过查看函数,发现这个函数里有两个条件宏,很明显我们需要执行的是 rt_hw_console_output(rt_log_buf); 打开rt_hw_console_output(rt_log_buf); 我们发现里面是空的,需要自己添加程序来达到rt_printf 输出,可以利用 for 循环和 hal 库的HAL_UART_Transmit() 函数来实现,但是当我们写好之后发现貌似完全不起作...

2021-09-25 13:33:30 1035

原创 windows 命令行导出管理员账户

以管理员运行cmd,然后输入net user administrator /active:yes

2021-09-23 13:53:29 282

原创 RT-thread RTOS中的线程执行时间;

rtthread中线程的执行时间分为两个部分,一个是线程的周期,一个是从开始到结束的时间。 例如一个线程A的线程周期10ms,从开始到结束的时间为1ms: 线程周期:RTOS是一个对实时性要求非常高的操作系统类型,所以采用抢占式方式进行线程调度,对于实时性有一个指标。线程A要求响应时间不超过10ms,那么10ms就是线程的周期。 从开始到结束的时间:线程运行需要的时间是一个很重要的指标,因为它将影响其他线程的执行,假如有一个线程B的优先级...

2021-09-21 14:12:03 1655

原创 前后台程序设计:

int flag1 = 0;int flag2 = 0;int flag3 = 0;int main(void){ /* 硬件相关初始化 */ HardWareInit(); /* 无限循环 */ for (;;) { if (flag1) { /* 处理事情 1 */ DoSomething1(); } if (flag2) {.

2021-06-26 19:54:13 498

原创 cubemx忘记配置debug导致SWD第二次无法下载程序最简单解决办法:

其实很简单,只需要将boot0接GND,将boot1不接(悬空),然后复位一下,就可以下载程序了。

2021-06-24 15:53:03 1697 1

原创 .h和.c文件该放点啥

两种文件本质上没有任何区别。 只不过一般:.h文件是头文件,内含函数声明、宏定义、结构体定义等内容。.c文件是程序文件,内含函数实现,变量定义等内容。而且是什么后缀也没有关系,只不过编译器会默认对某些后缀的文件采取某些动作。你可以强制编译器把任何后缀的文件都当作c文件来编。这样分开写成两个文件是一个良好的编程风格。  而且,比方说 我在aaa.h里定义了一个函数的声明,然后我在aaa.h的同一个目录下建立aaa.c ,aaa.c里定义了这个函数的实现,然后是在main函数所在.c文件里#in...

2021-06-20 02:28:30 187

原创 STM32刚开定时器就关闭(HAL库)

做了一个长按按键两秒显示参数的东西,按照以往玩单片机老规矩,打开外部中断,按键按下进入外部中断然后打开定时器,两秒后进入定时器中断再关闭定时器

2021-06-18 14:45:40 762 1

原创 STM32串口通信memset清除字符串:(MDK文档避坑)

串口通信判断时,对比上位机传给下位机的数据是否包含或者吻合某个值时,对比完就清空缓存字符串,此处采用memset时数组和字符串不同,

2021-06-17 17:07:09 5084 1

原创 const char*、char const*、char* const的应用

const char* = char const*,表示指针指向的量是个常量,第一次赋值之后就不能被改变,但是指针本身可以被改变。

2021-06-17 13:19:29 112

原创 单片机内核休眠导致无法下载程序解决方案及避免措施

cubemx配置好程序下到板子上发现之后就无法下载程序了,而且单片机也不工作,解决方法是讲boot0接高电平(vcc),然后再下载就好了。 因为

2021-06-15 22:14:35 421 2

原创 IIC通信为什么加上拉电阻,怎么加??

IIC通信通常用开漏输出,无法做到真正的高电平,如果在漏极接上拉电阻可以进行电平转换。

2021-06-13 19:44:19 3537

原创 基于ARM处理器的软件IIC问题总结:

1.利用 __nop(); 指令配置微秒级延时。2.基于ARM的MCU的硬件IIC不稳定,我们配置软件IIC时应该将SCL和SDA两个引脚配置开漏输出。3.遇到过一个玄学问题,stm32的AHB如果采用一分频则IIC通信会失败,至今未解决。...

2021-05-23 19:22:38 156

原创 STM32的AHB分频系数为1导致IIC失效-----玄学

今天用cubemx配置IO口做模拟iic控制oled,在AHB的分频系数为1的情况下iic通信失败,无论是修改iic通信的延时抑或是控制iic频率,但是我将AHB设为2分频后就能够正常显示,通信成功,即便是iic频率达到了500kb/s(正常情况下最高400kb/s);目前原因未知,但是这样的缺点就是系统主频减半(对于F407最高主频168M,减半后就是84M了);...

2021-05-22 16:48:11 322

原创 STM32基于HAL库自由启动和关闭定时器:

最近在利用hal库做STM32的按键消抖的时候采用进入外部中断后开启10ms定时器中断的方式,但是要求进入定时器中断后就关闭定时器,也就相应需要开启和关闭定时器的函数,然后遇到了一个兄台发布的问题及解决方法,记录一下:问题:使用HAL_TIM_Base_Start_IT(&htim6)启动定时器后,紧接着又使用HAL_TIM_Base_Stop_IT(&htim6)停止定时器。但是,最后还会发生一次中断才停止。 个人认为正常情况应该立即停止,一次中断也不发生。解答:使用HAL_..

2021-05-20 12:48:44 10053 4

原创 C语言四则运算:

#include <stdio.h>#include <stdlib.h>double num[2];double result = 0;int u_num = 0;int error_flag;char char_way;char equ[99];int fuc();int main(void){ printf("\n"); error_flag = fuc(); if(error_flag == 1) { printf("error!!!!").

2021-05-10 23:27:20 313

原创 指令集、架构、微架构、内核 是什么?

一.指令集与图灵机: 说起指令集,就得提到图灵,倒不是图灵发明了各种指令集,而是我们所有人的计算机的工作模式本质上和图灵机一样:任何复杂的运算都能分解成有限个基本运算指令。 任何复杂的运算最终都可以分解成有限个基本指令来完成:加、减、乘、除、与、或、非、移位 等算术运算或逻辑运算。指令集就是有限个基本运算指令的集合。 主流的指令集分为ARM 和 x86, ARM是精简指令集,x86是复杂指令集,换言之完成一个复杂的运算X86指令可能需要2条,但是AR...

2021-05-07 16:22:27 1455

原创 浅谈 :ARM架构下的 cache 和 Write Buffers

涉及到ARM架构下的内存管理系统;1.cache和write buffers的概念:cache是高速缓冲存储器,write buffers是写缓冲区,这两个东西位于主存储器和CPU之间,主要用来提高存储系统的性能;2.cache和write buffers的作用原理: cache与主存之间以块(cache line)为单位进行数据交换,一个cache块的大小与系统有关,通常一个块为几个字;例如一个 cache Line 大小为4字节,当CPU从主存中读取地址为 n 的数据时,...

2021-04-29 17:34:59 628

原创 常见ARM汇编 指令/伪指令 实战总结:

1. .global/.globl:定义全局标识符,其中标号_start是GNU链接器用来指定第一个要执行指令所必须的,同样的是全局可见的。2..section命令是汇编语言汇中最为重要的命令之一,作用是定义内存段,该命令后只跟一个参数,即它声明的段的类型。例如:.section.text#定义文本段(代码段).section.data#定义数据段.section.bss#定义bss段再例如:.secti...

2021-04-29 00:21:50 2032 1

原创 iic 和 spi选择频率

iic的最大工作频率为400k,spi 则为 4M,注意一下;

2021-04-24 23:47:16 1755

原创 imx6ul定时器中断使能失败记录

正确:EPIT1->CR = ((1 << 1) | (frac << 4) | (1 << 24) | (1 << 2) | (1 << 3));错误:EPIT1->CR = ((0x1110 << 0) | (frac << 4) | (1 << 24));自己写imx6ul裸机驱动的时候遇到的问题,在进行逻辑运算的时候为了保证正确,尽量多拆解开,否则就会这样找半天错误;...

2021-04-23 12:46:45 166

原创 函数指针的理解 以及 汇编跳转IRQ中断并定位指定的代码编写

区分:指针函数是返回值为指针的函数;前言:cortex A系列芯片最高可具有具有1000+的中断,cortex A7最多集成8核在一个芯片里,通过gic中断管理器管理所有中断;它引入了中断号的概念,区别于cortex M系列芯片的NVIC中断管理器和数十个异常中断,cortex A架构芯片只有八个异常中断;其中IRQ中断包含了所有外部中断,采用中断号机制,每一个外部中断具有自己的中断号,通过给每一个中断号注册中断服务函数可以初始化中断服务函数;编写cortex A系列mcu中断服务函数的时候遇到了这

2021-04-22 21:46:53 1121

原创 堆栈的脏数据:子程序跳转回主程序后堆栈区存放的返回地址未销毁

在CPU中SP堆栈指针和PC程序计数器是程序运行的动力,堆栈区间能够存储指令返回地址、数据等;当从一个程序跳转到子程序之后,会将返回地址压栈,其实存放的是返回后下一个指令的地址,而执行完子程序之后跳转到上一级程序,PC指针赋值为进入子程序时压栈的指令地址,同时出栈该地址,但是数据并未被销毁,只不过CPU会自动无视该数据,但是只要还没有被覆盖,数据就任然存在,即脏数据;脏数据必然会有影响,先记录一下;...

2021-04-18 20:59:22 331 2

原创 删除交叉编译工具

sudoaptautoremovegcc-arm-linux-gnueabihf

2021-04-09 14:40:09 787

原创 磁盘分区——MBR详解(私密)

一、MBR和主引导扇区首先简要介绍MBR和主引导扇区的关系。 主引导扇区是硬盘0号柱面,0号磁头的第一个扇区,大小为512字节。(注:硬盘可以用柱面、磁头和扇区定位) MBR,占用主引导扇区的前446字节,紧随其后的64字节是分区表DPT,最后还剩两个字节则恒为55AA,表示结束符号。(下图,演示了它们的位置关系)然后,具体说一说MBR和分区表。 MBR,全称为Master Boot Record,即硬盘的主引...

2021-03-03 21:02:32 8529 2

原创 Linux下文件权限--目录权限与该目录下文件的权限

问题来源:鸟哥的私房菜。问:有一个账号,叫hw, 它的家目录在/home/hw, hw对此目录具有 【rwx】的权限,若此目录下有一个名为the_root.data的文件,文件权限如下:-rwx------ 1 root root 4356 Sep 19 23:20 the_root.data请问hw对此文件的权限是什么?是否可以删除该文件?答:对于该文件来说,hw是others的身份,所以无权限rwx,也就是无法变动该文件的内容。但是该文件在它的家目录下,它在此目录下具有rwx的完整权限

2021-03-01 13:18:53 318

原创 Vmware虚拟机中运行ubuntu操作系统的电缆问题,以及windows与ubuntu不能互Ping的问题解决办法

1.采用桥接模式时显示 ”电缆被拔“ 解决办法:打开设备管理器,然后卸载并删除VMnet1/8两个网卡(图中红色的部分),然后到VMware的虚拟网络编辑器里将所有的网卡全部删除,然后点左下角的还原默认设置;然后再选择桥接模式,选自动;以上步骤可以让我们在桥接模式下连接网络;2.主机和虚拟机在同一网段解决方法:为了确保主机和虚拟机在同一网段,首先保证我们连接的网络没有问题(我之前连接学校内网的时候就出现问题,桥接后主机和从机所在网段不一致,换成我的手机热点后就好了),然后保证我们

2021-02-28 17:05:58 165

原创 蓝桥杯第九届预赛项目总结

1.试题所需要协调的外设有:PCF8591、数码管、矩阵键盘、led、电位计RB2、AT24C02;2.难点和待解决的问题:(1)矩阵 按键的长按检测和单次按键检测(较难);(2)IIC总线通信协议的理解及应用;(难点,但是官方给了驱动,建议自己理解,我写在了另一篇博文里);(3)主函数里循环利用PCF8591循环读取电位计RB2,如何保证每次读取的RB2电位计的电压值是正确的(待解决);(4)解决led灯均匀流动;一、先上程序的led函数:#define uchar.

2021-02-03 16:09:33 170

原创 IIC总线的应答——遵循IIC协议的IC自带的识别应答与非应答

引言:(这 句出自何立民的《I2C总线应用系统设计》)原述:“应答信号在第9个时钟上出现,接收器输出低电平为应答信号(A),输出高电平则为非应答信号 (/A)”,“由于某种原因,被控器不产生应答时,如被控器正在进行其它处理无法接收总线上的数据时,必须释放总线,将数据线置高电平,然后主控器可通过产生一个停止信号信号来比终止数据传输。”“当主控器接收数据时接收到最后一个数据字节后,必须给被控器发送一个非应答位(/A),使被控器发送器释放数 据线,以便主控制(注:应当是主控器,不是主控制)发送停止信号从而终止数据

2021-02-03 00:55:02 3026 1

原创 蓝桥杯第八届预赛51项目———电子钟总结归纳:

这次的项目耗时很长,断断续续差不多三天,主要是还没有什么实战开发经验此次电子钟的项目受益良多。1.项目的实现及难点:A. 首先是矩阵按键这一块,既要有单次按键的处理,又要有长按的处理,还要做好消抖;(难点)B. DS1302读写,以及设定时间时暂停时钟;(卡bug)C. 正确的读取DS1302,并与设定的闹钟时间做比对;(通信不允许别打断,这才是重点)D. 数码管显示的方法,尽量少的占用flash空间;2.过程及代码剖析(有待改进的代码后续补上);(1).按键的处理:.

2021-02-01 23:45:01 485 1

原创 C语言弘定义随笔——弘定义不带分号

一直都有点混淆,再记一遍加深印象;#define HC_led P2=P2&0x1f|0xa0;#define uchar unsigned char例如第一种,如果结尾加分号则用的时候无需分号,因为相当于定义了它自带分号。总之就是弘定义无需分号结尾;...

2021-01-24 00:36:47 236

原创 DS1302计时机制发现:个位满10向高四位进1!

今天无意间统计了一下DS1302的计数规律,我们都知道DS1302是那一个字节的低四位装个位数,拿高三位(小时是高两位)装十位数,其中当低四位计数满10就归零,向高四位进1,所以如果拿读取到的数据对十求余,就有9--16 // 25--32 // ......这些跳变,我们只需要对16做除求商得十位,对16求余得个位就好了。...

2021-01-23 23:45:36 223

原创 采用定时器计时的流水灯程序为什么计时不准确:中断优先原则

今天写一个蓝桥杯的彩灯程序,我用定时器中断来让流水灯每400ms流动一次,结果发现流水灯间隔时间很不稳定,我的代码思路如下:void main(void) //以8051单片机为例{ TMOD = 0x01; TH0 = -9; //11.0592Mhz, 每2.5ms中断一次 TR0 = 1; EA = 1; ET0 = 1; while(1) { if(times >= 160) {

2021-01-20 00:37:48 484 1

原创 串行口中断服务函数的触发条件-------TI/RI 触发

串行口中断服务函数和其他中断本质上是一样的,达到特定的条件,如何向CPU申请中断,进入中断服务函数;我特意在郭天祥老师的书上找到了一句话:当数据被写入SBUF寄存器后,单片机自动开始从起始位发送数据,发送到停止位的开始时,由内部硬件将TI置1,向CPU申请中断,接下来可在中断服务程序中做相应处理,也可选择不进入中断。接收数据时 RI 同理。 由此可见触发中断服务函数也就是 TI / RI 置1后,...

2021-01-05 17:33:21 10309 1

空空如也

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

TA关注的人

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