stm32f107的学习新手入门_第1页
stm32f107的学习新手入门_第2页
stm32f107的学习新手入门_第3页
stm32f107的学习新手入门_第4页
stm32f107的学习新手入门_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,说明:为什么选择STM32:经过几天的学习,基本掌握了STM32的调试环境和一些基本知识。想拿出来与大家共享,笨教程本着最大限度简化删减STM32入门的过程的思想,会把我的整个入门前的工作推荐给大家。就算是给网上的众多教程、笔记的一种补充吧,所以叫学前班教程。其中涉及产品一律隐去来源和品牌,以防广告之嫌。全部汉字内容为个人笔记。先来说说为什么是它我选择STM32的原因。  我对未来的规划是以功能性为主的,在功能和面积之间做以平衡是我的首要选择,而把运算放在第二位,这根我的专业有关系。里面的运算其实并不复杂,在入门阶段想尽量减少所接触的东西。 不过说实话,对DS

2、P的外设并和开发环境不满意,这是为什么STM32一出就转向的原因。下面是我自己做过的两块DSP28的全功能最小系统板,在做这两块板子的过程中发现要想尽力缩小DSP的面积实在不容易(目前只能达到50mm×45mm,这还是没有其他器件的情况下),尤其是双电源的供电方式和1.9V的电源让人很头疼。 后来因为一个项目,接触了LPC2148并做了一块板子,发现小型的ARM7在外设够用的情况下其实很不错,于是开始搜集相关芯片资料,也同时对小面积的AVR和51都进行了大致的比较,这个时候发现了CortexM3的STM32,比2148拥有更丰富和灵活的外设,性能几乎是2148两倍(按照MI

3、PS值计算)。正好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的新型浮点型单片机2

4、8335,而将所有紧凑型小型、微型应用交给STM32。 2,首先:stm32f107vc和stm32f103vb的个区别stm32f107vc和stm32f103vb有几个区别,都是芯片内部设备的区别,就像好电脑和差电脑的配置不同,但都用xp,win7系统,而且软件也是通用的。首先看头几个字母“stm32”,这两个都是stm32芯片,是意法半导体为ARM M3内核出的用于自动控制领域的微处理器。F107是互联型接口和内部资源较多,F103是曾强型(比F101强),相比103,F107加入ieee以太网接口,2个i2s音频接口(做音频解码用),全部64kb的SRAM缓存。但是

5、这两个芯片的开发方法和调用的库函数都是一样的,你看官方称他们为STM32f10X就知道了,引脚也是兼容的。  你学习的话都是学习库函数,f107多出来的增强功能等你学完基本的stm32开发的时候很快上手的。送你一副图哦,看看吧。3,然后,讲讲对于STM32学习,熟悉过程可以分以下阶段:1、 入门程序的熟悉2、 GPIOX的操作,各类寄存器原理的了解3、 逐个寄存器熟悉4、 中断,定时器的基础入门熟悉5、 USART的了解,6、 重复2345的步骤,加深对这些模块寄存器直接的协同了解突破,达到熟练。 在这里,我发下了STM32的USART基本字节发送非常简单,然后用这个来配合

6、中断显示,在程序中插入各类输出显示,可以很清楚的知道程序中的运行状态,先后次序,对于程序调试有很大帮助。STM32F107开发板入门篇一第一个程序的理解: 准备开发环境MDK4.0以上,最简单的入门方式就是先调用MDK里面自带的例程程序,然后最好是先看D:KeilARMBoardsKeilMCBSTM32CBlinkyBlinky.c这里我就拿例这个例程序分析,虽然每句都分析了,但是刚入手STM32可能还是会有很多疑问,所以暂时不考虑寄存器问题,这里先给出一个程序的概念以及一些基本注意的东西,后面会有寄存器的说明: 阅读下面程序最好用MDK打开上面的程序配合看,效果更直观。 RCC->A

7、PB2ENR|=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; /*

8、 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,就是

9、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) | /*

10、 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 f

11、inish */ 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 conversi

12、on 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); /* Calculate 'num': 0, 1, . , LED_NUM-1, LED_NUM-1, . , 1,

13、0, 0, . */ num += dir; if (num >= LED_NUM) dir = -1; num = LED_NUM-1; else if (num < 0) dir = 1; num = 0; GPIOE->BSRR = led_masknum; /* Turn LED on */for (i = 0; i < (AD_val << 8) + 100000); i+);/这里的FOR 循环延时就是用来读取AD转换的高8位加上100000构成延时,通过改变AD控制延时时间,12位的低4 位不是很稳定,在这里可以忽略GPIOE->BSRR

14、 = led_masknum << 16; /* Turn LED off */ 看了这些分析后,一定有很多疑问,在入门篇二中将逐个解除这些疑问。当这些基本疑问解决后,就可以运用STM32的基本功能了。 STM32入门篇二端口的认识理解端口控制GPIOSTM32系列给每个端口都分配了一个地址空间,然后通过对地址的赋值操作来完成对端口的控制,差不多端口也就是寄存器控制。每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存

15、器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。 根据数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置成多种模式。 输入浮空 输入上拉 输入下拉 模拟输入 开漏输出 推挽式输出 推挽式复用功能 开漏复用功能 每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。 在这里要说下前面用的GPIOX->CPL,ADC1->DR等等,寄存器的表示方

16、式都是在库文件stm32f10x_cl.c中定义的,这个库文件也可以根据自己的习惯去定义,但是初学建议不要去动里面的文件,因为后面的例程都是以这个为基础编写的。这个文件必须要先去熟悉,在里面找到上一节提到的所有的寄存器,然后差不多就能看明白这些命名规律,继续后面的学习了。CPIOX_CRL/CRH 寄存器如下:CPIOX_CRL/CRH寄存器各位代表的端口模式:GPIOX_的高8位和低8位控制寄存器都一样 寄存器都是32位的 每4位控制IO口的一位。然后介绍GPIOX的数据存储器,分为输入和输出存储器IDR和ODR;IDR是一个端口输入数据寄存器,只用了低16位。该寄存器为只读寄存器,并且只能

17、以16位的形式读出。该寄存器各位的描述如下图所示: 图3.1.1.2 端口输入数据寄存器IDR各位描述 要想知道某个IO口的状态,你只要读这个寄存器,再看某个位的状态就可以了。使用起来是比较简单的。ODR是一个端口输出数据寄存器,也只用了低16位。该寄存器虽然为可读写,但是从该寄存器读出来的数据都是0。只有写是有效的。其作用就是控制端口的输出。该寄存器的各位描述如下图所示: 图3.1.1.3 端口输出数据寄存器ODR各位描述这些都是16位操作,如果需要为操作就可以用到寄存器BSRR和BRR 这个也是我们前面的例程中用到的寄存器,描述如下:BRR寄存器和BSRR相反:BRR寄存器描述对于ADC寄存器还有其他类型寄存器可以参考STM32编程手册对于相应部分的介绍,这里暂时就介绍这么多。下一章我们将简单的实现ADC的配置。STM32入门篇三ADC的基本操作在前面

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论