工程建立的主要步骤
1.新建3个文件夹:USER、SYSTEM、HARDWARE
2.新建led.c、led.h和test.c
3.在Target目录树上右击Manage Component,新建USER、SYSTEM、HARDWARE,并添加相关C文件(具体见前文MDK使用方法与技巧),跟前面一样HARDWARE组添加led.c文件。
4.在Options for Target ‘Target 1’对话框C/C++选项卡中Include Pathes里添加头文件路径。(这个不可少,否则编译出错,见前文MDK使用方法与技巧,led.h文件不可漏掉)
5.使用SWD方式下载,具体见MDK使用方法与技巧,注意reset and run选项,如果不选此项,程序下载后还要重启,然后才运行。
6.使用mcuisp通过串口下载程序搞了半天没下进去,原来是因为我把mcuisp左下角的电平设置错了,应该是DTR低电平复位,RTS高电平进BootLoader,真是粗心。
代码分析led.c [cpp] view plaincopy #include <stm32f10x_lib.h> #include "led.h" //硬件电路两个LED灯对应PA8和PD2,初始化PA8和PD2为输出口,并使能这两个口的时钟 void LED_Init(void) { RCC->APB2ENR|=1<<2; //使能POARTA时钟 RCC->APB2ENR|=1<<5; //使能POARTD时钟 GPIOA->CRH&=0XFFFFFFF0; GPIOA->CRH|=0X00000003; //PA8推挽输出 GPIOA->ODR=1<<8; //PA8输出高 GPIOD->CRH&=0XFFFFF0FF; GPIOD->CRH|=0X00000300; //PD2推挽输出 GPIOD->ODR=1<<2; //PD2输出高 } 注意:1.RCC是MDK定义的一个结构体,里面包含RCC相关寄存器组 2.在配置STM32外设时,任何时候都要先使能该外设的时钟!APB2ENR是APB2总线上的外设时钟使能寄存器。led.h [cpp] view plaincopy #ifndef __LED_H #define __LED_H #include "sys.h" //LED端口定义 #define LED0 PAout(8)// PA8 #define LED1 PDout(2)// PD2 void LED_Init(void);//初始化 #endif 可以右击找到PAout(x)的定义,在sys.h中。 test.c [cpp] view plaincopy #include #include "sys.h" #include "usart.h" #include "delay.h" #include "led.h" int main(void) { Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 LED_Init(); //初始化与LED连接的硬件接口 while(1) { LED0=0; LED1=1; delay_ms(300); LED0=1; LED1=0; delay_ms(300); } }