Stm32编译自己总结的技巧(可能适应于任何keil编译)

发布者:快乐的舞蹈最新更新时间:2015-10-29 来源: eefocus关键字:Stm32编译  keil编译 手机看文章 扫描二维码
随时随地手机看文章
1.定义的函数名字和数组名字不能相同,否则报错
2.定义无参函数的时候要加void  否则加上函数声明的时候在编译的时候会出现警告
3.任何函数  必须首先进行变量声明,然后才能是可执行的语句(declaration may not appear after       executable statement in block)
4.内核中断可以硬件自己清标志位,外设中断必须手动(软件)清标志位
5.定义变量的时候,如果不预先赋初值,则初始值就不一定是0;对于初值有要求的,一定要定义的时候赋值,切记!
6.同一中断线上的中断口只能用一个,比如PA1和PB1只能用一个但是可以选择进中断后判断电平来计算
7.keil工程路径不能太深,而且名字(每一层文件夹名字)不能过长,否则不能进入debug或者进入之后不能正常调试。
8.如果可以进debug。但是不能打断点,尝试将工程配置恢复默认(下面的default),同时删除自动生成的所有文件,重新试一下,曾经这样成功过(用st—link2),具体原因不明。(后发现是接触不良)
9.中断初始化的时候如果出现死在NVIC_Init(&NVIC_InitStructure);这一句上面,很有可能是无限进中断,因为第一次进中断貌似和配置没有关系,而且有些中断如果不清中断标志位,则会一直进,所以一定在中断服务函数里面清中断标志位。特别是TIM定时器。
10.预处理指令中使用了反斜杠,这里解释一下:每一条预处理语句总是以"#"字符开始,并且不能超过一行,一旦遇到换行符语句就被当做结束,唯一的一种能将预处理语句扩展到多行的办法就是在换行符之前加一个反斜杠('')。

11.定义指针,一定要先初始化,否则意想不到的后果。

12.stm32 spi1和spi的通用的配置函数,spi1比spi2快一倍,因此可能影响传输距离和速度(测试于sd卡通信得知)

13.keil如果无法打断点,而且是全部不能打断点,可能是勾选了Download to Flash;(位置:Debug—》setting--》(debug选项卡右下角))

14.stm32在系统初始化之前最好加个延时,否则可能会出错(一般都是电源不稳定,复位电路不稳定造成的),这个延时只能是for循环延时,在系统做任何操作之前,此只是为解决办法,并不是根本原因。原则上讲,电路应该做一个RC复位电路,上电之前复位。

15. 如果出现编译不报错,但是就是有个红X提醒,可以把C99模式去掉编译下,再改回来就好了

16.KEIL MDK  中是否勾选使用 micro lib,可能会影响时序。调试RC522时候,模拟spi,其他通讯正常,在使用读写卡两个函数的时候,必须勾选才可以

17.STM32F0系列的对于stlink的线要求不能过长,可能驱动不起来,能检测到不代表就能用.

18.目前测试串口收发测试的时候,如果打个断点(keil中),到了断点暂停之后,如果串口在暂停状态下接收数据,那么继续运行之后将会死在串口接收中断里面,而且还查不到中断标识,传说是stm32的bug,在此标记(用的芯片stm32f030f4p6)

19.今天调试51的程序的时候,发现串口中断里面不要加入发送中断的判断和设置,否则,至少现在发现定时器和串口不能同时使用的问题.

20.同上,也是串口的问题,半个月之后发现新问题,因为这个串口协议时序要求比较强,一直会偶尔出现接收到错误的数据,后来在串口发送之前加上ES=0;发送完后ES=1;就ok了,意思就是发送过程中禁止串口中断;

21.在485总线上,任何时刻都只能有一个主机发送数据,而且其他485芯片必须处于接收状态,即使处于发送状态但是不发送数据也不行,否则会造成数据错误!

22.在进行判断语句的时候,c语言中==是比|(或),&(与)这些优先级高的,所以if(0==a&b)和if(0==(a&b))这两个是不一样的.

关键字:Stm32编译  keil编译 引用地址:Stm32编译自己总结的技巧(可能适应于任何keil编译)

上一篇:JLINK flash timeout.Reset the tatget and try it again解
下一篇:初探STM32通用定时器

推荐阅读最新更新时间:2024-03-16 14:37

