STM32
文章平均质量分 92
zyboy2000
这个作者很懒,什么都没留下…
展开
-
如何禁止KEIL初始化RAM为零& 如何判断是软复位还是上电复位
笔记:(1)如何禁止KEIL初始化RAM为零? 1. 在KEIL Noinit 打钩 2. 另须对需要热启动保持的变量用__at关键字指定某个区域,否则还是没用 (#include "absacc.h") 或者__attribute__((zero_init)) 关键字 .bss段int te原创 2013-03-18 09:57:18 · 4475 阅读 · 0 评论 -
stm32中断向量表初探
cortex-M3的异常向量表中的内容并不是指令,0x00000000处(当然也可能映射到别的范围)是主堆栈指针的数值,0x00000004的内容是复位后需要跳转到的地址,是一个地址而不是一条指令。 0x08000000数据如下(memory 窗口查看--STM32小端):10 02 00 20 05 19 00 08 AREA RESET, DATA, READ转载 2012-06-27 20:59:48 · 8992 阅读 · 1 评论 -
STM32启动代码分析问题
能否讲解一下startup_stm32f10x_cl.s启动代码含义,谢谢!我现在看反汇编如下0x08000000 0678 LSLS r0,r7,#25 (查看Memory窗口0x08000000 : 78 06 00 20 ---STM32小端缘故)0x08000002 2000 MOVS r0,#0x000x0原创 2009-10-15 09:10:00 · 7125 阅读 · 4 评论 -
STM32 开发点滴
1. 软复位*((u32 *)0xE000ED0C) = 0x05fa0004; //实现系统复位NVIC_SystemReset();2.关中断和开中断(3.0库)STM32F10x_StdPeriph_Lib_V3.1.2\Libraries\CMSIS\Core\CM3\core_cm3.h__enable_irq();__disable_irq();原创 2012-05-02 13:21:54 · 11796 阅读 · 2 评论 -
STM32堆栈
1.堆和栈大小 定义大小在startup_stm32f2xx.sStack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=3Stack_Mem SPACE Stack_Size__initial_sp; Heap Configura原创 2012-05-19 15:43:17 · 24881 阅读 · 5 评论 -
STM32 FLASH
FLASH擦写时间和供电大小有关,供电电压越大,擦写时间越小,空间前4X16K,1X64K ,NX128#define VoltageRange_1 ((uint8_t)0x00) /*!#define VoltageRange_2 ((uint8_t)0x01) /*! #define VoltageRange_3 ((uint8_t)0原创 2012-05-20 20:35:34 · 2737 阅读 · 0 评论 -
STM32的USART发送数据时如何使用TXE和TC标志
在USART的发送端有2个寄存器,一个是程序可以看到的USART_DR寄存器,另一个是程序看不到的移位寄存器,对应USART数据发送有两个标志,一个是TXE=发送数据寄存器空,另一个是TC=发送结束。当USART_DR中的数据传送到移位寄存器后,TXE被设置,此时移位寄存器开始向TX信号线按位传输数据,但因为TDR已经变空,程序可以把下一个要发送的字节(操作USART_DR)写入TDR中,而不转载 2012-05-14 22:08:49 · 40681 阅读 · 4 评论 -
STM32(Cortex-M3)中的优先级概念
STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。优先级0级最高具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,转载 2009-08-19 10:41:00 · 1967 阅读 · 0 评论 -
MDK(KEIL)中设定变量或数组到指定的位置
定位变量到指定的位置使用定义在头文件 absacc.h中的 __at宏,可以将变量以如下方式定位到绝对地址处:C 例子:#include const char MyText[] __at (0x1F00) = "TEXT AT ADDRESS 0x1F00"; int x __at (0x40003000); // v原创 2011-09-06 09:19:36 · 26626 阅读 · 2 评论 -
环形队列串口(发)应用
环形缓冲区的实现原理:环形缓冲区通常有一个读指针和一个写指针。读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的缓冲区。通过移动读指针和写指针就可以实现缓冲区的数据读取和写入。在通常情况下,环形缓冲区的读用户仅仅会影响读指针,而写用户仅仅会影响写指针。如果仅仅有一个读用户和一个写用户,那么不需要添加互斥保护机制就可以保证数据的正确性在设计串口驱动的过程中,要遵循原创 2014-03-20 14:38:07 · 9157 阅读 · 1 评论 -
环形队列串口(收)应用
void CommISR(void) interrupt 4{ if (RI0) { RI0=0; CommRecBuffer[CommRecBufferTail]=SBUF0; //receive data CommRecBufferTail++; if (CommRecBufferTail==DB_RE原创 2014-04-04 12:00:57 · 6521 阅读 · 0 评论 -
HardFault_Handler问题查找方法
STM32出现HardFault_Handler故障的原因主要有两个方面:1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。2、堆栈溢出。增加堆栈的大小。 出现问题时排查的方法:发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、原创 2012-06-16 08:43:16 · 115847 阅读 · 25 评论 -
空操作NOP指令在ARM和C51的区别
(一)C51调用方法#include _nop_();(二)ARM下调用方法 __asm void nop(void){ NOP}然后在之后的C代码中调用该函数:void main(){...nop();... } 关于NOP指令在MCS-51单片机指令集中NOP的指令码为0x00,而ARM指令集中的NO原创 2012-04-05 18:07:56 · 13088 阅读 · 1 评论 -
STM32串口多机通信
从设备采用漏极开路方式级联,从设备的串口TX必须配置为漏极开路,不能是推挽方式,如果配置成推挽方式,会导致灌电流过大,低电平低不下去问题STM32 的UART数据寄存器是9位,数据传输先传低位(LSB)--实际应用发现9位数据大时候有丢包错包问题??利用USART可以进行多机处理器通信,其原理就是使从机处于静默模式,由主机在需要的时候发送指令唤醒从机,并传输数据。STM32静默转载 2012-05-15 11:53:07 · 24331 阅读 · 1 评论 -
STM32F2 GPIO 配置问题
在编写GPIO模拟i2c时,下面两个初始化有不同 第一种方法: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_原创 2012-07-12 16:34:17 · 11198 阅读 · 2 评论 -
MDK下怎样才能让变量在复位时不被初始化
最近一个项目需要保存一下临时数据,而产品容易受干扰而复位。所以需要保存一下数据,那么只有在系统复位时候不再初始化变量即可。对应MDK(keil)来说是一个比较麻烦的问题。通过网络上找了大量资料和测试发现终于可以了。 如果要实现以上要求,必须设置两点,缺一不可:1. 在MDK的选项中设置如下: 2. 必须在程序代码中如下编写:#define __noinit__转载 2013-03-20 11:05:48 · 4795 阅读 · 0 评论 -
[STM32] 关于USART接收中断的BUG和注意事项
今天在使用USART模块,遇到了一些问题并解决了,于是发贴共享。问题描述:在使用USART做串口通讯时,我只把接收中断打开,并设置抢占优先级为最低一个级别,而接收中断上一个优先级处理事情比较多,可能占用了2ms时间。当我使用9600波特率往下位机发送数据,速度非常快,就是一直按回车发!问题就出来,不到1分钟时间,通讯没有反应了。USART配置代码如下:void uart_confi转载 2013-03-15 12:08:15 · 37323 阅读 · 0 评论 -
STM32软件复位(基于库文件V3.5)
STM32软件复位(基于库文件V3.5) void SoftReset(void){__set_FAULTMASK(1); // 关闭所有中端NVIC_SystemReset();// 复位} 在官方软件库的 core_cm3.h 文件里 直接提供了 系统复位的函数 static __INLINE void NVIC_SystemReset(转载 2012-05-02 20:05:51 · 19701 阅读 · 1 评论 -
STM32启动模式及API
我们玩ARM9,一般都是在内存里调试程序,速度飞快。STM32下也可以这样,虽说现在的flash寿命已经很长了,但flash中调试烧录程序还是一个很慢的过程,有时候程序上一个小小的改动要花上几倍的时间下载代码,这确实是不能忍受的。 我们也可以在开发STM32时,在内存中调试程序。 {STM32这颗Cortex-M3控制器,与其他许多ARM一样,提供了BOOT0和BOOT1两个管脚用转载 2009-08-17 21:43:00 · 11225 阅读 · 1 评论 -
对于STM32别名区的理解——转帖+优化
1. 什么是位段、位带别名区? 2. 它有什么好处? 答1: 是这样的,记得MCS51吗? MCS51就是有位操作,以一位(BIT)为数据对象的操作, MCS51可以简单的将P1口的第2位独立操作: P1.2=0;P1.2=1 ; 就是这样把P1口的第三个脚(BIT2)置0置。 而现在STM32的位段、位带别名区就为了实现这样的功能。 对象可以是SR转载 2009-08-17 22:31:00 · 2545 阅读 · 0 评论 -
STM32笔记---DMA(USART)的演示
这里有个小小的例子,来演示DMA模块与系统程序并行工作。 用串口以低波特率发送一个10K的数据,花费近10s时间,此时按照以往方法,CPU要不断等待数据发送、送数据;或者送数据、进中断、送数据,处理起来比较消耗时间。 使用了DMA功能以后,用户程序中只需配置好DMA,开启传输后,再也不需要操心,10K数据完成后会有标志位或中断产生,期间可以做任何想做的事,非常方便。 这个是相应的代码例子,转载 2009-08-19 14:41:00 · 3148 阅读 · 0 评论 -
STM32开发板入门教程 - 串口通讯 UART
三种方式:查询,中断,DMA 通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择。 它支持同步单向通信和半双工单线通信。它也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。转载 2009-08-19 11:36:00 · 8566 阅读 · 2 评论 -
STM32开发板入门教程 - 内部温度传感器
废话少说 先看看他的参数1. STM32内部温度传感器与ADC的通道16相连,与ADC配合使用实现温度测量;2. 测量范围–40~125℃,精度±1.5℃。3. 温度传感器产生一个随温度线性变化的电压,转换范围在2V 转换公式如下图所示:呵呵 其实 写代码的时候 公式直接简化就得啦 如果测量要求不怎么高的话 呵呵(转载 2009-08-19 14:44:00 · 6409 阅读 · 0 评论 -
STM32学习笔记---SysTick定时器
Q:什么是SYSTick定时器?SysTick 是一个24 位的倒计数定时器,当计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。Q:为什么要设置SysTick定时器?(1)产生操作系统的时钟节拍SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要转载 2009-08-19 10:49:00 · 3609 阅读 · 0 评论 -
Cortex-M3知识
Cortex-M3 处理器支持:两种操作模式,即线程模式和处理程序模式两种执行模式,即特权模式和用户模式。重置时会进入线程模式,并且通常从异常中返回时也会进入该模式。 在线程模式下,代码可以在特权模式或用户模式下执行。发生异常后将进入处理程序模式。 所有代码都在特权模式下执行。 发生异常时,内核会自动切换到特权模式。特权模式具有完全访问权限。原创 2009-08-13 22:14:00 · 3382 阅读 · 0 评论 -
利用ST提供的USB例程实现USB IAP功能
我们知道ST推出的Cortex-M3平台STM32内部有两个Flash区域,一是System Flash,ST官方保留的一个区域,用于存放IAP代码。该区域不对用户开放,仅提供UART的通讯接口用于IAP升级;另一个区域是User Flash,这一部分是供用户自由使用的。STM32自带USB 2.0 Device接口,如果需要通过USB接口来实现IAP功能需要如何做呢?这里介绍如何利用ST STM转载 2009-08-10 21:34:00 · 2833 阅读 · 0 评论 -
STM32学习笔记 — 之GPIO端口篇
STM32上电IO口是输入悬浮状态 最近刚开始学习STM32,所以从最基本的GPIO开始学起;首先看看STM32的datasheet上对GPIO口的简单介绍:每个GPI/O 端口有两个32 位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32 位置位/复位寄存器(GPIOx_BSRR),一个16 位复位寄存器(转载 2009-08-09 21:17:00 · 11913 阅读 · 0 评论 -
STM32中用到的Cortex-M3寄存器说明
在STM32的固件库中定义了三个结构体与这三个寄存器组相对应,这三个结构体与ARM手册中寄存器的对应关系如下: 一、NVIC寄存器组STM32的固件库中有如下定义:typedef struct{ vu32 ISER[2]; u32 RESERVED0[30]; vu32 ICER[2]; u32 RSERVED1[30]; vu32 ISPR[2]; u32 RESER转载 2009-08-09 21:38:00 · 4057 阅读 · 0 评论 -
STM32笔记(三)ADC、DMA、USART的综合练习
/******************************************************************************* 本文件实现ADC模块的基本功能* 设置ADC1的常规转换序列包含CH10和CH16(片内温度传感器)* 设置了连续转换模式,并使用DMA传输* AD转换值被放在了AD_Value[2]数组内,[0]保存CH0结果,[1]保存CH16结果*转载 2009-08-24 22:09:00 · 5387 阅读 · 2 评论 -
STM32学习笔记之ADC--DMA方式
程序功能是把ADC1模块里通道14的输入电压转换后通过USART2发送到PC,在PC机上用串口调试助手观察接收数据:STM32是12位ADC,测量结果基本还可以!程序用了DMA来传输ADC转换值,调高了读取速度。串口部分用是上一篇串口调试笔记里的代码。/*******************************************************************转载 2009-08-24 21:38:00 · 30111 阅读 · 1 评论 -
STM32学习----时钟
在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。①、HSI是高速内部时钟,RC振荡器,频率为8MHz。②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。③、LSI是低速内部时钟,RC振荡器,频率为40kHz。④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。⑤、PLL为锁相环倍频输出,其时钟输转载 2009-08-09 21:15:00 · 2794 阅读 · 1 评论 -
STM32--低功耗模式
STM32F10xxx有三中低功耗模式:●睡眠模式(Cortex?-M3内核停止,外设仍在运行)●停止模式(所有的时钟都以停止)●待机模式(1.8V电源关闭) 时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。 上电,默认使用内部HSI时钟8M,经测试10mA左右。待机模式可实现系统的最低功耗。 可将电流消耗降至两原创 2009-10-16 16:03:00 · 20768 阅读 · 0 评论 -
ulink下在ram中调试stm32的方法
1.在项目文件夹 新建 RAM.ini ---------------------------------------------------------------- FUNC void Setup (void) { SP = _RDWORD(0x20000000); // 堆栈指针 PC = _RDWORD(0x20000004); // PC转载 2009-09-24 14:27:00 · 2218 阅读 · 0 评论 -
STM32多通道ADC规则转换实现了(转)!
vu16 ADC_RCVTab[160] ; //自己添加 /******************************************************************************** Function Name : main* Description : Main program* Input : None*转载 2009-09-24 16:51:00 · 14853 阅读 · 1 评论 -
STM32f10x_type.h文件--变量类型
/* Define to prevent recursive inclusion -------------------------------------*/#ifndef __STM32F10x_TYPE_H#define __STM32F10x_TYPE_H/* Includes ------------------------------------------------------原创 2009-09-17 15:31:00 · 4373 阅读 · 2 评论 -
STM32开发板基础教程(十) - RTC初探(转帖)
豆皮 - STM32开发板基础教程(十) - RTC初探(原创)版权所有 STMFANS 原创,转载请保留出处http://www.stmfans.com/bbs/viewthread.php?tid=1147&extra=page%3D1STM32的RTC实际是一个独立的定时器。下面将介绍如何使用RTC。我们将头一次牵扯到振源的问题。首先介绍一下STM32转载 2009-09-26 21:13:00 · 3910 阅读 · 2 评论 -
【转帖】STM32开发板入门教程(六) - I2C--24Cxx
我们所用来示范的24Cxx系列是最常用的EEPROM芯片。前面提到了一个地址码,24Cxx的地址码是固定的,8位如下:1 0 1 0 A2 A1 A0 0A2 A1 A0分别是它三个管脚的电平24Cxx 理解起来有一个特别之处。24Cxx 包括 01/02/04/08/16 四种,容量关系刚好和数字一样。1K 2K 4K 8K 16K24C02 最为常见, 它的三个地址管脚A2 A1 A转载 2009-09-11 11:38:00 · 4235 阅读 · 0 评论 -
Cortex-M3 VS ARM7
要使用低成本的 32位处理器,开发人员面临两种选择,基于Cortex-M3内核或者ARM7TDMI内核的处理器。如何做出选择?选择标准又是什么?本文主要介绍了ARM Cortex-M3内核微控制器区别于ARM7的一些特点,帮助您快速选择。1.ARM实现方法 ARM Cortex-M3是一种基于ARM V7架构的最新ARM嵌入式内核,它采用哈佛结构,使用分离的指令和数据总线;转载 2009-08-09 21:11:00 · 3929 阅读 · 0 评论