Keil MDK下学习STM32注意事项

发布者:RainbowGarden最新更新时间:2016-08-03 来源: eefocus关键字:Keil  MDK  STM32  注意事项 手机看文章 扫描二维码
随时随地手机看文章
在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.由STM32 HY-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)定义了与宏定义重复的变量
  其中第三个最不容易发现,平常写程序时要注意。

关键字:Keil  MDK  STM32  注意事项 引用地址:Keil MDK下学习STM32注意事项

上一篇:STM32启动过程相关代码分析
下一篇:解析 STM32 的启动过程

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

STM32】HAL库 STM32CubeMX教程四---UART串口通信详解
前言: 今天我们学习STM32CubeMX串口的操作,以及HAL库串口的配置,我们会详细的讲解各个模块的使用和具体功能,并且基于HAL库实现Printf函数功能重定向,UART中断接收, 本系列教程将HAL库与STM32CubeMX结合在一起讲解 ,使您可以更快速的学会各个模块的使用 所用工具 : 1、芯片: STM32F407ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 5、 串口: 使用USART1 PA9,PA10 知识概括: 通过本篇博客您将学到: STM32CubeMX创建串口例程 HAL库UATR函数库 重定义printf
[单片机]
【<font color='red'>STM32</font>】HAL库 STM32CubeMX教程四---UART串口通信详解
意法半导体发布STM32C0系列MCU 让成本敏感的8位应用也能享受32 位性能
意法半导体发布STM32C0系列MCU 让成本敏感的8位应用也能享受32 位性能 STM32系列高性价比入门级产品,现已量产并发货,享受 10 年产品寿命保障 2023年1月31日,中国 ---- 服务多重电子应用领域、全球排名前列的半导体公司意法半导体(STMicroelectronics,简称ST;)推出迄今为止STM32 微控制器 (MCU)产品家族中性价比最高的STM32C0系列产品,为开发者降低STM32入门门槛 。 全球已有数十亿个智能工业、医疗和消费产品采用 STM32 MCU 。STM32现有产品型号达数千种,让产品设计人员总能选到价格适中、功能和性能皆满意的产品。 在保障供货的同时, 意法
[单片机]
意法半导体发布STM32C0系列MCU  让成本敏感的8位应用也能享受32 位性能
stm32启动文件选择
小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。 中容量产品是指闪存存储器容量在64K至128K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 - startup_stm32f10x_ld_vl.s: for STM32 Low density Value line devices - startup_stm32
[单片机]
关于STM32 DAC使用
关于DAC的使用相对很简单,这里只注意两点: 1.从了解寄存器原理来说知道DAC 输出是受 DORx 寄存器直接控制的,但是我们不能直接往 DORx 寄存器(可读)写入数据,而是通过 DHRx 间接的传给 DORx 寄存器,实现对 DAC 输出的控制 。 2.关于STM32的DAC通道输出缓存控制位: 手册并没有解释这个输出缓存实现原理,这里我们一般不需要缓存即可。32的这个输出缓存使能虽然使输出能力强,但却会导致输出实际电压无法到0V,这是一个严重的硬件bug
[单片机]
面向51单片机的Keil uVision4的四种基本数据类型
在标准C语言中,存在着如下六种基本数据类型: 1、char:字符型; 2、short = short int:短整型 3、int:整型 4、long = long int:长整型 5、float:单精度浮点型 6、double:双精度浮点型 而面向51单片机的Keil uVision4对此进行了简化, 因此,可以理解为只存在如下四种基本数据类型: 1、char:字符型 2、int = short = short int:整型 3、long = long int:长整型 4、float = double:单精度浮点型 其中,基本整
[单片机]
STM32固件库V3.5 在Keil MDK环境下使用方法
简介 写这篇教程主要是和大家分享使用STM32的基本方法,也是给自己学习过程的总结、记录和备忘,避免重复学习之前明白但又忘记的知识和操作。我现在也是刚开始接触学习STM32,我是在STM32的固件库V3基础上进行学习。在这里我和大家分享一下使用V3.x库的方法,希望大家喜欢,如有错误请指出。 这篇教程分以下几个方面,一:建立工程,设置工程属性。二:建立条理清晰的GROUP;三:使用JLINK仿真调试。下面就分别逐个说明。 一、新建MDK工程 1、首先,打开MDK软件,再点击Project- New uVision Project…,如下图所示: 弹出如下对话框: 新建一个文件夹MDK工程,然后把工程名字
[单片机]
<font color='red'>STM32</font>固件库V3.5 在<font color='red'>Keil</font> <font color='red'>MDK</font>环境下使用方法
基于VSCode搭建STM32开发环境
众所周知, Keil 是一款收费软件,虽然可以Po解使用,但很多 公司 还是有点害怕,想必有不少读者都收到过**函。 之前,开发 单片机 项目,可以说 Keil 是最佳选择之一,但VSCode横空问世之后,这种格局被打破。 因为 VSCode 免费且好用,可以安装各种插件,很多 工程师 逐渐从Keil 转向了 VSCode。而且,VSCode还能实现 Keil 不能实现的一些功能。 下面就给大家分享一下 VSCode 搭建 STM32 开发环境的一些常规且使用的功能。 一、需要的软件和工具 下载 最新版 VS Code: 安装好插件,具有良好的代码补全与调试功能。 下载 LLVM:用于代码补全,其实可以理解
[单片机]
基于VSCode搭建<font color='red'>STM32</font>开发环境
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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