
嵌入式
cyang812
https://cyang.tech
展开
-
STM32 延时函数解析
一、函数原型STM32官方提供的函数库中,可以找到类似于 HAL_Delay() 这样的函数。这个函数的就是通过使用定时器,达到一个较为精确的时间延迟,提供给用户调用。这个函数一般包含在类似于 stm32f4xx_hal.c 这样的函数中。函数原型如下:__weak void HAL_Delay(__IO uint32_t Delay){ uint32_t tickstart = 0U;原创 2017-02-28 15:29:23 · 30068 阅读 · 2 评论 -
Quartus II 版本问题解决方案
问题1: 在做一个项目时,发现该项目(主要才用原理图设计)可以在Quartus 9.0版本上编辑,但是无法编译通过,表现在会提示一个弹窗的错误,选择no可以继续进行,结束时也没有提示error,但是并没有正常编译通过。因此也就无法进行modelsim仿真,表现为每一次modelsim的结果都是一样的。 解决方案: 此时将整个项目关闭,用11.0版本打开,不要修改,直接编译就可以通过原创 2016-05-12 12:50:28 · 6669 阅读 · 0 评论 -
芯邦主控的U盘量产教程
今天同学U盘坏了,具体的情况就是不能存储文件,可以识别可以打开,就是存进去的东西拔下来再插进去就不在了。解决方法: 使用芯片精灵和量产工具轻松搞定。 1. 首先,用芯片精灵检测U盘主控芯片型号。 由图可知,主控为芯邦型号2198A。接下来去网上搜索这个型号的量产工具。 2. 量产工具如下图,免安装。插入U盘后,软件自动识别。点击全部开始,等待进度条结束即可。原创 2016-04-08 20:40:06 · 11506 阅读 · 0 评论 -
Quartus 13.0安装教程
1.首先,进入ALTERA官网这里是网址2.选择合适的版本,这里我按器件来选。选择的是Cyclone II芯片对应的软件版本。3.选择下载方式,以及所需的文件。4.接下来会需要登录你的ALTERA账号。如果没有的,用邮箱注册一下就好,很方便的。5.如果使用直接下载的话,下载后会是几个分离的文件。点击QuartusSetupWeb-13.0.0.156进行安装。6.安装时间需要很久。安装可能会出错,就原创 2016-04-08 20:35:35 · 15903 阅读 · 3 评论 -
文件转换为C数组 fileToC
fileToC简单说明fileToC 是一款使用 python 编写的程序,可以将任意文件的二进制数据转换为 .C 文件的数组,以便程序编译。双击 fileToC.exe 程序,将要转换的 test.any 文件拖入命令行,等待程序自动转换,结束后便可以得到一个和该文件同名的 .c 文件结果如下:test.any 文件的二进制数据分析这款程序的使用场景是当我们编程时...原创 2018-05-18 13:25:27 · 3213 阅读 · 2 评论 -
前导零计数
前导零计数计算一个 32位 数头部 0 的个数。例如 1 前面有 31 个0, 0 则前面有 32 个0。C 语言实现int cntLeadingZeros(uint32_t i){ int ret = 0; uint32_t temp = ~i; while(temp & 0x80000000) { temp <<...原创 2018-08-02 18:03:06 · 8465 阅读 · 1 评论 -
MPEG Audio 简述
MPEG AUDIO 简介MP3 是 MPEG Layer3 音频压缩技术的简写,这种技术可在音质极少损伤的情况下获取更好的压缩性能。MP3文件可以被压缩成不同的速率,文件压缩的越小,音质损伤越大。标准的压缩比例为10:1,一段3分钟的音频数据压缩后只需4MB大小。MPEG 音频压缩算法由联合图像专家组开发,作为高质量数字音频数据压缩的国际标准。MPEG-1 音频压缩算法基于两种机理来减少...原创 2018-08-12 16:16:48 · 5045 阅读 · 0 评论 -
j-link v9 修复记录
j-link v9主控: stm32f205RC现象1、给 M0 下载固件的过程中经常出错,提示找不到M0。需要反复尝试很多次才可以下载。2、在一次正常的拔线断电后,再也无法识别,灯也不亮了。修复方法1、准备另一个可以使用的 j-link。这里使用的就是这种只有四根线,只支持 SWD 的 j-link OB。2、拆开坏了的 j-link v9, 可以看到 PCB ...原创 2018-09-13 12:05:46 · 8830 阅读 · 6 评论 -
汇编文件从 keil 移植到 IAR
1、修改段和区域的写法系统段和区域在 ADS 下定义为 AREA,在 IAR 下定义为 RSEG,因此需要做如下更改。keil 下的写法AREA |.text|, CODE, READONLY, ALIGN=2IAR 下的写法RSEG CODE:CODE:NOROOT(2)2、修改 RN 伪指令在 ADS 中,可以使用语句 name RN Rn 来给 寄存器 Rn...原创 2018-10-19 10:38:19 · 1750 阅读 · 0 评论 -
IAR开发STM32堆栈设置
一、前言关于堆栈的定义在此就不赘述,详细内容可以看这篇博客。堆栈溢出会导致野指针,返回地址错误等问题,通常程序已经无法正常运行,进入 HardFault 异常中断。为了避免这种情况,一般会分配较大的空间用做栈,可是如果仅仅为了安全就分配大空间的栈势必导致内存浪费。本文介绍两种获取栈最大消耗的方法,以方便合理设置栈的大小。二、方法1、方法一栈指针 SP 指向的位置可以反应出当前栈的消耗量。...原创 2018-10-25 22:28:12 · 3676 阅读 · 0 评论 -
1602显示一排黑
今天在做频率计时候出现的问题。由于之前已经做出一块可以实现正常功能的板子,再做一块就没怎么注意细节。毕竟原理很简单,而且电路模块也不多。而出现的问题就是1602显示上面一排黑。这样的情况之前也有出现过。大概就是单片机没有给1602输出,或者输出有问题导致的。一般就是从单片机的P0口输出的电平的问题,比如两天线短路了。这样的问题之前是有出现过,然后用万用便检测一下,再重新焊接处理一下就可以解决这个问题原创 2016-06-08 00:13:41 · 9635 阅读 · 7 评论 -
安卓手机蓝牙控制智能小车 android程序设计
项目名称: 安卓手机控制智能小车本文主要介绍手机端程序设计源码托管在地址:github.com/cyang812/Bluetooth_Car 开发平台 :win10; 开发软件:Android Studio 2.1在开发的过程中,软件版本有过几次更新,本文重点讲述更新逻辑及实现过程。一、Bluetooth_Demo(通过按钮控制)1、这是最早开发的版本,通过连接蓝牙后,可实现通过按钮(B原创 2016-06-10 19:21:11 · 31281 阅读 · 22 评论 -
IAR DLIB Library heap usage statistics IAR heap 分析
翻译自 IAR Technical Note 28545 《IAR DLIB Library heap usage statistics》 update 2017/9/22介绍关于堆的描述在《IAR C/C++ Development Guide for ARM》的 Dynamic memory on the heap 一章中。本技术手册仅描述在应用程序中如何统计堆的使用量。通过跟踪 malloc原创 2018-01-03 20:47:56 · 1369 阅读 · 0 评论 -
掌控堆栈确保系统稳定 IAR技术手册翻译
翻译自 IAR 技术手册堆和栈在嵌入式系统中是非常基础的概念。正确设置堆和栈的大小对于系统的稳定可靠非常重要。不正确设置时,系统可能会以某种非常奇怪的方式崩溃而造成灾难性的后果。堆和栈的大小必须被程序员设置。通常情况下计算栈使用量都是非常困难的,但是在小型嵌入式系统中却比较容易,并且理解栈的使用也可以解决一些很难发现的运行时错误。另一方面,给栈分配过多的空间也意味着对内存资源的浪费。对于大翻译 2018-01-06 16:23:57 · 1387 阅读 · 0 评论 -
I2C Bit-Bang 程序分析
一、Bit Bang关于 Bit Bang 的解释:Use software to control serial communication at general-purpose I/O pins,简单来讲就是使用软件通过 IO 脚去实现 I2C 的时序从而使用 I2C 协议进行通信。这样做的好处是可以突破硬件上的限制,例如芯片不具有硬件 I2C 模块,或者硬件 I2C 模块损坏,又或者使用硬件 I原创 2017-03-16 18:31:25 · 4617 阅读 · 0 评论 -
FatFs 使用中文长文件名
一、说明 使用长文件名,一般会是在使用 f_readdir() 这个函数时碰到,这个函数的功能就是获取上一步使用 f_opendir() 打开的文件夹中的内容,并将文件信息保存到定义的结构体。结构体内容如下, 里面包含有文件大小,上一次修改日期,文件属性,文件名等。可见,普通文件名是存在一个 fname[13] 的数组里的,这就使得长文件名无法正常显示。而长文件名是一个指针,这个指针指向的数原创 2017-02-24 13:41:06 · 5099 阅读 · 2 评论 -
f_open()使用错误记录
一、现象调用函数 f_open() 后,程序崩溃,调试后发现,单片机产生硬件中断,即软件跳入如下部分:void HardFault_Handler(void){ /* Go to infinite loop when Hard Fault exception occurs */ while (1) { BSP_LED_Toggle(LED3); }}...原创 2017-03-10 18:48:23 · 6275 阅读 · 3 评论 -
BCM2835 芯片数据手册(中文翻译)
1 前言1.1 概述BCM2835 具有以下可以被 ARM 安全使用的外设:定时器中断控制器GPIOUSBPCM/I2SDMAI2C 主机I2C/SPI 从机SPI0,SPI1,SPI2PWMUART0,UART1本数据手册旨在对这些外设的细节进行描述,以方便开发者对该芯片移植操作系统。有一些被 GPU 控制的外设将不会出现在本数据手册。不推荐从 ARM 访问这些外设。1.2翻译 2016-12-08 19:11:14 · 34831 阅读 · 0 评论 -
关于嵌入式系统的学习路线图
来源:本文乃同济大学软件学院王院长(JacksonWan)在同济网论坛发表的帖子《谈谈软件学院高年级同学的学习方向》的第二部分。三部分依次为:一、关于企业计算方向;二、关于嵌入式系统方向;三、关于游戏软件方向。嵌入式系统方向嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏转载 2016-12-06 11:57:24 · 771 阅读 · 0 评论 -
大端模式转小端模式
大端模式转小端模式一、大端模式与小端模式 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分原创 2016-11-11 09:49:27 · 2352 阅读 · 0 评论 -
static __inline 在IAR和keil开发环境下的差别
本文同步至个人博客:cyang.techstatic __inline这条语句在IAR和Keil下的需要写成不同的形式,否则会报错。 如下: 1、IAR错误 2、IAR正确 3、Keil错误 4、Keil正确 总结就是,在IAR环境下,需要写成static inline,而在keil环境下,需要写成static __inline原创 2016-10-29 18:58:19 · 8413 阅读 · 5 评论 -
修复 j-link "the connected j-link is defective" 警告
一、现象j-link ob 提示 “the connected j-link is defective” 警告,每次下载都需要点击确定关闭,另外单步调试经常死机。二、解决方法参考这篇帖子。具体就是修改 IAR 安装路径下的 JLinkARM.dll 文件。路径为:D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\arm\...原创 2018-12-20 17:35:24 · 33515 阅读 · 8 评论