工程树立的首要过程
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
- #include”led.h”
- //硬件电路两个LED灯对应PA8和PD2,初始化PA8和PD2为输出口,并使能这两个口的时钟
- voidLED_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端口界说
- #defineLED0PAout(8)//PA8
- #defineLED1PDout(2)//PD2
- voidLED_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”
- intmain(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);
- }
- }