STM32
随想ustb
相信自己,改变自己
展开
-
EFSL文件系统移植记录
在使用SD卡的过程中用到了文件系统,这里选择了efsl,并做了相应的移植与验证。 efsl全称为embeded file system library,是一个开源的SD卡文件系统,所占内存空间少,移植起来比较方便,适合中小容量的单片机。efsl兼容fat12/16/32,同时支持多设备及多文件操作。每个设备的驱动程序,只需要提供扇区写和扇区读两个函数即可。 efsl原创 2012-07-03 21:28:33 · 13018 阅读 · 1 评论 -
基于TCP的STM32 IAP bootloader初步设计
基于TCP的STM32 IAP bootloader初步设计Daniel_USTB 2015-8-22夜 好久没有写东西,前段时间发生了不少事情,现在终于能静下心来。停下脚步望望曾经的自己,一路走来,对技术的坚持是多么的可贵。人的时间是有限的,作为一个嵌入式工程师,对新技术的热爱和好奇心将产生前进的驱动力。至于可以达到怎样的高度,全看个人的执行力和自我约束,兴趣常常是最好原创 2015-08-23 00:29:53 · 3646 阅读 · 8 评论 -
[STM32/8经验] STM32 USB数据接收与数据发送
在STM32的USB设备通信中,难度较大的还应是USB通信协议部分,但是这部分代码却并不是需要我们这些嵌入式工程师去实现,USB通信协议的内容已经交由STM32 USB-FS-Device Lib库实现,我们只要去关心具体的发送和接收函数在什么地方就可以了,而在初学阶段不必过多的关心USB协议的组成。 在usb_endp.c中,我们拿EP1_OUT_Callback()函数分析。转载 2015-09-21 17:18:21 · 12773 阅读 · 0 评论 -
STM32中断优先级彻底讲解
一:综述STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢占优先级最多可以有四位数)。二:优先级判断STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这转载 2016-01-24 00:35:44 · 1152 阅读 · 0 评论 -
STM32低功耗模式实践
STM32低功耗模式实践 STM32一共有三种低功耗模式,睡眠模式、停止模式以及待机模式。 其中,睡眠模式时内核停止运行,但外设仍在工作,所有外设的时钟不会被关闭。 停止模式,除了Cortex-M3内核停止外,所有外设时钟也被关闭,可以选择使能内部时钟,SRAM和寄存器内容被保留,IO口保持为进入睡眠前的状态。 待机模式时,所有1.原创 2016-01-28 09:28:31 · 8515 阅读 · 1 评论 -
stm32学习之NOR flash和NAND flash区别,RAM 和ROM区别
要点:NOR FLASH和NAND FLASH的主要区别,常用英文缩写、SSDROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。 RAM 有两大类,一种称为静态RAM(Static转载 2016-01-14 12:05:05 · 6324 阅读 · 0 评论 -
STM32 内存分布探究
STM32 内存分布探究2016-2-2 本人在运行ucos时遇到一个非常奇怪的问题,运行一段时间后就会莫名进入hardfault函数,导致系统死机。后来根据对堆栈调试,发现每次调用的函数都不一样,甚是费解。通过map文件最后得出结论,原来在系统初始化的时候在flash里面读出了系统配置参数,在系统运行过程中会写flash,而flash定义的地址与程序代码存储的位置发生了重叠,一写原创 2016-02-02 17:39:34 · 3304 阅读 · 0 评论 -
栈回溯技术arm_v5t_le版
栈回溯技术arm_v5t_le版From:韦东山 2007.04.03栈回溯技术及uClibc的堆实现原理.doc1. 前言段错误、非法地址访问等问题导致程序崩溃的现象屡屡发生,如果能找到发生错误的函数,往往一眼就能看出BUG所在——对于这类比较简单的问题,比如使用空指针进行读写等,利用栈回溯技术可以很快定位。但是对于数组溢出、内存泄漏等问题导致的程序错误,往往隐藏很深,它们并不当场发作,即转载 2016-03-05 12:29:38 · 1782 阅读 · 0 评论 -
C语言编写log文件以及printf函数实现原理
C语言编写log文件以及printf函数实现原理 在系统调试中通过在文件系统里写log日志是一个长期分析系统运行的好方法。做系统调试应该养成这个习惯,可以方便的监控系统可能出现的各种异常。 今天学习下log日志的书写方法。Log一般可以分为以下4种: ERROR(错误):此信息输出后,主体系统核心模块正常工作,需要修复才能正常工作。 WA原创 2016-04-10 21:54:50 · 5403 阅读 · 0 评论 -
嵌入式系统内存使用情况评估方法探究
嵌入式系统内存使用情况评估方法探究Daniel 2016-7-22 有一段时间没有写过博客了,这段时间抽空做做记录。总结和记录是对知识最好的回忆与升华。 这段时间遇到MCU程序总是莫名奇妙的跑飞,插上仿真器这样的现象又不会出现,多次怀疑与内存大小有关,但如何才能知道运行中的程序内存的占用情况呢?是不是堆栈使用太多超出了设定的范围? 所有的疑问最终原创 2016-07-22 17:26:03 · 1637 阅读 · 0 评论 -
以太网串口双向透传网关设计要点记录
以太网串口双向透传网关设计要点记录2015-10-15 (1)以太网到串口数据的双缓冲机制+双DMA机制 解决收发数据速度不匹配问题 在以太网到串口双向透传数据的开发都会遇到如何处理收发速度不匹配的问题,处理不好,很容易造成丢包.开始时在串口转TCP/UDP这个方向上,串口使用DMA循环缓冲区来接收,TCP/UDP定时轮询发送,这样没什么问题.在收到TCP/UDP一包数原创 2015-10-15 17:20:07 · 7058 阅读 · 0 评论 -
uIP调试之ping、arp与死机
话说博主我这几天被uIP整的可以说焦头烂额,出了不少问题,在此小结一下。 也是最近一个月才接触使用stm32+DM9000AE组成的百兆网络,与之前enc28j60比起来算是高大上了。uIP在实现TCP server、TCP client、UDP server、UDP client等很方便,一个月前做了块数据转换的板子,使用了一个UDP client,连上电脑OK,没问题,可以原创 2014-03-19 22:27:35 · 5474 阅读 · 0 评论 -
uIP TCP Server 运行机制分析
uIP TCP server 运行机制分析DanielLee_USTB2013.9.22 对于任何一个协议栈而言,首先要实现的就是TCP server,下面看看uIP的运行机制: ①IP地址以及端口的绑定 uIP在初始化时进行了本机地址IP地址的默认初始化,并将其存放在一个名为uip_hostaddr的结构体中,本机原创 2013-09-22 20:07:25 · 6168 阅读 · 2 评论 -
Canopen通讯规范DS301_V4.02学习研究——前6章基础知识
从今天开始学习CANopen的DS301通讯规范,踏上研究CANopen的征程。 翻开文档目录,主要讲解了定义和缩写、模型、物理层、数据链路层、以及应用层以及实现CANopen的一些建议,那么从最基本的看起。 前面的跳过直接看第五章定义和缩写,其中 ARQ:自动重复请求 CAN:控制器现场局域网 COB:通讯原创 2013-04-25 00:49:24 · 11658 阅读 · 0 评论 -
IAP 远程升级设计实现
http://blog.csdn.net/l545045612/article/details/7892591仔细研读。转载 2015-08-06 11:34:09 · 1433 阅读 · 0 评论 -
[经验] 基于Xmodem的STM32的IAP升级【转】
转自:http://www.eeboard.com/bbs/thread-36238-1-1.html实验平台:windows7 + STM32F103ZET6实验目的:你不需要任何烧录工具,就可以对你的产品进行远程升级代码!1. Xmodem协议简介2. IAP编程原理3. Boot与App程序设计4. 实验步骤5. 远程升级应用1. Xmodem转载 2015-08-03 18:31:08 · 3226 阅读 · 1 评论 -
STM32 USB HID设备驱动分析
STM32 USB设备驱动分析DanielLee 2014-9-29一、USB的设备描述符分析USB的设备描述符用以下结构定义:Device_PropertyDEVICE_PROP Device_Property ={CustomHID_init,CustomHID_Reset,CustomHID_Status_In,CustomHID_Status_Out原创 2014-09-29 16:04:45 · 7702 阅读 · 0 评论 -
GM8125串口拓展应用
在远程抄表的设计中因串口资源不足,使用了GM8125串口拓展的解决方案,功能类似于某公司生产的多路232、485拓展卡。 GM8125最大的特点就是收发数据互不干扰,波特率、数据长度可设置, 可以将一个全双工的标准串口扩展成5 个标准串口,并能通过外部引脚控制串口扩展模式:单通道工作模式和多通道工作模式。手册上说即可以指定一个子串口和母串口以相同的波特率单一的工作,也可以让所有子串口在母串口波特率原创 2012-07-03 19:54:43 · 4951 阅读 · 1 评论 -
STM32使用概述——远程抄表系统设计
在给导师的项目中首次用STM32设计了远程抄表系统,STM32是ST公司一款主频为72MHz的32位单片机,以其强大而方便函数库获得了无数开发者的青睐。根据性能不同可以分为从101-107Tx\Cx\Rx\Vx\Zx几个系列,丰富的外设资源、可达512K的flash容量以及越来越低的价格,以后将可能完全取代8位单片机。 1.选型 远程抄表系统以RS232以及RS485原创 2012-07-03 00:28:50 · 5241 阅读 · 0 评论 -
关于CH376拷贝U盘文件速度的测试比较
测试目的,实验在使用CH376对U盘内文件进行拷贝,测试拷贝速度。 实验条件,STM32103VC(内部64KRAM,256Kflash),72Mhz,SPI 18Mhz,CH376,测试文件:MODBUS.PDF, 文件大小366 KB 测试1:字节方式读写CH376ByteRead,CH376ByteWrite,RAM缓存大小char buf[640];原创 2013-03-27 17:04:50 · 4994 阅读 · 0 评论 -
S29GL128P Norflash驱动读写分析
S29GL128P Norflash驱动读写分析2014-2-25 S29GL128P是在嵌入式系统中经常可以见到的一款Norflash芯片,存储结构为128(sectors)X128(Kbytes)=16Mbytes,支持CFI接口,有幸在项目中用到,就简单讨论下其操作原理。 一、硬件连接 S29GL128P与STM32F407之间原创 2014-02-26 11:03:27 · 17205 阅读 · 5 评论 -
笔试面试之程序内存布局
笔试面试之程序内存布局转自http://blog.csdn.net/hycoyhuyu/article/details/8068460小菜最近在笔试的时候老碰到内存分布的题型,今天详细的查阅了相关资料,对内存分布、堆和栈进行总结(以C语言为例)。C程序的内存分布主要分为五个段:1.代码段(text segment):用于存放机器指令,该部分可以被多个程序共享转载 2014-02-28 11:44:55 · 1386 阅读 · 0 评论 -
uIP的web服务
转自程序使用了作者写的webserver的demo程序,添加了相应的注释。说一下整个web服务器实现的流程。uip的web服务的回调函数是/webserver/httpd.c中httpd_appcall(void)。接着进入了handle_connection函数。static voidhandle_connection(struct httpd_state *s){ ha转载 2014-07-07 15:48:58 · 5236 阅读 · 1 评论 -
常用字符串解析与处理方法
常用字符串解析与处理方法DanielLee2014-9-25 工作一年多来,发现经常会用到字符串的解析与处理,比如编写路由器控制软件时,要对路由器返回的命令进行解析;对GPS注册网络时要进行命令的组合与返回值的判断;采集北斗数据时,要从标准GGA、GSA、RMC等协议中分类参数等等,其实都是如何处理字符串的问题,把字符串处理好,可以很容易的处理命令的交互。一、字符串中变量提原创 2014-09-25 15:35:46 · 11897 阅读 · 0 评论 -
STM32独立看门狗IWDG与窗口看门狗WWDG研究
STM32独立看门狗IWDG与窗口看门狗WWDG研究DanielLee_USTB 2014-9-251. 看门狗介绍 看门狗这东西虽然简单,但我相信绝大多程序员没有足够重视它。使用看门狗保证系统正常运行是非常有必要的。我们在设计产品时,代码以及硬件设计缺陷或是外界电磁干扰都有可能使系统死机,如果不能正常对其进行复位,系统的可靠性将大打折扣。看门狗分为软件看门狗原创 2014-09-25 14:47:29 · 13850 阅读 · 0 评论 -
malloc()和calloc()区别 以及memset()
malloc()函数用来分配内存:将总共需要的字节数作为参数传递给该函数,返回值是指向最新分配的内存的指针,而如果内存没有分配好,则返回值是NULL。malloc()的使用方法some_type *pointer; pointer = malloc(count * sizeof(*pointer));注:(1) 这个方法保证malloc()会分配正确数量的内存,而不用考虑pointe转载 2012-05-24 09:21:28 · 1792 阅读 · 0 评论