您的位置 首页 元件

Keil MDK下学习STM32注意事项

在MDK下学习使用STM32也快两个礼拜了,基本掌握了STM32在MDK环境下的开发流程和基本硬件程序的书写。其间,遇到了许多问题,其中不少问题花…

MDK下学习运用STM32也快两个礼拜了,根本把握了STM32在MDK环境下的开发流程和根本硬件程序的书写。其间,遇到了许多问题,其间不少问题花费了我适当多得时刻才得以处理,现将这些问题和处理方法列出。其间也有一些是学习过程中我觉得需求记下的注意事项

1、STM32固件库运用外围设备的首要思路
在STM32中,外围设备的装备思路比较固定。首先是使能相关的时钟,一方面是设备自身的时钟,另一方面假如设备经过IO口输出还需求使能IO口的时钟;最终假如对应的IO口是复用功用的IO口,则还有必要使能AFIO的时钟。
其次是装备GPIO,GPIO的各种特点由硬件手册的AFIO一章详细规则,较为简略。
接着相关设备需求假如需求运用中止功用,有必要先装备中止优先级,后文胪陈。
然后是装备外围设备的相关特点,视详细设备而定,假如设备需求运用中止方法,有必要使能相应设备的中止,之后需求使能相关设备。
最终假如设备运用了中止功用,则还需求填写相应的中止服务程序,在服务程序中进行相应操作。
2、假如在源文件中未界说以下预界说,需在工程“C/C++”中预界说一栏 填写
“USE_STDPERIPH_DRIVER,STM32F10X_CL(器材所属分类),USE_STM3210C_EVAL(运用的评价板,库自带的进程中需求依据”readme”文件提示增加,自己的工程除非是在相同的评价板上运转,不然不需求预界说此项)”
3、NVIC的优先级分组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //这个对一切中止有用,一个程序中只能有一个分组
NVIC_PriorityGroup_n中n代表4位中有n位是给中止分配抢占式优先级的,4-n位是给中止分配呼应优先级的。
4、NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn;//其间EXTI15_10_IRQn表明选中的通道为[15:10],不明白就跳到它的界说处看注释
5、TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV4中的TIM_ClockDivision或 操控寄存器1(TIMx_CR1)中得位CKD[1:0] 为 时钟分频因子 (Clock division)
为界说在定时器时钟(CK_INT)频率与数字滤波器(ETR ,TIx)运用的采样频率之间的分频份额,与用内部时钟时counter运用的时钟频率(分频是在PSC寄存器中设置)无关。
6、下面临该库文件做个简略介绍:
Libraries\STM32F10x_StdPeriph_Driver\下的内容很好了解便是stm32的各个外设模块驱动代码。
misc.h和misc.c是和CM3内核有关的NVIC和SysTick的驱动代码。
Libraries\CMSIS下是什么呢?cmsis英文全称:CortexMicrocontroller Software InterfaceStandard,是Cortex系列处理器硬件笼统层,能够了解为cortex内核的软件接口。
core_cm3.c, core_cm3.h
它们的目录名为CoreSupport,阐明这两个文件是CM3内核支撑文件,其他运用CM3内核的芯片也能够用,纷歧定是stm32。这两个文件用来获取设置CM3内核,装备一些内核寄存器。
stm32f10x.h, system_stm32f10x.c,system_stm32f10x.h和startup_stm32f10x_hd.s在DeviceSupport目录下,阐明这几个文件是和详细的芯片有关的,也便是stm32芯片的支撑文件。其间stm32f10x.h是规范外设库的进口,运用规范外设库的代码中有必要包括该头文件。system_stm32f10x.c,system_stm32f10x.h这两个文件供给函数用来初始化stm32芯片,装备PLL、体系时钟和内置flash接口。startup_stm32f10x_hd.s是大容量型stm32芯片的发动文件。
7、USER下部分文件介绍
(1)stm32f10x_conf.h是用来增加所需外设头文件的,要依据需求进行更改,不然编译会呈现许多提示外设库函数没有界说 的过错。
(2)stm32f10x_it.c这是一个中止处理文件,_it结束,便是interrupt(中止)的意思,阐明这个是整个工程的中止处理函数,要是楼主没有用到中止的话就能够不增加进去,还有,也能够去掉,将中止函数增加到其它.c文件里也行.
stm32f10x_it.h中是对中止处理函数的声明。
(3)System_stm32f10x.c这个文件中界说的单片机的时钟设置,修正时钟设置直接修正里边的相应宏界说即可。调用System_Init()函数时会调用这个宏界说。因为在STM32的发动代码中(eg.starup_stm32f10x_cl.s)就调用了System_Init()函数,因此在主函数中不需调用此函数。
8、24C02器材地址组成
八位前面4位代表器材类型,eeprom为1010,A2、A1、A0为同类型器材地址,首要看原理图中相应位是接高仍是接地。
eg.由STM32HY-GoldBullV3开发板的原理图可知,24C02的A2、A1、A0脚悉数接地,所以24C02的地址应为1010000_,最终一位表明读仍是写。
9、在一个源文件中调用其他文件的函数,也需求在文件头声明,不然会有正告。
10、运用串口呈现乱码
原因剖析(1)USART设置有错(2)体系时钟设置有误
(3)假如运用的是MDK,运用printf()函数需求在工程特点的“Target“-》”Code Generation“中勾选”UseMicroLIB“,不然运用printf函数会呈现问题,例如会呈现乱码。
11、假如过错提示“expect a “)” ” 原因有可能为
(1)少写了半个括号 “)” (2)输成中文输入法的括号 (3)界说了与宏界说重复的变量
其间第三个最不简单发现,往常写程序时要注意。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/274938.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部