STM32编译配置的相关错误
通常是USE_STDPERIPH_DRIVER 写错了导致的; 通常是STM32F10X_HD拼写错误导致的; 正确的写法应该是 全部为大写!!!大写!!!大写!!!
[单片机]
<font color='red'>STM32</font><font color='red'>编译</font>配置的相关错误
KeilMDK4.22 编译STM32工程报错:Error: L6218
inking... .\Output\GPIOled.axf: Error: L6218E: Undefined symbol SysTick_CLKSourceConfig (referred from systick.o). .\Output\GPIOled.axf: Error: L6218E: Undefined symbol SysTick_CounterCmd (referred from systick.o). .\Output\GPIOled.axf: Error: L6218E: Undefined symbol SysTick_ITConfig (referred from systick.o). .\Outp
[单片机]
Keil增量编译build异常
装完MDK4.6/4.7a,发现没有修改源文件的情况下,单击build,每次都是重新编译,之前测试过重新建立工程/装回4.22,解决了该问题,当时并没多想原因。这次又出现了这个问题,重装了很久,也都这样,没有解决。 原因: 1、前阵子安装CDR时,修改了系统时间,忘记修改回去导致。 原因分析: 1、Keil编译时,会将.c等源文件修改时间与系统时间比较,如果修改时间比系统时间靠后,那么即使没有修改,它也会认为有改动,因此每次都会重新编译。正是因为系统时间比源文件修改时间早,所以编译器认为每次都是修改过的。
[单片机]
单片机keil编译软件怎么防止代码拼写错误
1. 认真听讲,掌握语法规则,例如: (1)汇编语句每行语句结束一般不加符号 (2)C51的关键词大部分都是以有意义的英文单词命名的,例如for ,不能拼写成fro 等等 2. 先记忆,再打字。 3. 中英文键盘切换,记得英文输入模式下打字。 4. 字体改大,便于发现错误,Edit- Configuration- Colors &Fonts- 8051:Edit Asm/C Files - Text- 点击Font右边按钮,修改Size为24 5. 自查和互查,检查的时候要一个字母,一个空格,一个符号逐个检查。 6. 根据Build Output窗口提示的错误行数进行排查。例如: eightledmain.asm(1
[单片机]
Micro2440 Nboot ADS 移植到Keil5编译通过
由于项目需要开发老版本S3C2440,由于时间有限系统当然跑WinCE6.0,软件兼容性好 当然安装开发工具等等一大堆是相当头疼,之前做STM32特别多,个人电脑一大堆都是32的BSP包,keil用的特别顺手,这次开发2440需要用到友善提供的Nboot,由于ADS软件兼容行特差问题太多不想折腾了,将Nboot移植到keil5上, 步骤1: 需要下载keil下ARM9的支持包,给上逻辑 http://www2.keil.com/mdk5/legacy,下载Legacy support for Arm7, Arm9 & Cortex-R devices安装即可。 步骤2: 将所有Nboot文件拷贝到keil工程下,如
[单片机]
Micro2440 Nboot ADS 移植到<font color='red'>Keil</font>5<font color='red'>编译</font>通过
STM32自学-初学者--谨记-编译时连接不到“stm32f10x_conf.h”
STM32自学-初学者的前车之鉴,希望可以帮到后面的同学。 因为一个小小的设置问题—C/C++没设置好而编译出错,导致一个下午都在忙着解决, 这或许就是自学者的烦恼吧,不能做到面面俱到,导致时间白白浪费在一些不该发生的事上, 希望我的这次总结可以有所帮助。 USE_STDPERIPH_DRIVER, STM32F10X_HD  编译出错  编译成功
[单片机]
<font color='red'>STM32</font>自学-初学者--谨记-<font color='red'>编译</font>时连接不到“stm32f10x_conf.h”
STM32 keil5编译优化
本来是写个IAP程序,Flash中只规划了4K字节,但是代码编写完后有6k,所以寻找优化方案,优化完在1.7k左右。 STM32 keil5编译优化,可以勾选一下几项: 1、Options for Taeget-- Target 勾选使用微库 2、Options for Taeget-- Target ①选择优化级别Level 3(-O3) ②勾选One ELF Section per Function 3、关于One ELF Section per Function的作用特别说明下: ①编译器在处理一个 c 文件的时候呢,如果这个选项不选,那么这个C文件中的所有函数在编译后只会产生一个叫 .text 的输出节:
[单片机]
keil C51语言编程如何缩减编译代码长度
1、整形数字符做乘除法的C51程序,代码比较大。约9B左右,所以尽量不做乘除法。 例如:uchar a=6;a=a*6;第二行代码要9个字节,而平时的语句只有2B。 2、定义变量的语句,不赋值或者不参与运算是不算代码的,能用短变量就用短变量,省RAM也省代码空间. 例如:uchar a; 这句有没有代码长度不变。但是赋非0值 uchar a=5;字符型,就要3B的代码长度。 uint a=5;整形变量赋值要6B字节,比较大,所以能定义短变量就定义短变量。 unsigned long int a=6.0;或者 long int a=6.0;会增加9B的代码。赋值整数浮点数一样。 3、对长整形变量,有符号变量比无符号变量
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved