自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

fengel_cs的专栏

嵌入式ARM,LINUX,STM32,UCOS,通信,能源

  • 博客(121)
  • 资源 (12)
  • 收藏
  • 关注

原创 STM32时钟系统和TIMER配置(溢出中断/PWM)实例

STM32 时钟系统,定时器,PWM,中断

2022-09-24 22:03:21 3949 2

原创 STM32CubeMX安装、使用、配置

Keep User Code when re-generating选中也很有必要,意思是生成的代码中,如果假如了用户自己的代码,在重新使用cube配置后重新生成的代码中,不会被覆盖,保留。前提是用户代码必须在雷士下面的注释区域内,否则仍然会被覆盖.........

2022-06-26 21:00:03 1369

转载 STM32入门-区别ORD,BSRR,BRR寄存器

(转本文的目的是想说明配置GPIO的值如果用ODR寄存器,就会有读改写的过程,不利于任务间同步,即要考虑线程安全问题。如果BSRR可以直接设置某位,比ODR快)基础知识ORD,BSRR,BRR寄存器的作用是对已经初始化后的 IO 口输出高、低电平。ODR寄存器可读可写,32位,既能控制管脚为高电平,也能控制管脚为低电平。GPIO管脚对于位写1为高电平,写 0 为低电平。(低 16 位用于设置 GPIO 口对应位输出高/低电平。高 16 位保留地址,读写无效。)BSRR寄存器 称为端口位设置/清

2022-05-12 22:14:15 4076

转载 STM32中GPIO的8种工作模式

(转这篇文章的目的是文中的红色加粗的地方便于以后用到了查看)一、推挽输出:可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。 推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。二.

2022-05-12 22:06:02 687

原创 STM32的烧录和Hex/bin烧录文件解析

一、STM32的烧录1. 用IDE工具烧录可以配置IAR或Keil,用IDE下载。硬件工具需要使用ST-Link(分为SWD或Jtag方式,SWD连线少,比较常用于调试)或J-Link连接到板子的相应引脚(详见Jtag引脚定义)。需要注意的是ST-Link烧录盒分为隔离和非隔离,如果板子必须断电烧录,那么用非隔离的烧录(这个时候烧录器也会带电让STM32运行,某些DSP需要单独供电),如果板子需要上电烧录或在线调试,一般使用带隔离的ST-Link或JLink。2. 用ST-LIN...

2022-03-15 22:35:49 17902 2

原创 Keil中如何生成bin文件

1. 一般借助fromelf工具,安装好Keil后默认会在安装目录中找到fromelf工具。2. 一般在windows平台很难像Linux平台一样使用命令的方式启动格式转换,但是类似IAR,或Keil等带编译器的IDE,都会有编译选项,即编译器或编译后自动执行命令行。3. 在Keil中,首先配置输出文件,在Output选项中的Name of Executable是可执行文件名,这样就会生成my-first-prj.axf文件,后续会根据这个文件生成bin文件。4. 在User目录下,

2022-03-14 20:47:37 5379

原创 485通信要点

1. 双绞线485物理线缆跟CAN一样,使用双绞线,目的是抑制共模干扰2. 485芯片485可以理解为一个uart+方向控制,485属于半双工,同时只能发送或者接收,因此需要一根引脚控制数据方向,这跟引脚连接到485芯片,由芯片内部电路实现具体控制。3. 485收发切换注意,由于485芯片各个厂家的差异,响应速度也会不同,在通信时要根据物理层硬件特性和链路层协议不一样而合理地,实现收法切换延时。比如刚发送完不能理解切换到接收状态,要延时基本...

2021-10-30 10:25:17 3507

原创 嵌入式之状态机编程

干货 | 嵌入式之状态机编程干货~https://mp.weixin.qq.com/s/MhkwbO-CNaC7aGFLkgTq0A这篇文章描述了基本的状态机编程概念,感觉还可以。如果在搭上事件驱动框架,就可以写一个简单的RTOS了,这个OS可以作为一种不可剥夺型内核。...

2021-10-08 13:26:36 585

原创 联合体的妙用

