分类存档: 单片机编程

HEX文件格式详解[转]

Hex文件是可以烧录到MCU中,被MCU执行的一种文件格式。如果用记事本打开可发现,整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)。Hex文件可以按照如下的方式进行拆分来分析其中的内容:

例如 “:1000080080318B1E0828092820280B1D0C280D2854”可以被看作“0x10 0x00 0x08 0x00 0x80 0x31 0x8B 0x1E 0x08 0x28 0x09 0x28 0x20 0x28 0x0B 0x1D 0x0C 0x28 0x0D 0x28 0x54”

第一个字节 0x10表示本行数据的长度;

第二、三字节 0x00 0x08表示本行数据的起始地址;

第四字节 0x00表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。 继续阅读 »

IAR中使用堆和栈的问题——Working with the Stack and Heap

英文版PDF地址: http://www.iar.com/Global/Resources/Seminars/Working_with_the_Stack_and_Heap.pdf

——————————————  以下为我翻译的  ——————————————————–

议题
heap(堆)是什么?

怎样决定堆的大小
使用堆时潜在的问题
堆分配注意事项
使用栈(Stack)
决定栈的大小
使用栈时的潜在问题
静态栈检查
Embedded Workbench中的栈插件工具
示例
继续阅读 »

MSP430相关开发工具资源合集

一、EW430 IDE下载地址

最新版的IDE当然是谷歌搜索EW430去IAR的官网。但往往我们不需要最新的。IAR官网不提供历史版本下载,信号TI提供。
TI的下载页面地址点这里 ,可以下载到最近的几个版本。

继续阅读 »

Python笔记–IAR使用Python脚本实现自动对烧录文件进行处理

这篇文章将要记录如何配置IAR调用外部工具实现对编译完成后自动对生成的hex文件进行合并、对bin文件进行额外操作。

问题背景:
我们目前的项目在STM32平台上开发,具备远程无线升级功能,即通过GPRS网络实现远程IAP,IAP过程中使用的是bin文件(因为bin文件不包含地址,处理比较简单)。因此,在项目编译后我们就需要两个文件,一个是设备出厂时的烧录文件,该文件为hex格式,一个是设备部署后远程升级时用的bin文件。而出厂hex文件又由两个文件合并而成,分别是BOOT.hex: 用户启动代码,用于引导和远程升级,由BOOT工程编译得到;APP.hex :用户应用代码,由APP工程编译得到。同时,APP.bin: 用户应用代码二进制格式,通过APP工程编译得到。
所以每次重新编译app工程或者boot工程后都要进行一次复制粘贴,而且IAR链接时只能生成一种文件,hex或者bin,选择生成hex时就会删除bin,选择bin又会删除hex。因此要得到这两个文件需要编译连接两次。
另外,升级时我们需要知道bin文件的大小,CRC32校验码,烧录的起始地址,为了操作方便一个比较好的办法是将这三个信息都放到bin文件内部,所以编译生成bin文件后也要对该文件进行处理。
为了简化人工操作,减少出错几率,我就动手编写了一个脚本,每次编译连接完成后自动将APP.hex转为APP.bin,并且将APP.hex和BOOT.hex进行合并。

继续阅读 »

STM32 要使用一个定时器需要做哪些工作

1.配置该时钟的中断优先级,NVIC
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);     //配置NVIC中断优先级编组
    NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;  //TIM6中断
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //抢占优先级1级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //从优先级3级
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
    NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
2.初始化该时钟的配置,包括:
开启该定时器的时钟源:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
清空配置:TIM_DeInit(TIM6);
配置时钟的自动重装计数器:TIM_TimeBaseStructure.TIM_Period=200;
配置时钟源预分频数:TIM_TimeBaseStructure.TIM_Prescaler= (1600 – 1);
配置时钟分频数:TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
配置计数模式:TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
让配置生效:TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);
清空溢出中断标志:TIM_ClearFlag(TIM6, TIM_FLAG_Update);
设置溢出中断使能:TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);
启动定时器:TIM_Cmd(TIM6, ENABLE);
3.编写该时钟的中断服务函数
void TIM6_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
    {
        TIM_ClearITPendingBit(TIM6, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源
        sysClockCount++;                                //用于滚动显示字符
    }
}
来自为知笔记(Wiz)

LED点阵屏接口

12接口图示:
                    OE     A
                  GND    B
                  GND    C
                  GND    CLK
                  GND    HS
                  GND    RD1
                  GND    GD1
                  GND    D
08接口图示:
                     GND       A
                     GND       B
                     GND       C
                       OE        D
                       R1        G1
                       R2        G2
                     GND       HS
                     GND       CLK 继续阅读 »

EW430断点的问题小结

每次烧程序都出现:The stack plug-in failed to set a breakpoint on “main”. The Stack window will not be able to display stack contents. (You can change this setting in the Tool>Options dialog box.)的警告。程序能烧进去,只是不能调试。

解决办法:

Project->Options->linker->output->format;
选择 Debug information for c-SPY选项

当设置的断点过多时,IAR会提示然后自动去掉多出来的断点,这时多余断点变成白色,现在最多可设置3个断点。 继续阅读 »

MSP430 USB仿真器给目标板提供指定电压

MSP430的在线仿真工具LSD-FET430UIF能够给目标板提供工作电压,且给电压可以通过IAR软件调节,调节电压的方法如下:

打开工程的option对话框,选择Debugger下面的FET Debugger,在Target VCC部分勾选Override default并在文本框中填写对应的电压值。

该功能的作用:

目前我是发现在使用ADC测系统电压时会用到。如果不适用该功能,则在线debug时电压是默认的3.3V。

第 1 页,共 11 页12345...10...最旧 »