从零开始制作STM32F103RCT6小车(二)

前言:

        本篇讲述的是如何使用JLink向STM32F103RCT6烧写程序,同时会用滴答定时器来实现一个LED灯亮灭的程序(该程序在以后的代码里依旧会存在,主要起监控单片机是否工作以及代码是否跑飞的作用)

准备工作:

        首先要准备一个下载器,这个大家可以在网上买到,如下图所示

此外,我们这里依靠的是我们上次建立的工程文档,我们这里是用的Jlink线,对SWD接口进行烧写

正篇开始:

        ARM Cortex-M3内核中有一个Systick定时器,它是一个24位的倒计数定时器,当计数到0时,它就会从Load寄存器中自动重装定时初值,只要不把CTRL寄存器中的ENABLE0,它就永不停。Systick定时器又被称为滴答定时器(以下简称滴答)。滴答定时器的运用其实还是在于4个步骤:1、选择时钟源。2、设定重装载数。3、使能中断。4、开启滴答定时器

下面是我给大家写好的基于滴答的延时函数,大家可以直接复制使用

下面是在sysclock.c文件下,这里要注意的一点是,在stm32f10x_it.c里面也存在一个 SysTick_Handler函数,可以把他注释掉,或者直接换成我们的函数

#include "stm32f10x.h"
#include "sysclock.h"

unsigned int time_delay; //这里要定义为全局变量
/*
	SystemCoreClock / 1000  	1ms中断一次
	SystemCoreClock / 1000000   1us中断一次
*/



void delay_ms(unsigned int time_ms)
{
	if (SysTick_Config(SystemCoreClock/1000))
	{
		while (1);
	}
	time_delay=time_ms;
	while(time_delay);
	SysTick->CTRL=0x00; 
	SysTick->VAL =0X00; 
}

void delay_us(unsigned int time_us)
{
  if (SysTick_Config(SystemCoreClock/1000000))
  {
     while (1);
  }
	time_delay=time_us;
	while(time_delay);
	SysTick->CTRL=0x00; 
	SysTick->VAL =0X00; 
}
 
void SysTick_Handler(void)
{
	if(time_delay)
	{
		time_delay--;
	}
}

  下面是sysclock.h

#ifndef __SYSCLOCK_H
#define __SYSCLOCK_H

void delay_ms(unsigned int time_ms);
void delay_us(unsigned int time_us);
void SysTick_Handler(void);

#endif

今天的主题是使用滴答定时器对LED灯进行操作,这里的原理图呢,我在该系列第一篇博客里提到,大家自行下载​​​​​从零开始制作STM32F103RCT6小车(一)_孙启尧的博客-CSDN博客

话不多说,直接上led灯的代码

led.c

#include "stm32f10x.h"
#include "led.h"

unsigned char led_flag;//定义标志位,在滴答定时器里可以进入led闪烁的中断

void LED_init()
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_12;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	
	GPIO_WriteBit(GPIOC, GPIO_Pin_12, Bit_SET);//先将红灯关闭,等到一切初始化完成之后再打开
	led_flag = 1;
	while(SysTick_Config(SystemCoreClock / 100));//每10ms进入一次滴答
}

led.h

#ifndef __LED_H
#define __LED_H

void LED_init(void);


#endif

之后,我们需要在KEIL5里面配置下用Jlink烧写的必要条件

点击魔法棒,选中Debug界面之后,再点击箭头所指的Use,选中如图所示的选项

 再点击setting

 将方框中的内容选为SW,最后点击OK即可

 为了方便大家的操作,省的每次烧录过后拔插Jlink进行重启,点击Flash Download勾选上箭头所指的内容

 最后,编辑完后,点击load即可

猜你喜欢

转载自blog.csdn.net/weixin_51651698/article/details/126191575