摘自:http://blog.chinaunix.net/uid-2595338-id-2139587.html

觉得这篇文章还是不错的,至少讲清了很多初学者不理解的概念,值得推荐!

我使用的芯片是 STM32F103VET 和编译器是 IAR ARM V5.5,调试器用 JLINK V8

1,下载ST的库,现在的版本是 STM32F10x_StdPeriph_Lib_V3.3.0,解压缩,然后将 Libraries整个拷贝到你的工作目录,Project 目录是很多演示代码,可以参考怎么怎么编程,很容易的,readme里面都有说明。
2,建立一个 IAR 的project 选择 C 的空项目,为了方便管理我分了多个文件夹,分别是

建立一个 CMSIS目录 放内核启动代码添加两个系统启动文件,分别是在
STM32F10x_StdPeriph_Lib_V3.3.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
目录下找到 system_stm32f10x.c 这个是设置系统时钟用的,还有一个是在
\startup\iar\startup_stm32f10x_hd.s ,因为 F103VET 是属于高密度器件,这个查看datahseet的第一页标题就有了。这个文件是最底层的启动代码,设置中断向量等,用来覆盖掉IAR自带的那个

建立 inc 和 src 目录,分别放头文件和源文件

建立一个 STM32F10x_StdPeriph_Lib 目录用来放ST的库文件,例如我先做一个LED闪烁,所以添加 3个文件,分别是 misc.c stm32f10x_gpio.c stm32f10x_rcc.c ,这几个是比较重要的。

然后就是设置项目属性,其中比较重要的设置是
General Option 里面设置 Library configuration 里面选择选择哪种runtime库,其实选Normal 就OK了,因为C语言库中很多要素在嵌入式系统中根本就没用。

C/C++ Compiler 中设置 optimzation 中的 level选择 none,因为是用来调试,所以先不要设置优化,然后在 preprocessor 里面设置预编译器参数,其实就是头文件的路径,这个比较重要,例如我设置了这些,其中 $PROJ_DIR$\ 是你project保存的路径,\..\ 表示父目录的意思,其他就是根据实际有头文件的地方都加入就是了。
$PROJ_DIR$\inc\
$PROJ_DIR$\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
$PROJ_DIR$\..\Libraries\STM32F10x_StdPeriph_Driver\inc
$PROJ_DIR$\..\Libraries\CMSIS\CM3\CoreSupport
$PROJ_DIR$\
然后在下面的 Define symbols 里面设置符号,说白了就是 #define ,差不多,不过这个是通过编译器传递给每一个源文件,因为我们需要使用库,而且使用的 high desity 器件,所以先设置两个符号。
USE_STDPERIPH_DRIVER
STM32F10X_HD

然后设置linker,这个也是比较重要,首先在库的演示文件中
STM32F10x_StdPeriph_Lib_V3.3.0\Project\STM32F10x_StdPeriph_Template\EWARMv5
找到几个 .icf 的文件,这个就是连接脚本了,再回到linker 的config页,选择 override default并选择刚才的文件,然后 edit 设置每个地址,可以直接用原来的那个 stm32f10x_flash.icf 就OK了是将代码放到 ROM区。
然后 library 页勾选了那个 Automatic runtime library,让编译器自动加载IAR自带的runtime库,虽然刚才添加了 ST库提供的启动代码,不过那个只是修改了中断向量,其他都没有改,所以呢还是需要IAR的库来初始化其他工作的。

然后是 Debugger 标签,选择 RDI 然后在 RDI标签上选择 JLINK 的RDI驱动,在 jlink的安装目录有。

最后就是在ST的project目录下的演示代码中copy几个过来用,其中重要的是 main.c ,stm32f10x._it.c 这个是中断处理的,暂时用不上,还有 stm32f10x_conf.h 这个是配置包含,将里面需要用到的几个去掉注释,例如这里使用的 rcc gpio misc,其他就注释起来

JLINK的设置中几个需要注意的,首先速度最好选择 auto selection ,因为做工问题,设置速度太快的话可能就不工作了。慢点就忍受一下吧。要勾选 enable flash programming,,并且器件选择一下就OK,例如我的是 ST STM32F103VE

最后就是编写C文件,由于main函数也是ST的代码中的,所以删除一点不用的就OK了。
运行到main函数为止,在ST库的帮助下,已经将芯片的时钟频率设置好在 72MHZ,基本环境都简历了,接下来就是写功能函数。
首先将外设的时钟都开启
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
                         RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
                         RCC_APB2Periph_GPIOE, ENABLE);

我的LED接在 PB5 ,送高电平就亮,如果不用库的话,我可以用以下的代码去点亮
#define B_BASE ((unsigned long volatile *)0x40010C00)
#define B_CRL (*(B_BASE + 0))
#define B_ODR (*((uint32_t volatile *) 0x40010c0c))

B_CRL &= ~(0x0f<<(5*4)); // clear
    B_CRL |= (0x01<<(5*4)) ;
    B_ODR &=(uint16_t)~(1<<5);
    B_ODR = (uint16_t)1<<5;

