STM32-跑马灯实验代码分析

来源:互联网 发布:js 解码ccitt.t6 编辑:程序博客网 时间:2024/05/22 10:57

工程建立的主要步骤

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

#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

#ifndef __LED_H#define __LED_H #include "sys.h"//LED端口定义#define LED0 PAout(8)// PA8#define LED1 PDout(2)// PD2void LED_Init(void);//初始化     #endif
可以右击找到PAout(x)的定义,在sys.h中。

test.c

#include <stm32f10x_lib.h>#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);} }







原创粉丝点击