STM32快速入门教程

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

STM32快速入门教程

开发编译的软件:IAR EWARM 4.42A

JTAG工具:ST-LINK2(开发板自带)

开发板:万利STM32EK(199元)

建议看的资料:

《STM32F10X-128K-EVAL MCU》ST公司STM32开发板的电路图

《STM32技术参考手册—RM0008.pdf 或STM32F103-CN.pdf 》

《Cortex-M3权威指南Cn.pdf》

《如何在IAR下使用STM库.pdf》

《STM32F10xxx_Library_Manual_ChineseV2.pdf》

《汉化STM32F的固件.rar》----网友: SUNKE9

《netjob的BLOG上的初学者笔记》

STM32 :把引脚BOOT1,BOOT0接地,3。3伏特供电,STM32就可以运行,无需外部接晶振。

芯片内部有复位电路。STM32上电后默认使用内部【精度8MHZ左右】晶振,如果外部接了8MHZ,

可以切换使用外部8MHZ,并最终PLL倍频到72MHZ.

软件开发上,我们可以从万利公司或ST公司给IAR公司写的STM32例子,首先一点,目前STM32软件开发都是使用ST公司STM32库,而我的BLOG 上例子不是使用STM32库。

我自己建立了STM32的头文件:stm32f103.h

原因是ST公司的STM32函数库太庞大复杂,效率低。而且会让开发人员不懂的如何操作STM32

的寄存器,不懂的CPU 是如何工作的。

一个STM32程序,有几个必要文件:

stm32f103.h 我自己定义的STM32头文件用来代替STM32函数库

cortexm3_macro.s 宏定义函数

stm32f10x_vector.c 中断初始化

stm32f10x_it.c 中断函数

main.c 主函数

//===================================================

// 完整例子:万利开发板上跑马灯程序

// 轮流点亮LED灯。

//===================================================

cortexm3_macro.s

stm32f10x_vector.c

stm32f10x_it.c

上面三个文件独立加入工程中。

而且stm32f10x_it.c 可以不加,如果不可中断

【main.c内容:】

#include "stm32f103.h"

void delay(void);

void STM32_RCC_Configuration(void);

void STM32_GPIO_Configuration(void);

void STM32_NVIC_Configuration(void);

void STM32_Led_Config(void);

void main(void)

{

int i="0";

/* System Clocks Configuration */

STM32_RCC_Configuration();

/* GPIO ports pins Configuration */

STM32_GPIO_Configuration();

/* NVIC Configuration */

// STM32_NVIC_Configuration();// 可以省略因为没开中断

STM32_Led_Config();

while(1)

{

delay();

switch(i)

{

case 1:

// GPIO_ResetBits(GPIOC, GPIO_Pin_4); //关LED5 这个是使用STM 32库函数方法

// GPIO_SetBits(GPIOC, GPIO_Pin_7); //开LED2 这个是使用STM3 2库函数方法

STM32_Gpioc_Regs->bsrr.bit.BR4 =1;// 1:清除对应的ODRy位为0 STM32_Gpioc_Regs->bsrr.bit.BS7 =1;// 1:设置对应的ODRy位为1

break;

case 2:

//GPIO_ResetBits(GPIOC, GPIO_Pin_7); //关LED2 这个是使用STM3 2库函数方法

//GPIO_SetBits(GPIOC, GPIO_Pin_6); //开LED3 这个是使用STM32库函数方法

STM32_Gpioc_Regs->bsrr.bit.BR7 =1;// 1:清除对应的ODRy位为0 STM32_Gpioc_Regs->bsrr.bit.BS6 =1;// 1:设置对应的ODRy位为1 break;

case 3:

//GPIO_ResetBits(GPIOC, GPIO_Pin_6); //关LED3 这个是使用STM3 2库函数方法

//GPIO_SetBits(GPIOC, GPIO_Pin_5); //开LED4 这个是使用STM32库函数方法

STM32_Gpioc_Regs->bsrr.bit.BR6 =1;// 1:清除对应的ODRy位为0 STM32_Gpioc_Regs->bsrr.bit.BS5 =1;// 1:设置对应的ODRy位为1 break;

case 4:

//GPIO_ResetBits(GPIOC, GPIO_Pin_5); //关LED4

//GPIO_SetBits(GPIOC, GPIO_Pin_4); //开LED5

STM32_Gpioc_Regs->bsrr.bit.BR5 =1;// 1:清除对应的ODRy位为0 STM32_Gpioc_Regs->bsrr.bit.BS4 =1;// 1:设置对应的ODRy位为1 i="0";

break;

default :

i="0";

break;

}//

i++; //切换到下一个灯

delay();

}//end main()

//======================================================

//

//======================================================

相关文档
最新文档