作业要求:
1、利用SysTick定时器编写倒计时程序,如初始设置为2分30秒,每秒在屏幕上输出一次时间,倒计时为0后,红灯亮,停止屏幕输出,并关闭SysTick定时器的中断。
2、利用RTC显示日期(年月日、时分秒),每秒更新。并设置某个时间的闹钟。闹钟时间到时,屏幕上显示有你的姓名的文字,并点亮绿灯。
3、利用PWM脉宽调制,交替显示红灯的5个短闪和5个长闪。
4、GEC39定义为输出引脚,GEC10定义为输入引脚,用杜邦线将两个引脚相连,验证捕捉实验程序Incapture-Outcmp-20211110,观察输出的时间间隔。
具体操作:
程序源码:
1、利用SysTick定时器编写倒计时程序,如初始设置为2分30秒,每秒在屏幕上输出一次时间,倒计时为0后,红灯亮,停止屏幕输出,并关闭SysTick定时器的中断。
Main.c:
//====================================================================
//文件名称:main.c(应用工程主函数)
//框架提供:SD-Arm(sumcu.suda.edu.cn)
//版本更新:2017.08, 2020.05
//功能描述:见本工程的<01_Doc>文件夹下Readme.txt文件
//====================================================================
#define GLOBLE_VAR
#include "includes.h" //包含总头文件
//----------------------------------------------------------------------
//声明使用到的内部函数
//main.c使用的内部函数声明处
//----------------------------------------------------------------------
//主函数,一般情况下可以认为程序从此开始运行(实际上有启动过程见书稿)
int main(void)
{
//关总中断
DISABLE_INTERRUPTS;
wdog_stop();
//"时分秒"缓存初始化(00:02:30)
gTime[0] = 0; //时
gTime[1] = 2; //分
gTime[2] = 30; //秒
gpio_init(LIGHT_RED,GPIO_OUTPUT,LIGHT_OFF);
gpio_init(LIGHT_GREEN,GPIO_OUTPUT,LIGHT_OFF);
gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_OFF); //初始化灯,全灭
//初始化 SysTick
SysTick->CTRL = 0; //清零,包括禁止中断以及计时
SysTick->LOAD = SystemCoreClock * 0.1; //写入重载值,计时时长为0.1秒
SysTick->VAL = 999UL; //清除当前值
while(SysTick->VAL != 0); //等待 SysTick 当前值清零完成
printf("SysTick 当前值:%d\n", SysTick->VAL);
SysTick->CTRL |= (1UL << 2U); //选择内核时钟
SysTick->CTRL |= (1UL << 1) | 1UL; //使能 SysTick 中断和计时
//开总中断
ENABLE_INTERRUPTS;
printf("ygyのSysTick定时器编写倒计时程序\n");
printf("倒计时:%d:%d:%d\n",gTime[0],gTime[1],gTime[2]);
gpio_set(LIGHT_GREEN,LIGHT_ON); //设置绿灯亮
//主循环部分
for(;;)
{
}
}
//======以下为主函数调用的子函数存放处=====================================
//====================================================================
/*
知识要素:
(1)main.c是一个模板,该文件所有代码均不涉及具体的硬件和环境,通过调用构件
实现对硬件的干预。
(2)本文件中标有【不变】的地方为系统保留,此类代码与具体项目无关,不宜删除。
(3)本文件中对宏GLOBLE_VAR进行了定义,所以在包含"includes.h"头文件时,会定
义全局变量,在其他文件中包含"includes.h"头文件时,
编译时会自动增加extern
*/
Isr.c:
//=====================================================================
//文件名称:isr.c(中断处理程序源文件)
//框架提供:SD-ARM(sumcu.suda.edu.cn)
//版本更新:20170801-20191020
//功能描述:提供中断处理程序编程框架
//=====================================================================
#include "includes.h"
//声明使用到的内部函数
//isr.c使用的内部函数声明处
void SecAdd1(uint8_t *p);
//=====================================================================
//函数名称:SYSTICK_USER_Handler(SysTick定时器中断处理程序)
//参数说明:无
//函数返回:无
//功能概要:(1)每10ms中断触发本程序一次;(2)达到一秒时,调用秒+1
// 程序,计算“时、分、秒”
//特别提示:(1)使用全局变量字节型数组gTime[3],分别存储“时、分、秒”
// (2)注意其中静态变量的使用
//============