前言:
本篇讲述的是如何使用JLink向STM32F103RCT6烧写程序,同时会用滴答定时器来实现一个LED灯亮灭的程序(该程序在以后的代码里依旧会存在,主要起监控单片机是否工作以及代码是否跑飞的作用)
准备工作:
首先要准备一个下载器,这个大家可以在网上买到,如下图所示
此外,我们这里依靠的是我们上次建立的工程文档,我们这里是用的Jlink线,对SWD接口进行烧写
正篇开始:
在ARM Cortex-M3内核中有一个Systick定时器,它是一个24位的倒计数定时器,当计数到0时,它就会从Load寄存器中自动重装定时初值,只要不把CTRL寄存器中的ENABLE清0,它就永不停。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即可
评论(0)
您还未登录,请登录后发表或查看评论