stm32f107的学习新手入门

  • 格式:doc
  • 大小:406.00 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1,说明:为什么选择STM32:

经过几天的学习,基本掌握了STM32的调试环境和一些基本知识。想拿出来与大家共享,笨教程本着最大限度简化删减STM32入门的过程的思想,会把我的整个入门前的工作推荐给大家。就算是给网上的众多教程、笔记的一种补充吧,所以叫学前班教程。其中涉及产品一律隐去来源和品牌,以防广告之嫌。全部汉字内容为个人笔记。先来说说为什么是它——我选择STM32的原因。

我对未来的规划是以功能性为主的,在功能和面积之间做以平衡是我的首要选择,而把运算放在第二位,这根我的专业有关系。里面的运算其实并不复杂,在入门阶段想尽量减少所接触的东西。

不过说实话,对DSP的外设并和开发环境不满意,这是为什么STM32一出就转向的原因。下面是我自己做过的两块DSP28的全功能最小系统板,在做这两块板子的过程中发现要想尽力缩小DSP的面积实在不容易(目前只能达到50mm×45mm,这还是没有其他器件的情况下),尤其是双电源的供电方式和1.9V的电源让人很头疼。

后来因为一个项目,接触了LPC2148并做了一块板子,发现小型的ARM7在外设够用的情况下其实很不错,于是开始搜集相关芯片资料,也同时对小面积的A VR和51都进行了大致的比较,这个时候发现了CortexM3的STM32,比2148拥有更丰富和灵活的外设,性能几乎是2148两倍(按照MIPS值计算)。正好2148我还没上手,就直接转了这款

STM32F103。

与2811相比较(核心1.8V供电情况下),135MHz×1MIPS。现在用STM32F103,

72MHz×1.25MIPS,性能是DSP的66%,STM32F103R型(64管脚)芯片面积只有2811的51%,STM32F103C型(48管脚)面积是2811的25%,最大功耗是DSP的20%,单片价格是DSP的30%。且有更多的串口,CAP和PWM,这是有用的。高端型号有SDIO,理论上比SPI速度快。

由以上比较,准备将未来的拥有操作系统的高端应用交给DSP的新型浮点型单片机28335,而将所有紧凑型小型、微型应用交给STM32。

2,首先:stm32f107vc和stm32f103vb的个区别

stm32f107vc和stm32f103vb有几个区别,都是芯片内部设备的区别,就像好电脑和差电脑的配置不同,但都用xp,win7系统,而且软件也是通用的。

首先看头几个字母“stm32”,这两个都是stm32芯片,是意法半导体为ARM M3内核出的用于自动控制领域的微处理器。F107是互联型接口和内部资源较多,F103是曾强型(比F101强),相比103,F107加入ieee以太网接口,2个i2s音频接口(做音频解码用),全部64kb 的SRAM缓存。

但是这两个芯片的开发方法和调用的库函数都是一样的,你看官方称他们为

STM32f10X就知道了,引脚也是兼容的。

你学习的话都是学习库函数,f107多出来的增强功能等你学完基本的stm32开发的时候很快上手的。送你一副图哦,看看吧。

3,然后,讲讲对于STM32学习,熟悉过程可以分以下阶段:

1、入门程序的熟悉

2、GPIOX的操作,各类寄存器原理的了解

3、逐个寄存器熟悉

4、中断,定时器的基础入门熟悉

5、USART的了解,

6、重复2345的步骤,加深对这些模块寄存器直接的协同了解突破,达到熟练。

在这里,我发下了STM32的USART基本字节发送非常简单,然后用这个来配合中断显示,在程序中插入各类输出显示,可以很清楚的知道程序中的运行状态,先后次序,对于程序调试有很大帮助。

STM32F107开发板入门篇一——第一个程序的理解:

准备开发环境MDK4.0以上,最简单的入门方式就是先调用MDK里面自带的例程程序,然后最好是先看

D:\Keil\ARM\Boards\Keil\MCBSTM32C\Blinky\Blinky.c

这里我就拿例这个例程序分析,虽然每句都分析了,但是刚入手STM32可能还是会有很多疑问,所以暂时不考虑寄存器问题,这里先给出一个程序的概念以及一些基本注意的东西,后面会有寄存器的说明:

阅读下面程序最好用MDK打开上面的程序配合看,效果更直观。

RCC->APB2ENR|=1<<6; //使能PE口时钟(STM32所有的寄存器操作都需要先使能时钟)

GPIOE->CRH=0x33333333; //配置PE口的高八位输出方式每位由4位二进

制数控制,这里每位都是0011 代表50MHZ的高速输出参考GPIO->CRH

SystemInit();

/* Setup and initialize ADC converter */

RCC->APB2ENR |= 1 << 9; /* Enable ADC1 clock ADC1使能时钟*/

GPIOC->CRL &= 0xFFF0FFFF; /* Configure PC4 as ADC.14 input ADC1在此芯片用PC4来作为模拟输入设置为输入(IO口使用前都必须对其功能设置)*/ ADC1->SQR1 = 0x00000000; /* Regular channel 1 conversion 主要是第1,2位设置为0表示单通道采集其他位置0不是用其他功能*/

ADC1->SQR2 = 0x00000000; /* Clear register 清领SQR2寄存器不适用其他功能*/

ADC1->SQR3 = 14 << 0; /* SQ1 = channel 14 选用通道14,就是PC4 */

ADC1->SMPR1 = 5 << 12; /* Channel 14 sample time is 55.5 cyc 通道14的采样周期选择101 即55.5周期*/

ADC1->SMPR2 = 0x00000000; /* Clear register 清0采样寄存器二*/

ADC1->CR1 = 1 << 8; /* Scan mode on 开启扫描模式*/

ADC1->CR2 = (1 << 20) | /* Enable external trigger */

(7 << 17) | /* EXTSEL = SWSTART */

(1 << 1) | /* Continuous conversion */

(1 << 0) ; /* ADC enable 设置ADC控制寄存器配置,使能ADC */

ADC1->CR2 |= 1 << 3; /* Initialize calibration registers 初始化校准寄存器,由于此步骤需要一些周期,多以必须等待完成后才开始下一步操作*/

while (ADC1->CR2 & (1 << 3)); /* Wait for initialization to finish */

ADC1->CR2 |= 1 << 2; /* Start calibration 开始校准,然后等待校准完成*/

while (ADC1->CR2 & (1 << 2)); /* Wait for calibration to finish */

ADC1->CR2 |= 1 << 22; /* Start first conversion 启动转换*/

for (;;) { /* Loop forever */

if (ADC1->SR & (1 << 1)) { /* If conversion has finished 转换完成状态寄存器的1位置1 */

AD_val = ADC1->DR & 0x0FFF; /* Read AD converted value 转换结果保存在寄存器ADC1->DR 的低12位*/

ADC1->CR2 |= 1 << 22; /* Start new conversion 读取数据后再次启动转换*/

}

// GPIOE->BSRR=~(AD_val<<4);