微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32-跑马灯实验代码分析

STM32-跑马灯实验代码分析

时间:11-23 来源:互联网 点击:
工程建立的主要步骤

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

  1. #include
  2. #include"led.h"
  3. //硬件电路两个LED灯对应PA8和PD2,初始化PA8和PD2为输出口,并使能这两个口的时钟
  4. voidLED_Init(void)
  5. {
  6. RCC->APB2ENR|=1<2;//使能POARTA时钟
  7. RCC->APB2ENR|=1<5;//使能POARTD时钟
  8. GPIOA->CRH&=0XFFFFFFF0;
  9. GPIOA->CRH|=0X00000003;//PA8推挽输出
  10. GPIOA->ODR=1<8;//PA8输出高
  11. GPIOD->CRH&=0XFFFFF0FF;
  12. GPIOD->CRH|=0X00000300;//PD2推挽输出
  13. GPIOD->ODR=1<2;//PD2输出高
  14. }

注意:1.RCC是MDK定义的一个结构体,里面包含RCC相关寄存器组

2.在配置STM32外设时,任何时候都要先使能该外设的时钟!APB2ENR是APB2总线上的外设时钟使能寄存器。

led.h

[cpp]view plaincopy

  1. #ifndef__LED_H
  2. #define__LED_H
  3. #include"sys.h"
  4. //LED端口定义
  5. #defineLED0PAout(8)//PA8
  6. #defineLED1PDout(2)//PD2
  7. voidLED_Init(void);//初始化
  8. #endif

可以右击找到PAout(x)的定义,在sys.h中。

test.c

[cpp]view plaincopy

  1. #include
  2. #include"sys.h"
  3. #include"usart.h"
  4. #include"delay.h"
  5. #include"led.h"
  6. intmain(void)
  7. {
  8. Stm32_Clock_Init(9);//系统时钟设置
  9. delay_init(72);//延时初始化
  10. LED_Init();//初始化与LED连接的硬件接口
  11. while(1)
  12. {
  13. LED0=0;
  14. LED1=1;
  15. delay_ms(300);
  16. LED0=1;
  17. LED1=0;
  18. delay_ms(300);
  19. }
  20. }


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top