如果使用库的话则是,设置 PB5 为输出并且输出高电平
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  GPIO_SetBits(GPIOB,GPIO_Pin_5);

至此则完成了基本的环境了,接着就是要学习怎么使用库还有STM32的芯片了。
Etual
2010-7-21

怎么使用ST的库开发STM32相关推荐

  1. 使用LL库开发STM32:概述与使用

    文章目录 目的 LL库概述 文件说明 API 外设初始化 外设操作与查询 LL库使用 独立使用 与HAL库混合使用 例程参考 总结 目的 ST官方推出的用于开发STM32系列单片机的方式除了HAL库以 ...

  2. 清泉HAL库开发STM32之基础概念

    文章目录 前言 一.STM32标准库和HAL库分别是什么? 二.HAL库开发 cubemx新建工程 1.选择 CPU 型号 2.确认时钟源 3. 配置 IO 口 4. 配置系统时钟 5. 进一步配置 ...

  3. 清泉HAL库开发STM32之USART

    文章目录 前言 一.USART硬件特征 1.物理层 2.协议层 二.STM32 的 USART 简介 USART 和UART 三.编程实战 串口阻塞式发数据 串口非阻塞式发数据 实践现象 总结 前言 ...

  4. 清泉HAL库开发STM32之EXIT

    文章目录 前言 二.外部中断编程实战 HAL库编程步骤 初步调试程序 总结 前言 . STM32F1 外部中断简介 我们首先讲解 STM32F1 IO 口中断的一些基础概念.STM32F1 的每个 I ...

  5. 使用HAL库开发STM32:ADC基础使用

    文章目录 目的 基础说明 基础使用 配置选项说明 轮询 单通道 单次 轮询 单通道 连续 轮询 多通道 扫描 中断 单通道 中断 多通道 扫描 DMA 单通道 单轮 DMA 单通道 连续 DMA 多通 ...

  6. 清泉HAL库开发STM32之GPIO

    文章目录 前言 一.GPIO 8 种工作模式 二.八种使用方法简单归纳 三.CUBEMX配置过程 1.选择引脚类型 2. 配置引脚 3.巧用User Label 总结 前言 GPIO(英语:Gener ...

  7. 清泉HAL库开发STM32之TIM中断

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.STM32常见定时器资源? 1.定时器和计数器的区别 2.定时器所关注的问题 3.定时器模式下的时钟概念 4.定时 ...

  8. 【08】STM32·HAL库开发-HAL库介绍 | STM32Cube固件库介绍 | HAL库框架结构 | 如何使用HAL库及使用注意事项

    目录 1.初识HAL库(了解) 1.1CMSIS简介 1.2HAL库简介 2.STM32Cube固件包浅析(了解) 2.1如何获取STM32Cube固件包? 2.2STM32Cube固件包文件夹简介 ...

  9. 了解库开发,我们从STM32标准库开发学起

    摘要:从STM32新建工程.编译下载程序出发,让新手由浅入深,尽享STM32标准库开发的乐趣. 自从CubeMX等图像配置软件的出现,同学们往往点几下鼠标就解决了单片机的配置问题.对于追求开发速度的业 ...

最新文章

  1. 统计学派的18种经典「数据分析方法」
  2. 使用Restful、Guns、SpringBoot实现前后端分离
  3. flutter apk 打包
  4. py2中存储的pickle和py3中pickle无法读取的兼容性问题解决方案
  5. linux 怎么改系统字体,Linux下如何设置中文字体
  6. 报表引擎API开发入门—带参程序数据集
  7. java里面比较重要的东西_Java面向对象程序设计中很重要的一些东西
  8. Android中经常使用的工具类02
  9. Mysql管理之二进制日志文件的管理
  10. 火狐扩展程序推荐_使用Firefox的RIP扩展程序自定义Web
  11. 理解Alpha-Beta 剪枝算法
  12. 余世伟视频笔记----如何塑造管理者的性格魅力领袖根性之积极和大度
  13. sow 项目范围说明书的区别
  14. 新托业2020一周极限自救攻略
  15. 大一新生计算机课word知识,大一计算机结业论文
  16. Keil的AC6与AC5中文手册
  17. 生存分析 R语言(四)——Cox PHM(3) 检查PHA和scale
  18. IT30:30岁IT男未来10年规划第3篇(2009-2020)
  19. 全连接网络和卷积神经网络
  20. Google全系列产品不再信任赛门铁克某款根证书

热门文章

  1. python之算数运算
  2. Region 分裂(3)
  3. 一、 编写第一个Android应用程序
  4. AP报名截止时间近在咫尺,2023年AP考试时间表已公布
  5. DNSPod十问辛恒:如何让1万名保洁阿姨学会在线接单?
  6. RTX A2000显卡评测
  7. java 将A对象的值copy到B对象(根据属性名设置属性值)
  8. 成都双流区链家网租房python数据可视化
  9. C语言输出0-100之间的奇数
  10. 前端面试技巧和注意事项_2020大厂web前端面试常见问题总结