嵌入式系统
文章平均质量分 82
liyuanbhu
这个作者很懒,什么都没留下…
展开
-
Freescale 9S12 系列单片机应用笔记(ECT 模块) 1
9S12 系列单片机的ECT (Enhanced Capture Timer Module)模块是在原68HC12 的 Standard Timer module 基础上加以增强功能形成的。ECT 模块主要由以下几部分组成,参看图1:一个带可编程预分频的16位向上计数的自由运行计数器8个独立的定时器通道,每个通道具备输入捕捉/输出比较功能4个8位脉冲累加器,也可设置成2个16位脉冲原创 2012-06-02 21:12:03 · 7812 阅读 · 3 评论 -
DataFlash 驱动代码小议
最近比较闲,有时间把以前的一些想法实现出来了。Atmel 的DataFlash 我自己没有用过,不过公司的好几个项目中都用到了。我没事时也去翻看过别人实现的代码,感觉实现的功能都太基本,使用起来不方便,因此就趁着最近空闲将这部分代码改造一番了。DataFlash是美国Atmel公司新推出的大容量串行Flash存储器产品,采用NOR技术制造,采用SPI接口进行读写,内部页面尺寸较小,8Mb容量的原创 2012-11-10 22:11:59 · 4953 阅读 · 0 评论 -
STM32F10x 学习笔记 2 (SysTick 定时器)
SysTick 定时器被集成在NVIC中。因此,只要是Cortex-M3 内核的单片机,就都有它。这个学习笔记就用SysTick 定时器来实现走马灯的功能。SysTick 定时器非常简答,只有四个寄存器。这四个寄存器的含义在《Cortex-M3权威指南》那本书中讲的非常的清楚,这里不复述了,下面只讲讲在STM32上SysTick有什么特殊之处。按照CMSIS 标准,用C语言访问这四个寄存器原创 2012-10-07 14:17:53 · 4317 阅读 · 0 评论 -
STM32F10x 学习笔记 1 (使用STM32F10x StdPeriph Driver)
前段时间将 Cortex-M3 权威指南看完了,现在开始拿块开发板练手。STM32F1xx 本身并不难,不过因为第一次用 Keil MDK,还有想在程序中使用最新的stm32f10x_stdperiph_lib V3.5,最后让程序跑通也经历了一番周折。这里简单的记录一下,希望对刚刚开始学STM32的初学者有些帮助。(这篇的内容很初级,高手请绕道)首先介绍一下我这里的实验环境,开发原创 2012-10-06 21:29:27 · 23298 阅读 · 1 评论 -
ARM Cortex-M3 学习笔记(6)
最近在学ARM Cortex-M3,找了本号称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。 第六章 Cortex-M3的全景概貌这一章的内容大体有个了解就行了,后面章节中会对这里讲到的各个部分深入讲解。 3级流水线,流水线的3个级分别是:取指,解码和执行Cort原创 2012-09-09 15:29:23 · 7191 阅读 · 1 评论 -
ARM Cortex-M3 学习笔记(4-5)
最近在学ARMCortex-M3, 找了本号称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。Barrier 指令DMB, DSB, ISB这三个指令的区别如下表所示。 指令名功能描述DMB数据存储器隔离。DM原创 2012-09-08 19:52:52 · 7174 阅读 · 0 评论 -
ARM Cortex-M3 学习笔记(4-6)
最近在学ARM Cortex-M3,找了本号称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。对内存的互斥访问Cortex-M3 中提供了三对用于互斥访问的内存的指令,分别是:LDREX/STREX, LDREXH/STREXH, LDREXB/STREXB,这三对指令分别对应于字原创 2012-09-08 19:54:29 · 4077 阅读 · 4 评论 -
ARM Cortex-M3 学习笔记(4-4)
最近在学ARM Cortex-M3,找了本号称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。无条件跳转指令跳转指令分为无条件跳转和有条件跳转两大类。无条件跳转类指令非常简单,常见的就四种形式。 B Label ;跳转到Label处对应的地址, 无条件跳转指令BX re原创 2012-09-07 19:56:43 · 12342 阅读 · 1 评论 -
ARM Cortex-M3 学习笔记(4-3)
最近在学ARM Cortex-M3,找了本号称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。数据处理指令Cortex-M3支持的数据处理指令非常多,这里就捡重要的、常用的来介绍。 四则运算指令 基本的加、减法运算有四条指令,分别是ADD、SUB、ADC、SBC原创 2012-09-07 19:53:55 · 7608 阅读 · 0 评论 -
STM32F10x 学习笔记3(CRC计算单元)
STM32F 系列的单片机内部带了CRC32 计算单元。这个内置CRC模块的方法使用非常简单。其操作如下图所示。图 1 CRC计算单元框图归纳起来有如下几步操作:1. 开启CRC单元的时钟。RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE)2. 复位CRC模块(设置CRC_CR=0x01),这个操作把CRC余数初始化原创 2013-04-01 13:09:41 · 15954 阅读 · 4 评论 -
STM32F10x 学习笔记4(CRC计算单元 续)
上篇博客给出了 STM32F10X 系列单片机中CRC 单元的用法。还指出了这个CRC 单元计算的结果与常见的CRC32 算法得到的结果不相同。但是为什么不相同,是什么原因造成的却没有写出来。这里再补一篇,把这些都说清楚。下面先给个crc32的计算函数,这个函数计算的结果与STM32F 单片机上硬件单元的计算结果相同。uint32_t crc32(uint32_t *addr, i原创 2013-04-02 20:22:37 · 9287 阅读 · 1 评论 -
STM32F10x 学习笔记7(USART实现串口通讯 3)
在上一篇学习笔记《STM32F10x 学习笔记6(USART实现串口通讯 2)》给出了个利用环形缓冲区的串口驱动。最近研究了uCOS-II在STM32上的移植。下面再给个利用uCOS-II的信号量的串口驱动。整个驱动的基本框架和上一篇没什么区别,所以不多介绍。直接贴代码:整个驱动包含四个文件:uart.h uart.c COMMRTOS.H COMMRTOS.c原创 2013-06-15 09:24:55 · 13262 阅读 · 2 评论 -
移植uCOS-II到Cortex-M3平台 (补遗)
去年写过一篇介绍 uCOS-II 在Cortex-M3平台移植的文章:http://blog.csdn.net/liyuanbhu/article/details/9082767 最近闲下来,研究了一下 FreeRTOS 官方的Cortex-M3平台的移植代码,很有收获,发现了几处比 uCOS-II 移植代码写的好的地方。这里简单总结一下,算是给自己做个备忘。对临界区的处理原创 2014-01-07 20:30:01 · 4924 阅读 · 1 评论 -
STM32F10x 学习笔记10(基本定时器)
大容量的STM32F101xx、STM32F103xx系列和互联型产品中包含了两个基本定时器,TIM6和TIM7。这两个定时器功能非常简单,基本上和SysTick 定时器相当。但是我在使用的时候确是费了一番周折才调试通过,所以还是应该将这两个定时器的使用方法好好的写一写。基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。简单的说两个定时器是从0计数到N原创 2013-12-22 15:48:54 · 12097 阅读 · 2 评论 -
STM32F10x 学习笔记9(解决JLink 无法下载程序的问题)
今天在玩开发板时不小心下载了个有问题的程序,然后就悲剧了。无法往芯片中烧写程序了。每次想下载程序都会弹出如下的两个错误对话框。然后消息窗口显示如下的错误信息。JLink info:------------DLL: V4.15n, compiled Jun 18 2010 19:55:09Firmware: J-Link ARM V8 compiled May 20 201原创 2013-06-16 18:09:23 · 50420 阅读 · 2 评论 -
STM32F10x 学习笔记8(USART实现串口通讯 DMA 方式)
STM32F10x 的USART 支持DMA 方式,并且在DMA完成后可以产生中断。这对于需要接收或发送大量数据的应用情景是很有帮助的。在普通的8位或16位单片机中很少有包含DMA控制器的,所以可能许多嵌入式程序员对DMA方式并不熟悉。简单的说,直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。由于无须CPU干预,数据可以通过DMA快速地移动,这就节省原创 2013-06-16 11:42:00 · 14359 阅读 · 1 评论 -
STM32F10x 学习笔记6(USART实现串口通讯 2)
这次讲讲利用串口收发中断来进行串口通讯。STM32 上为每个串口分配了一个中断。也就是说无论是发送完成还是收到数据或是数据溢出都产生同一个中断。程序需在中断处理函数中读取状态寄存器(USART_SR)来判断当前的是什么中断。下面的中断映像图给出了这些中断源是如何汇合成最终的中断信号的。图中也给出了如何控制每一个单独的中断源是否起作用。另外,Cortex-M3 内核中还有个NVIC,可以原创 2013-05-05 12:00:37 · 38197 阅读 · 17 评论 -
STM32F10x 学习笔记7(独立看门狗IWDG 模块)
按照STM32参考手册的说法:“独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。”简单的说,STM32 中的IWDG 其核心就是一个12bits的向下递减的计数器,当计数器计数到零时就会触发原创 2013-05-05 18:30:21 · 13489 阅读 · 0 评论 -
STM32F10x 学习笔记5(USART实现串口通讯 1)
STM32F10x 系列单片机中都包含了USART 模块,所谓USART,就是通用同步异步收发器。通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通原创 2013-04-24 21:07:19 · 17043 阅读 · 0 评论 -
ARM Cortex-M3 学习笔记(5)
最近在学ARM Cortex-M3,找了本号称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。第五章 存储器系统地址空间分配对比更早版本的ARM内核,Cortex-M3的地址空间分配相对来说是固定的。尤其是内部的私有外设,地址分配是固定不变的。这为软件移植提供很大的方便原创 2012-09-05 19:39:04 · 5429 阅读 · 0 评论 -
ARM Cortex-M3 学习笔记(4-2)
最近在学ARM Cortex-M3,找了本号称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。第四章 指令系统数据传送类指令寄存器到寄存器传送:MOV 指令、MVN指令MOV R8, R3; R8 = R3MVN R8, R3; R8 = -R3学过微机原理的都原创 2012-09-05 19:34:29 · 7374 阅读 · 0 评论 -
Freescale 9S12 系列单片机应用笔记(libmaker)
飞思卡尔提供的9S12系列单片机开发工具包 CodeWarrior Development Studio中包含一个非常有用的工具 libmaker, 可以将编译后的 obj 文件打包为库文件。还可以对现有的库文件进行一些基本的修改。这东东有什么用呢,首先,将一系列的 obj 文件打包为库文件后会提高最后的 Link 阶段的速度。还可以将自己一些不愿公开的代码打包为库文件,有助于知识产权的保护。原创 2012-07-02 21:26:42 · 3649 阅读 · 0 评论 -
Freescale 9S12 系列单片机应用笔记(EETS4K模块) 1
EETS4K 模块应用笔记(1)9S12 系列单片机的通常包含4KB 的EEPROM。Freescale 将EEPROM 模块称之为 EETS4K。实际上,这里所谓的 EEPROM 其实是FLASH,只不过Freescale 特意将这里Flash 的 sector 做的很小(4Bytes),使得用户用起来像是在用 EEPROM。EEPROM 是直接映射到9S12 单片机的地址空间的,如原创 2012-06-30 17:49:16 · 3554 阅读 · 0 评论 -
Freescale 9S12 系列单片机应用笔记(ECT 模块) 6
实验6:模数递减计数器MCCNT和定时中断ECT 模块包含一个16位的模数递减计数器计数寄存器MCCNT。MCCNT的输入时钟信号由BUSCLOCK 分频得到,分频系数有四种选择。每次时钟到来后MCCNT自动减1。当MDC计数值减到0后,立即置位模数递减计数器标志寄存器MCFLG中的中断标志MCZF,若MCCTL中的中断允许位MCZI=1,则向CPU发出中断请求,向MCFLG的MCZF位写1将原创 2012-06-22 14:27:55 · 3494 阅读 · 0 评论 -
Freescale 9S12 系列单片机应用笔记(ECT 模块) 5
实验5:初识输入捕捉功能所谓输入捕捉,简单的说就是感应输入引脚PTx上的电平的变化,如果发现电平变化,则:l TCNT计数器的值被保存到到输入捕捉寄存器TCx中,状态标志位被置 1l 如果中断允许,则向CPU发出中断请求ECT 模块可以捕捉到的电平变化包括上升沿、下降沿或任意沿。简单的说就是可以捕捉任意一种变化,功能还是很强悍的。TCx 寄存器(Timer Input Capt原创 2012-06-04 20:47:06 · 5415 阅读 · 6 评论 -
Freescale 9S12 系列单片机应用笔记(ECT 模块) 3
实验3:输出比较 7 通道的特殊功能输出比较通道OC7 具有特殊的权限,可以废止其他输出比较通道的动作,直接决定各个输出通道的状态。这种特权功能是通过配置两个额外的寄存器OC7M和OC7D来实现的。OC7M寄存器(Output Compare 7 Mask Register)使OC7Mx=1,OC7强行参与管理通道x的输出,但通道OC7 对通道OC0~OC6的管理仅限于使其引脚PT0~原创 2012-06-04 20:30:50 · 4054 阅读 · 0 评论 -
Freescale 9S12 系列单片机应用笔记(ECT 模块) 4
实验4:定时器溢出翻转功能所谓定时器溢出翻转就是在TCNT溢出时将某个通道的输出管腿PTx电平翻转一下。这个功能很实用,可以实现PWM 功能。首先,还是要介绍个相关的寄存器TTOV。TTOV寄存器 (Timer Toggle On Overflow Register 1)定时器溢出触发寄存器 TTOV很简单,8位寄存器每一位对应一个输出比较通道,相应位置1后表示允许根据溢出特性翻转对应原创 2012-06-04 20:48:47 · 10388 阅读 · 0 评论 -
Freescale 9S12 系列单片机应用笔记(ECT 模块) 2
实验2:输出比较功能(Output Compare)所谓输出比较功能就是根据需要设置输出比较寄存器的值,自由运行计数器的值与输出比较寄存器的值每隔4个总线周期比较一次,当两者相等时,会在规定的通道引脚上输出预定的电平。如果允许中断,会产生一次输出比较中断。相应需要操作的寄存器有如下几个:TCx 寄存器(Timer Input Capture/Output Compare 0-7)总原创 2012-06-04 20:23:46 · 4487 阅读 · 1 评论 -
传感器的温度修正算法
传感器的温度修正是使用传感器时常遇到的问题,尤其是需要传感器工作在一个较宽的温度范围时,这个问题更加突出。这里描述的方法是我在使用某型压力传感器时厂家提供的,这种方法不一定是最好的,但是它比较简单,适用范围也比较广。我在几种不同类型的传感器上应用了这个方法,效果还不错。因此,写这篇小文与大家交流。首先,不考虑温度的影响,在某一固定的温度下,设传感器的输入输出值可以用多项式函数表示:原创 2012-07-08 07:49:25 · 16342 阅读 · 1 评论 -
Freescale 9S12 系列单片机应用笔记(SCI)1
SCI 模块应用笔记(1)UART,也就是异步串行通讯接口是单片机中最常见的外设,几乎每种类型的单片机都必备1到2个UART 接口,9S12 系列单片机也不例外。不过,摩托罗拉给他自己的单片机的串口起了个很有个性的缩写名称SCI (serial communication interface),其实就是我们常说的 UART。各种单片机串口的编程都大同小异,无非就是设置波特率、起始位、停止位原创 2012-07-19 21:16:44 · 6887 阅读 · 2 评论 -
ARM Cortex-M3 学习笔记(4-1)
最近在学ARM Cortex-M3,找了本号称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。 第四章 指令系统基本语法这里介绍的汇编语法是ARM汇编器的语法,如果采用其他的汇编器,比如gcc中的as,语法是不同的。 汇编指令的典型模式如下所示:Labelo原创 2012-09-05 19:31:39 · 5888 阅读 · 0 评论 -
ARM Cortex-M3 学习笔记(3)
最近在学ARM Cortex-M3,找了本号称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。第三章 Cortex-M3 基础这章的内容有不少是和第二章重复的。重复的部分这里就不再提了。堆栈Cortex-M3 的堆栈是倒生的,实栈顶。也就是R13指向最后一次压入堆栈原创 2012-09-03 10:08:23 · 8113 阅读 · 0 评论 -
ARM Cortex-M3 学习笔记(1)
最近在学ARM Cortex-M3,找了本号称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。第一章简介这一章的内容主要是介绍Cortex-M3内核是如何的强悍。还顺带着介绍了ARM系列的发展历史和路线。ARM公司成立于1990年,ARM公司是Advanced RISC原创 2012-09-03 09:26:54 · 4054 阅读 · 0 评论 -
ARM Cortex-M3 学习笔记(2)
最近在学ARM Cortex-M3,找了本号称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。第二章 Cortex-M3 概述Cortex M3 内核的组成可以用一张简图来表示:图 3 Cortex-M3内核简图内核寄存器组包括R0-R15,R0-R12原创 2012-09-03 09:31:55 · 4151 阅读 · 0 评论 -
Freescale 9S12 系列单片机应用笔记(SCI)3
这次介绍如何在 uC/OS-II 上实现串口驱动。 /*sci_ucos.h*/#ifndef _SCI_RTOS_H_ #define _SCI_RTOS_H_ #define SCI_RX_BUF_SIZE 64 /* Number of characters in Rx ring buffer */#defi原创 2012-07-20 21:21:10 · 2546 阅读 · 0 评论 -
Freescale 9S12 系列单片机应用笔记(SCI)2
这里给个利用串口收发中断的实现. 首先是头文件:/* sci_buffered.h */#ifndef _SCI_BUFFERED_H_#define _SCI_BUFFERED_H_#define SCI_RX_BUF_SIZE 64 /* Number of characters in Rx ring buffer原创 2012-07-20 21:10:25 · 2942 阅读 · 0 评论 -
μC/OS-II 移植笔记 2(FreeScale 68HCS12 核单片机)
本文最初写于 2012-04-20 于 sohu 博客,这次博客搬家一起搬到这里来。版权所有,转载请注明出处。 2.2 OS_CPU_A.S首先是函数和全局变量的声明。;***************************************************************************;原创 2012-05-20 21:23:14 · 2901 阅读 · 0 评论 -
μC/OS-II 移植笔记 1(FreeScale 68HCS12 核单片机)
本文最初写于 2012-04-19 于 sohu 博客,这次博客搬家一起搬到这里来。版权所有,转载请注明出处。 μC/OS-II 移植笔记 1(移植到FreeScale 68HCS12 核单片机,Small Memory Model)最近闲暇下来,花了些时间研究了如何将 μC/OS-II 移植到 FreeScale 68HCS12 内核的单片机。其实这个工作前年做过一次,当时原创 2012-05-20 21:19:33 · 3163 阅读 · 0 评论 -
常用插接件2(DC 电源插头)
这里说的DC 电源插头不是一种插头,而是一类插头。大家可以看下面的图,这个图中也只是列出了常见的一些。还有好多不常见的没有列出了。 这种插头多用于直流电源上,比如各种笔记本电脑的电源,还有各种小电器的电源,下面这个是淘宝上随便搜的: 实际上,DC 电源插头准确的名称叫什么我也不知道,在网上查了查,也没查出个结果。但是大家基本都这么叫,在淘宝上以这个名字搜索就能找到。 这些形形色色的电源插头中原创 2017-11-25 13:44:37 · 40767 阅读 · 3 评论