- 博客(94)
- 资源 (16)
- 收藏
- 关注

原创 ESP-12F驱动MPU6050使用DMP库姿态解算
一、准备工作主芯片采用是安信可科技的ESF-12F模组(内置ESP8266芯片),使用GPIO模拟I2C驱动MPU6050,i2c驱动部分可直接参考官方例程中的i2c_master.c文件,(附件提供)亲测没问题。注意点:明确MPU6050的从设备地址,可根据设计的硬件引脚AD0接电平来取值,AD0接GND,slave_addr为0x68,AD0接3.3v,slave_addr为0x68。...
2019-05-29 17:39:47
4704
4
原创 定位分析boot+app带freertos跳转跑飞
描述情况:boot程序存储memory,起始地址0x08000000前4 Bytes为堆栈地址(0x20003d30),boot运行程序地址(0x08008a59)app程序存储memory,0x0800a010起始地址前4 Bytes为堆栈地址(0x20003e50),app运行程序地址(0x0801830d)boot跳转前的操作:复位开启过的外设,关闭总中断,设置MSP和PSP指向app的堆栈地址,执行跳转到app的运行程序地址(0x0801830d)也就是Reset_Handler地址。关于程序
2020-09-13 16:55:37
6035
18
原创 解决stm8s配置timer2中断时间不准
问题描述:项目工程基于stm8s003芯片,以定时器2为例,定时器初始化后,发现第一次进入中断的时间不是设定的值,似乎是立即进入了中断。后面的中断时间就正常了。实际首次进入中断时间可以通过设置GPIO电平变化,用示波器测量得到。项目中由于在处理超声波测距时使用定时器来计数定时中断,初始化过程中偷偷的触发了中断导致第一次测距出现了误差。问题分析:软件规避:配置定时器时,先关闭更新中断,死等中断标志,清除标志后再开中断即可,跳过第一次的中断发生。根本原因:当然是翻官方datasheet,查看timer
2020-08-29 22:47:57
1592
1
原创 TFT液晶屏显示中英文
预了解知识字体表示:根据选择的字体1206或1608,它们表示字符是12个或16个像素高(对应循环第一个for),字符的宽度是6个或8个像素宽(对应循环嵌套的for),通过for来遍历像素定义中的每一个数字0或1,1的时候显示该像素点,0的时候不显示,这样就能够显示出文字了。叠加方式:就是不管原来的底色是什么,当像素为1的时候就显示该点,为0的时候什么也不做。所以如果是实时更新数据显示会一直累加之前的像素的上面造成所谓的“花屏”。非叠加方式:就是为1的时候显示该点,比叠加方式多了一步,为0时显示底色
2020-08-23 17:48:52
4449
3
转载 单片机C语言中的data,idata,xdata,pdata,code
转载自:http://blog.sina.com.cn/s/blog_4daf4df90100i5ej.html从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定...
2018-07-23 20:10:59
2883
转载 基于stm32串口环形缓冲队列处理机制—入门级(单字节)
串口环形缓冲区实验1.1 实验简介 最简单的串口数据处理机制是数据接收并原样回发的机制是:成功接收到一个数,触发进入中断,在中断函数中将数据读取出来,然后立即。这一种数据处理机制是“非缓冲中断方式”,虽然这种数据处理方式不消耗时间,但是这种数据处理方式严重的缺点是:数据无缓冲区,如果先前接收的的数据如果尚未发送完成(处理完成),然后串口又接收到新的数据,新接收的数据就会把尚未处理的数据覆盖,从而...
2018-07-07 21:00:38
1580
1
转载 #if 和 #ifdef的区别
面试题猜一下哪段代码会被编译进去,强调下是编译进去,不是执行 #define XXX 0 // 第一段条件编译 #ifdef XXX 逻辑1 #else 逻辑2 #endif // 第二段条件编译 #if XXX 逻辑1 #else 逻辑2 #endif答案第一段条件编译:逻辑1会被编译进去第二段条件编译:逻辑2会被编译进去总...
2018-07-06 08:55:12
487
转载 win10不兼容中文版的vc++ 6.0解决办法
转载自原博主:https://blog.youkuaiyun.com/w_9449/article/details/52864135无法正常运行原因就是win10不兼容中文版的vc,解决方法就是一句话,用英文版的msdev.exe替换中文版的msdev.exe,msdev.exe是vc的启动程序。下载好我分享的英文版msdev.exe(http://pan.baidu.com/s/1qYElbDq)解压出来,...
2018-06-30 10:03:50
17383
1
转载 什么是步进电机的细分? 什么是细分?是不是细分越高精度越高?
很多用户误以为步进电机驱动器的细分越高,步进电机的精度就越高,其实这是一种错误的观念,比如步进电机驱动器细分较高的可以达到60000个脉冲一转,而步进电机实际是无法分辨这个精度的,当驱动器设置为60000个脉冲/转的时候,步进电机驱动器接受好几个脉冲,步进电机才走一步,这样并不能提高步进电机的精度。 步进电机的细分技术实质上是一种电子阻尼技术,其主要目的是减弱或消除步进电机的低频振动,提...
2018-05-29 16:34:25
42030
1
原创 初识RTX51_TINY实时操作系统
在偶然的情况下看到了有人在51上运用一款实时操作系统,怀着好奇的心态去了解一下。它的大名叫:RTX51,有两个版本TINY和FULL,本文章主要对tiny版本做一个简单的介绍。RTX51 Tiny是一个非占先或多优先级的实时操作系统,是一个平级的时间片轮询实时操作系统,所有的任务平等运行。首先要使用这个操作系统需要做一些前期准备:keil4 C51,一块51开发板。在kei...
2018-05-26 21:27:12
11835
1
原创 stm8s实现串口中断接,中断发功能
一、首先进行UART1初始化/*USART1 config*/void USART1_Init(void){ /*Uart1*/ UART1_CR1=0x00; UART1_CR2=0x00; UART1_CR3=0x00; // 设置波特率,必须注意以下几点: // (1) 必须先写BRR2 // (2) BRR1...
2018-05-19 15:53:40
4708
转载 关于typedef的用法总结
在C还是C++代码中,typedef都使用的很多,在C代码中尤其是多。typedef与#define有些相似,其实是不同的,特别是在一些复杂的用法上,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,加上自己的一个分析...
2018-05-19 15:41:59
228
原创 使用MDK的Bubug仿真,程序执行时间与代码设定时钟一致性问题
大家在调试程序时,有时要查看某段程序的执行时间,有些人可能会发现怎么程序执行的时间和我预想的相差很多,无法真实的还原程序设计的执行时间。如果使用ST-LINK来仿真的同学可以通过设置Options for target -> Bebug ->Settings->Trace中的Core处来设定自己程序中设定的时钟频率。这里我的程序设定的时钟频率为72MHZ,故此处设置如下:...
2018-04-30 15:51:00
3473
转载 硬件切换485电路
485接口具有很好的抗噪音抗干扰、长距离传输和多站能力特性,使其为工控行业首选串行接口。485规定的电气特性为2线,半双工多点通信。它的电气特性是有线缆两端的电压差来决定的。由于半双工模式,通讯时需要切换收发状态,485电路大多分为如下几种:传统RS485电路(带收发控制脚非隔离RS-485电路) : 传统的485应用电路如下图所示,TTL电平端采用3线控制,常见的控制方式为:从接收状态向发送状态...
2018-03-22 20:42:46
1388
3
转载 哈佛和冯诺依曼,从STM32的const全局变量说起
文章出处。 http://blog.youkuaiyun.com/qq_29344757/article/details/75730054 从在学校到后来的实习工作,讲真,对于处理器的冯诺依曼结构和哈佛结构不大在意,印象中只知道它是数据存储器和程序存储器相关。 昨天在STM32程序中,把全局变量的定义成const属性时,发现它所处的位置是在STM32内置的FLASH而非内置的SRAM中。顿时让我觉得十分奇...
2018-03-22 10:48:23
810
转载 【转】U-Boot启动过程--详细版的完全分析
我们知道,bootloader是系统上电后最初加载运行的代码。它提供了处理器上电复位后最开始需要执行的初始化代码。 在PC机上引导程序一般由BIOS开始执行,然后读取硬盘中位于MBR(Main Boot Record,主引导记录)中的Bootloader(例如LILO或GRUB),并进一步引导操作系统的启动。 然而在嵌入式系统中通常没有像BIOS那样的固件程序,因此整个系统的...
2018-03-11 18:58:29
559
1
转载 【转】ARM处理器7种工作模式
转载自:http://blog.youkuaiyun.com/xiaolangyangyang/article/details/51768462一、ARM处理器7种工作模式(特权模式特权模式异常模式)用户模式(USR):正常程序执行模式,不能直接切换到其他模式 系统模式(SYS):运行操作系统的特权任务,与用户模式类似,但具有可以直接切换到其他模式等特权 快中断模式(FIQ):支持高速数据传输及...
2018-03-11 10:46:30
3094
转载 【转】ARM的三级流水线结构
3.4为何ARM7中PC=PC+8此处解释为何ARM7中,CPU地址,即PC,为何有PC=PC+8这一说法:众所周知,AMR7,是三级流水线,其细节见图:图3.1.AMR7三级流水线 首先,对于ARM7对应的流水线的执行情况,如下面这个图所示:图3.2.ARM7三级流水线状态 然后对于三级流水线举例如下:图3.3.ARM7三级...
2018-03-11 10:44:20
2324
3
转载 stm32串口占用时间、消耗CPU及最大中断时间的深度分析
1、stm32串口发送占用的时间 答:做嵌入式以来,一直自认为在两个MCU之间的串口通信很占用时间,让我感觉很是不爽。经过一番查找资料后发现并没有我想象的那么糟糕。串口发送数据: 发送数据在软件层面来看是按照字节来发送的。USARTx->DR = (Data & (uint16_t)0x01FF);CPU只需要把一个字节的数据填充到DR寄存器中就可以了,然后具体的发送过程是由...
2018-03-03 10:00:29
8292
2
转载 扇区 物理块 逻辑块 flash 基础概念
sector:硬件(磁盘)上的最小的操作单位,是操作系统和块设备(硬件、磁盘)之间传送数据的单位block由一个或多个sector组成,是软件(OS、文件系统)中最小的操作单位;操作系统的虚拟文件系统从硬件设备上读取一个block,实际为从硬件设备读取一个或多个sector.对于文件管理来说,每个文件对应的多个block可能是不连续的;block最终要映射到sector上,所以block的...
2018-02-25 16:29:55
14470
1
转载 stm32的三种编程下载方式
J-link几乎可以调试所有的arm芯片,不得不说是个好东东。这里记录三种stm32的下载程序方式:1.J-Flash下载(需要用到J-link)2.MDK配置下载(需要用到J-link)3.ISP下载(串口下载,需要用到官配串口下载软件,用过stc51的对这个都不会陌生吧)--------------------------------------------------------------...
2018-02-25 10:57:52
1201
转载 BIN、HEX,ELF,AXF文件的区别
1.BinBin文件是最纯粹的二进制机器代码, 或者说是"顺序格式"。按照assembly code顺序翻译成binary machine code,内部没有地址标记。Bin是直接的内存映象表示,二进制文件大小即为文件所包含的数据的实际大小。 BIN文件就是直接的二进制文件,一般用编程器烧写时从00开始,而如果下载运行,则下载到编译时的地址即可。可以直接在裸机上运行。2.HexIntel hex ...
2018-02-24 16:40:19
365
原创 【番外篇】mini2440裸机开发——分散加载文件scatter
一、分散加载文件的原理和MDK上的配置ARM的连接器提供了一种分散加载机制,在连接时可以根据分散加载文件(.scf文件)中指定的存储器分配方案,将可执行镜像文件分成指定的分区并定位于指定的存储器物理地址。这样,当嵌入式系统在复位或重新上电时,在对CPU相应寄存器进行初始化后,首先执行ROM存储器的Bootloader代码,根据连接时的存储器分配方案,将相应代码和数据由加载地址拷贝到运行地址,这样,...
2018-02-09 17:44:27
330
转载 软件编程低级错误总结
通过对《常见软件编程低级错误》资料的学习,了解到了编码中容易出现错误的地方,并且对代码编写的要求有了更深的认识。文中对“好”代码的要求是我们每个程序员应该达到的目标:“能工作的代码并不等于‘好’代码,‘好’代码的指标很多,包括可读性、可维护性、可移植性和可靠性等。出现网上问题的代码,大多是不良编程习惯引起的,不遵守编程规范的代码,往往也是最不可靠的代码。”1 1 内存泄露
2018-02-01 20:53:09
1124
转载 Android Studio安装配置、环境搭建详细步骤及基本使用
转载来源:http://wangzhaoli.blog.51cto.com/7607113/1730011前言 Android Studio的安装配置及使用篇终于来啦~ 废话不多说,以下针对JDK正确安装(及其环境变量配置完毕,即Java开发环境下)、Android Studio的安装,配置,以及创建工程、主题字体更换、窗口工具、布局、快捷方式等的基本使用逐一说明。
2018-01-31 20:21:36
474
转载 STM32的几种延时方法(基于MDK固件库3.0,晶振8M)
单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us( )和毫秒级delay_ms( )。1.普通延时法这个比较简单,让单片机做一些无关紧要的工作来打发时间,经常用循环来实现,不过要做的比较精准还是要下一番功夫。下面的代码是在网上搜到的,经测试延时比较精准。//粗延时函数,微秒void delay_us(u16 time){ u16 i=0
2018-01-24 15:08:56
4712
转载 【转】嵌入式软件工程师经典笔试题
> 预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,
2018-01-24 10:42:13
406
转载 ANSIC几种特殊的标准定义(__FILE__、__LINE__、__STDC__···)
相关标题:__FILE__、__LINE__、__DATE__、__TIME__、__STDC__为方便大家阅读,本文内容已经整理成PDF文件:http://pan.baidu.com/s/1gfHygynⅠ、写在前面对于我们大部分使用单片机进行裸机开发的朋友来说,可能很少有人在程序中许多关键的地方打印一些关键信息。有较大系统开发,或复杂系统开发经验的朋友一般都会在程序中输出很多调试信息,如在UC
2018-01-24 10:30:38
353
转载 keil优化等级设置
keil优化等级设置优化级别说明(仅供参考):则其中的 Code Optimization 栏就是用来设置C51的优化级别。共有9个优化级别(书上这么写的),高优化级别中包含了前面所有的优化级别。现将各个级别说明如下:0级优化:1、 常数折叠:只要有可能,编译器就执行将表达式化为常数数字的计算,其中包括运行地址的计算。2、 简单访问优化:对8051系统的内部数据和位地址进行访问优化
2018-01-24 10:12:26
1950
转载 C语言中volatile关键字的作用
一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:将内存变
2018-01-23 20:44:39
205
原创 STM32 输入捕获的脉冲宽度及频率计算
输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32 的定时器,除了 TIM6 和 TIM7,其他定时器都有输入捕获功能。以下是对脉冲宽度及频率的计算。1、脉冲宽度如下图所示,采集该高电平脉冲的宽度,只需要进入输入捕获上升沿检测,记录当前的发生上升沿时的CNT值,再进行输入捕获下降沿检测,也记录当前发生下降沿时的CNT值,两次CNT值的差值再根据计数的频率就可以算出脉冲的宽度。
2018-01-23 20:22:43
13264
9
转载 窗口看门狗
一,窗口看门狗介绍独立看门狗的喂狗范围 0-X(X由预分频器和重装载值决定,最大值为0xFFF)独立看门狗相关介绍:传送门:独立看门狗相比于独立看门狗,窗口看门狗限定了喂狗时间段(由喂狗上限和喂狗下限值限定的喂狗范围) 所以形象的称作窗口看门狗二,为什么需要窗口看门狗独立看门狗:在0-重载值之间任意时间都可以喂狗 如果程序跑飞后又跑回正常
2018-01-20 20:21:57
1135
1
转载 牛人对STM32的NVIC_PriorityGroupConfig使用及优先级分组方式理解
STM32有43个channel的settable的中断源;AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4 bits。这4个bits用于分配preemption优先级和sub优先级,在STM32的固件库中定义如下/* Preemption Priority Group ----------------------------
2018-01-18 22:07:15
606
转载 STM32 简单多任务调度
STM32的开发目前大多数还开处于“裸奔”的阶段,处于开发成本的考虑,可能还未嵌入任何的RTOS系统,由于没有操作系统的支持,因而不能方便的对多任务进行调度和管理,在main函数中你可能会写成如下方式:int main(void){ while (1) { Task1(); // 调用任务1 Task2();
2018-01-18 22:03:05
1096
转载 关于STM32外接12MHz晶振的处理办法
关于STM32外接12MHz晶振的处理办法http://www.amobbs.com/thread-4478412-1-1.html(出处: amoBBS 阿莫电子论坛)由于STM32F10x库官方采用的是默认的外接8MHz晶振,因此造成很多用户也采用了8MHz的晶振,但是,8MHz的晶振不是必须的,其他频点的晶振也是可行的,只需要在库中做相应的修改就行。 在论坛上看到很多用户反映,使用外接
2018-01-18 21:59:56
2822
转载 STM32使用外部16MHZ晶振总结
做小封装产品设计的朋友或许知道3225-4PIN的晶振,为何8MHZ晶振批量价格要到2元一片,而16MHZ晶振只需要0.4元甚至更少。究其原因是因为3225封装的晶振目前全球最低频率一般为8MHZ,而国内8MHZ达不到精度指标,所以市场上的8MHZ晶振一般为进口晶振,因此成本被垄断。 图1 3225封装晶振 STM32单片机学习者一开始用的晶振一般是2PIN的8MHZ晶振,一旦正真做产
2018-01-18 21:58:17
1202
转载 IAR for STM8系列教程(一)_新建软件工程详细过程
Ⅰ、写在前面本文使用目前(2017年04月)最新版本的IAR for STM8(EWSTM8)V2.20开发环境、STM8S103的处理器及最新版本STM8S标准外设库(STM8S_StdPeriph_Lib_V2.2.0)为例给大家讲述新建一个软件工程的详细过程。本文分如下几个章节来讲述:1.准备工作Ø 下载安装EWSTM8Ø 下载STM8标准外设库Ø 整理工程文件夹 2.新建软件工程Ø 创建工
2018-01-18 21:53:56
983
转载 STM32菜鸟成长记录---RS485通讯协议的应用
RS485缺点:RS485总线是一种常规的通信总线,它不能够做总线的自动仲裁,也就是不能够同时发送数据以避免总线竞争,所以整个系统的通信效率必然较低,数据冗余量较大,对于速度要求高的应用场所不适应用RS485总线。同时由于RS485总线上通常只有一台主机,所以这种总线方式是典型的集中—分散型控制系统。一旦主机出现故障,会使整个系统的通信限于瘫痪状态,因此做好主机的在线备份是一个重要措施。**传统光...
2018-01-18 21:48:38
465
转载 关于RS485总线通信协议开发注意事项
关于RS485总线通信协议开发注意事项1 前言近段时间发现我们系统在进行设备组态时,采用的串口复用方式在同一个RS485串口上挂载多个智能设备进行通信、监控。而往往在系统组态的时候就会发现部分设备通信不上,或者工程交付之后出现智能设备经常通信中断的情况。本文描述RS485总线协议的工作原理,从根本上剖析导致以上问题的根本原因。2 RS485总线硬件特点2.1 拓扑结...
2018-01-18 21:38:11
1335
(stm8s003)sx1278_demo.rar
2020-02-03
(stm32f030)sx1278_demo.rar
2020-02-03
ESP-12F驱动mpu6050及移植DMP库.zip
2019-05-29
自写数学处理函数(asin,acos,atan).zip
2019-05-29
利用timer模拟RTC做日历计时
2018-06-30
C51基本接口驱动代码汇总
2018-06-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人