1. 联合体的定义 联合体在C中比较常用,它不像结构体一样,每个成员占用各自的存储空间,相互不影响,它的所有成员占用同一段内存空间,修改一个成员影响其它所有成员。联合体的定义和使用与结构体一样。2. 联合体的应用(1)判断大小端union IsLittle_Endian{ int a; char c;};union IsLittle_Endian un;un.a =1;if(un.c == 1){ //小端}else{ //...

2021-10-08 12:15:08 1033

原创 C语言中位域

1. C语言中位域也叫位段,经常在STM32或DSP固件库中应用。ANSI C标准中规定,有下面三种数据类型可以用于位域,signed int 和 unsigned int 和_Bool。struct { unsigned int a:1; unsigned int b:2; unsigned int c:1;}abc;2. 上面声明建立了2个1位的字段,1个2位的字段。abc.a或c可以赋值为0或1,而abc.b可以赋值为0~3,因为它占两位。:冒号后面的数字用来限定成员.

2021-10-08 10:57:28 2032 1

原创 程序是怎么运行的

一个程序被编译后,生成汇编代码,被汇编器汇编后,生成机器代码,经过连接器链接成可执行程序后被烧录到flash中,链接地址可以理解为程序执行地址,PC指针一条一条地取指执行。 对于ARM处理器有两种指令,一种是32位的ARM指令集和16位的Thumb指令集,他们区别就是对一条可执行指令被编译成目标二进制后用16位表示还是32位表示。 CPU是从Flash取指执行程序的,数据会暂时存储在内存中,下面参考韦东山老师的两张图,能形象地说明:...

2021-10-07 18:02:41 471

原创 ARM-LINUX平台下的文本文件打印机打印

一、前言在前段时间构建打印系统的过程中,积累了一些打印相关知识,为实现上述目标也制定了计划,本文档就是计划任务具体实现的技术文档。分为如下几个部分:1. ARM-LINUX平台下实现文本文件打印方案。2. 上层服务软件的移植。3. 打印接口制作。 在计划最后,还准备实验佳能公司打印机,会编写单独的实验报告,本文档不会详细介绍。二、ARM-LINUX平台下实现文本文件打印方案根据前期工作,已明确使用Ghostscript...

2021-10-07 17:32:37 2513

原创 基于ARM处理器的U-BOOT详细移植总结

一个嵌入式产品的开发阶段,需要不断地把bootloader下载到存储器中,如果存储器使用nand flash,但是第一次里面什么都没有,所以只能根据处理器的启动方式从其他方式启动如sd卡或nor存储器启动,然后在SD卡或nor存储器启动的基础之上使用USB或网络接口把u-boot.bin先下载到内存中,然后再把内存中的内容写到nand中,但是写前4页时只能写每页的前2KB数据(对于OK6410开发板来说,处理器使用S3C6410处理器,nand使用每页4KB的存储器,当从nand启动时,处理...

2021-10-07 17:08:44 3518

原创 ARM处理器体系结构总结

CPU——核心,也可理解为MPU,而MCU微控制器表示包括CPU、片上外设(如存储器控制器)在内。处理器——可能包括多个CPU处理器系统——可能包括多个处理器一、处理器体系结构1. CISC –复杂指令集计算机 在CISC指令集的各种指令中,大约有20%的指令会被反复使用,占整个程序代码的80%。而余下的80%的指令却不经常使用,在程序中只占20%。代表有X86系列处理器。2.RISC—精简指令集计算机 RISC结构优先选取使用频最高的...

2021-10-07 16:35:23 2164

原创 安装桌面Linux系统总结

一、计算机的硬盘接口1 . IDE接口IDE接口的装置(硬盘或光盘设备)比较老,可以连接到IDE接口的装置都可称为IDE装置,不管是硬盘设备还是光盘设备。一般计算机都会提供两根IDE扁平电缆,每根电缆可以连接2个IDE装置,所以一台计算机最多可以连接四个IDE装置,如果已经有一个光盘设备,那么计算机就只能连接3个IDE硬盘。计算机上的两根IDE扁平电缆对应的接口被称为 IDE1(primary)及 IDE2(secondary),而每条扁平电缆...

2021-10-07 16:23:22 582

原创 基于Linux和4412处理器实现SPI接口的RF控制

本文介绍了基于4412(4核,cotex-A9)和Linux,基于SPI接口控制RF无线模块,代码和分析总结如下,便于以后查阅,只要是ARM-LINUX平台都可以参考:#include "spiRf2401.h"int spiOpen(void){ int spifd=0; spifd = open("/dev/spidev0.0", O_RDWR); if ( spifd < 0 ) { return -1; } else { return ...

2021-10-07 15:54:59 486

原创 Linux中List.h文件的分析和应用

本文介绍Linux中List.h文件,此文件中用双向链表实现了多种数据结构,比如队列,堆栈等,短小精湛,值得借鉴。此文件中还有哈希表的应用。

2021-10-07 12:04:39 2038

原创 线性表的链式存储结构(静态链表)

1. 静态链表的定义 首先要定义一个链表结点类型,为一个结构体,typedef struct spy { char *name; struct spy *next;}spy, *p_spy; 然后定义每一个结点,spy A = {"A", NULL};spy B = {"B", NULL};spy C = {"C", NULL};最后建立结点之间的链接,访问一个链表只需要一个头指针。 p_spy head = NULL; A.next = &B...

2021-10-07 11:20:59 300

原创 STM32串口(RS485)通信与技巧

一、概述1. STM32引入了同步异步串口USART,但一般不使用同步功能,只用异步功能,同步和异步详见本博客:https://blog.csdn.net/fengel_cs/article/details/1052006632. 由于STM32时钟系统还未总结,对串口波特率等详细讲解暂无说明,但可以看一下博文https://blog.csdn.net/fengel_cs/article/details/105995214,知道波特率与bit传输关系。3. 由于RS485基于uart通信,这里会提到4

2021-09-20 11:43:38 8377

原创 简单密码破解

简单密码破解与加密一总结最近在牛客网上遇到的关于密码相关加密算法,便于日常使用,要求描述如下:密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。假设渊子原来一个BBS上的密码为zvbo9441987,为了方便记忆,他通过一种算法把这个密码变换成YUANzhi1987,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。他是这么变换的,大家都知道手机上的字母:

2021-03-08 09:45:02 333

原创 gets与scanf与EOF

一、gets(str)1.从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。2. 返回值,如果读入成功,返回与str相同的指针,如果遇到错误或EOF则返回NULL3.gets不是安全函数,在linux下fgets才是安全的函数二、scanf()1. 函数返回成功读入的数据项数,读入数据时,如果遇到错误或遇到end of file,返回值...

2021-03-02 21:55:33 1613

原创 CPU如果通过地址总线、译码器、片选、数据总线等与外设通信

无意总看到了这篇文章,这篇文章简单介绍了cpu及其外设之间通信过程,比如地址总线作用,译码器,数据总线,片选等,读了后对嵌入式外设寄存器控制,编址等有启发。https://mp.weixin.qq.com/s?__biz=MzAxNTAyOTczMw==&mid=2649329628&idx=1&sn=f97aa44f1575b7599fff5699ce736d2b&chksm=83976b56b4e0e240cd93612c781e0e2fd381a8743673325

2020-09-10 10:35:59 1234

原创 CAN总线的拓扑、Bus Off、仲裁机制、邮箱

一、CAN总线具有严格的错误诊断功能,该功能已经固化在芯片中,一旦错误被检测,正在传送的数据帧将会立即停止而待总线空闲时再次重发直至发送成功,该过程并不需要CPU的干涉,除非错误累计该发送器进入总线关闭(Bus Off)。二、CAN总线bus off一般发生于外部干扰,比如汽车逆变器交流参数的干扰。处于总线关闭状态的节点不允许发送和接收任何形式的帧报文。且只能通过用户请求进行恢复。方案如下:1. 软件上,复位CPU或CAN控制器是最简单的处理方式,但是为了让系统恢复,一般当发生CAN总线关闭时,可

2020-08-03 09:55:53 3711

转载 太厉害了,终于有人能把TCP/IP协议讲的明明白白了!

从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议群的统称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。一、 计算机网络体系结构分层计算机网络体系结构分层:计算机网络体系结构分层:不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议.

2020-06-10 09:31:59 487

原创 Keil5编辑器字体、背景颜色修改

1、“Edit”--->“Configuration”--->“Color & Fonts”2、“C/C++ Editor files”,将所有元素的背景色“Blackgound”,都改为红(30)、绿(30)、蓝(30):3、然后更改每个元素前景色:  Text,默认文字,红220、绿220、蓝220;  Number,数字,红255、绿0、蓝0;  Operator,操作符,红255、绿0、蓝255;  Block Comment,Line Com..

2020-06-07 18:24:19 9922 5

原创 边缘计算设备连入云端方案(以阿里云IOT的iot studio服务开发为例)

1. 设备端支持TCP/IP协议栈,便于建立TCP连接。关于TCP的OSI七层协议相关概念: https://blog.csdn.net/mccand1234/article/details/515908042. 设备端需要支持MQTT应用层协议,MQTT相关概念: https://blog.csdn.net/wzhqazcscs/article/details/79603261 如果是ARM-LINUX平台,可以安装基于Python3的库实现MQTT的支持。如果是S...

2020-05-22 16:58:33 807

原创 Modbus协议通信要点

1. Modbus相关概念,网上一大堆,可以参考外文网站http://www.simplymodbus.ca/TCPclient.htm2. Modubs协议属于数据链路层协议,即在物理层基础之上实现原始比特的可靠传输。比如物理层的通信媒介为485,那么原始比特传输一般是1个起始位,8个数据位,2个停止位,有无校验位都可。为了实现可靠传输,需要数据链路协议收发帧。3. Mod...

2020-05-08 14:03:38 1395

原创 RS485通信(Modbus)丢包解决经验(基于ARM/Linux和STM32平台)

1. RS485通信属于半双工通信,即发送和接收不能同时进行,需要切换,一般定义一根GPIO做RTS切换。2. ARM-Linux平台有Linux底层驱动做自动切换,比如应用程序发送完成后,一般会在底层驱动自动切换接收。3. 但是STM32平台基于UCOS系统,如果发送完数据后,接收切换不及时就会导致接收到的数据不完整,一般是都数据帧前面几个字节。举例:比如mosbus的链路通信,如果...

2020-04-30 10:08:02 11640 1

原创 C开发经验

1.IAR中,函数指针参数如果为void,那么定义函数指针和函数实体时也要写上void,否则编译会报错。2.对多个源文件,如果a文件要访问b文件的函数指针而调用b文件中的函数,前提是b文件的这个函数指针在b调用之前,要在a中定义和声明,否则会出现系统卡死的问题,因为调用一个未初始化的函数指针,系统不知道掉到哪里去了。也有个办法就是调用的时候判断是否为NULL。 还有就是在定义结构...

2020-04-24 17:00:22 623

原创 UcosII时钟系统

1. 系统时钟中断服务函数为 OS_CPU_SysTickHandler函数,多久一次触发中断而调用这个函数却决于系统时钟配置。2. OS_CPU_SysTickHandler函数中会自增变量,实现RTC实时时钟和时间管理,比如1ms进行一次系统时钟中断,那么1000次后,RTC就增加1秒。3. OS_CPU_SysTickHandler()->OSTimeTick()函数中会给计数...

2020-04-24 16:53:39 3284

原创 同步/异步,串行/并行,SPI/I2C/UART/RS485/CAN等简单介绍与区别

一、异步通信1. 所谓异步通信是指数据传送以字符为单位,字符与字符间的传送是完全异步的,位与位之间传送基本同步。2. 发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。3. 以字符为单位传送信息。4. 相邻两字符间隔长度不确定。5. 必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。6. 异步通信时不要求...

2020-03-30 15:41:12 9264 3

转载 除法、求余和取模的区别

C中经常遇到不同平台代码移植,移植过程中,不同语言或不同平台对除法、求余和取模处理是有区别的,这里找了一篇比较清晰的介绍除法、求余和取模的区别文章。一、除法运算符"/"二元运算符,具有左结合性。参与运算的量均为整型时,结果为整型,舍去小数。如果运算量中有一个为实型,结果为双精度实型。例如:5/2=2,1/2=05/2.0=2.5二、取余、取模运算符"%"通常情况下取模运...

2020-03-27 14:42:47 3302

原创 Linux应用中用backtrace和memory map信息定位段错误代码的方法

Linux内核出现段错误,会打印出栈信息(dmesg命令可以看到这些信息)。linux中Oops信息的调试及栈回溯(sù),http://blog.csdn.net/u012839187/article/details/78963443。Linux core 文件介绍:https://www.cnblogs.com/dongzhiquan/archive/2012/01/20/2328355.h...

2020-03-27 14:33:21 1601 1

原创 数据结构知识点(链表、递归、树图)

1. 数据结构与算法一个可执行的程序分为数据的存储,数据的操作,能被计算机识别的程序语言。数据的存储分为个体的存储和个体与个体关系的存储,个体的存储可以忽略(比如存储器存储),个体与个体关系的存储即数据结构,个体与个体关系存储不一样,数据的操作也就不一样(泛型除外)。数据的操作也就是算法,算法分为狭义算法和广义算法,狭义算法是与数据的存储方式密切相关;广义算法与数据的存储方式无关,比如...

2020-03-21 17:02:36 642

原创 typedef和define的区别,const的使用

(1)#define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不管含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错;而typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名。 (2)typedef int * ptr与#define ptr int *的区别:作用都是用ptr代表int * ,但是二者不同...

2020-03-21 16:59:37 135

原创 STM32编译后程序的Flash与RAM与Stack占用情况分析

对于STM32编译后,可以在Option->Linker->List中的Generate linker map file打上勾,这样编译后就会生成xxx.map文件。通过分析此文件,我们可以分析STM32编译后程序的Flash与RAM占用情况,还可以得到程序中所有符号表的地址,总这个文件就像Linux内核的System.map文件一样非常有用,里面描述程序映像的结构。(1...

2020-02-25 15:51:18 1931

原创 串口通讯/485/232

1. uart232/485、I2C、SPI等都是串行通信.2. Uart与Usart,Uart是通用异步收发器,而Usart是通用同步异步收发器。 这里说的异步即一个数据包与另外一个数据包是异步的,通信双方在完成一包后并不知道下一包什么时候到,包与包之间没有固定间隔,但是包内的数据位(也包括起始/停止位、校验位等)是同步的,它们的间隔是固定的。 同步即一帧数据里面包含多包...

2020-02-18 18:06:45 359

原创 uCOS-II系统概述

1. 关于RTOS系统 UCOS系统属于RTOS操作系统,FreeRTOS也属于RTOS操作系统。2. 前后台系统 以前编写裸跑程序时,main里面一个循环和ISR构成一套程序,也统称为前后台系统,前台程序就是ISR中断服务程序,后台程序就是main函数里面的程序,后台程序可以被前台程序打断。3. 实时性 UCOS系统属于实时操作系统,实时分为硬实时和软实时,...

2020-02-13 18:23:01 1700

原创 STM32在线调试、看门狗、跑飞调试

1. STM32的调试模式 对于STM32的CPU,支持调试模式,即CPU可以被暂停,用户可以在CPU暂停后查看寄存器或变量的状态。2. 在线调试工具 由于版权问题,JLink调试工具渐渐淡出,现在大部分使用ST-Link,它与JTAG调试方式兼容,虽然JTAG要比ST-Link快,但是JTAG要用到多个引脚,ST-link只需要3根线。3. 调试准备 首先...

2020-02-11 20:38:41 7768 1

原创 STM32架构及最小系统

1. STM32F4系列使用ARM架构的ARMV7-ME架构,属于Cotex-M4系列,支持浮点运算单元FPU和DSP指令。2. 与ARM Cotex-A8是支持MMU的处理器相比,Cotex-M4不能支持带虚拟内存的操作系统比如Linux,但是M4支持MPU即内存保护单元,一般用于对UcosII系统代码的保护。另外,M4具备功耗更低的优势。3.STM32最小系统包括: (1)...

2020-02-04 18:35:17 873

机器学习实战,中英文两个pdf文档,并附书籍源代码

机器学习实战,中英文两个pdf文档,并附书籍源代码。非常好的学习资料,方便大家作为书籍资料查阅。

2017-11-15

Linux源码List.h文件详细分析(链表、队列、堆栈、哈希表等)

对Linux内核源码中list.h文件自己分析总结,主要是一些双向循环链表的操作及一些数据结构的实现,方便借鉴引用。

2017-11-15

冒泡排序 排序

冒泡排序 排序

2016-08-18

清理iTunes中的“其他”很有效-iPhone

清理iTunes中的“其他”很有效-iPhone 文档很仔细,可以试一试。

2016-06-18

uboot移植手册 非常全 70多页

uboot移植手册,可以参考参考,非常有用的!

2014-06-13

uboot如何支持6410 SD卡启动

uboot如何支持6410 SD卡启动,

2014-06-13

uboot的启动参数介绍

uboot的启动参数介绍, bootcmd 和bootargs,可以参考参考,非常有用的。

2014-06-13

Uboot是如何启动内核的

详细描述,Uboot是如何启动Linux内核,难得的好资源,大家可以参考参考有帮助的。

2014-06-13

u-boot顶层makefile、mkconfig、config.mk文件分析

此手册自己总结的,网上找不到第二份,除非拷的我的。u-boot1.1.6版本顶层makefile文件、mkconfig文件、config.mk文件分析,会对执行make ..._config后的过程进行详细分析,看完这个,移植u-boot决定没问题,至少有个好的开始。如果要后面的移植或u-boot2012版本的说明,可以联系我。

2014-06-13

source insight中汉字改进与函数调用关系设置

source insight中汉字改进与函数调用关系设置

2013-09-02

FPS200指纹传感器中文手册

FPS200指纹芯片手册,翻译的英文手册,开发时够用了。

2013-08-13

空空如也

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

TA关注的人

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