原创 STM32快速入门教程

2008-8-27 10:44 7696 5 7 分类: MCU/ 嵌入式

netjob @2008


http://bbs.21ic.com/club/bbs/bbsView.asp?


开发编译的软件: 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   这个是使用STM32库函数方法
        // GPIO_SetBits(GPIOC, GPIO_Pin_7);   //开LED2   这个是使用STM32库函数方法
       
        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   这个是使用STM32库函数方法
        //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   这个是使用STM32库函数方法
        //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()
//======================================================  
//
//======================================================    
void delay(void)
{
 int i,j;
 j=0;
 for (i=0; i<0xfffff; i++) j++;  // 1,048,575
 
}//end sub


// netjob's blog 上的文件。。。
void STM32_RCC_Configuration(void){;} 
void STM32_GPIO_Configuration(void){;}
void STM32_NVIC_Configuration(void){;}
void STM32_Led_Config(void){;}


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


 

文章评论2条评论)

登录后参与讨论

用户1630845 2010-9-9 12:22

今天下午就去试试 都两周了还没入门

用户461316 2008-8-28 11:27

这要的文章让初学习STM32的更好的入门哦!!!
相关推荐阅读
用户479664 2009-12-30 17:07
CRC校验之 MSP430与STM32通吃版
CRC是一个必备工具。在工程上,特别是通信。好比网卡芯片,无效RF CC500 CC1100等芯片内部都有CRC电路。...
用户479664 2009-09-01 17:59
TMS320F280X SPI SPIA使用入门与总结
TMS320F280X SPI SPIA使用入门与总结Netjob @ 2009年 8月31日晚我使用过NXP ARM LPC2138的SPI口,ATMEL AT91SAM7S256的SPI,MSP4...
用户479664 2009-08-25 23:09
STM32 CAN 标称位时间计算
以知 CAN总线 每秒发送的位数,即 最大传输 比特率是 1Mb/s( 1 兆位每秒)这样 CAN总线的【最小标称位时间】就是  1 μs,简单的说就是 发送 1 位要1 μs时间。根据ISO1189...
用户479664 2009-08-25 23:07
精解 SPI 的 CPHA 时钟相位 与CPLK 时钟极性
精解 SPI 的 CPHA 时钟相位 与CPLK 时钟极性Netjob @ 2009-08-01...
用户479664 2009-06-18 23:00
STM32 Hello World!
https://static.assets-stash.eet-china.com/album/old-resources/2008/12/12/8ee2aa15-a51b-441d-96f5-a15...
用户479664 2009-05-11 23:56
精解 Solder Mask 和Paste Mask 区别
Solder Mask Layers【阻焊层】。这个是反显层! 有的表示无的,无的表示有的嘛,不明白?你在Solder Mask Layer【有TopSolder 和BottomSolder】上FIL...
我要评论
2
5
关闭 站长推荐上一条 /2 下一条