kl25定时器实验
嵌入式系统原理与应用实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
专业班级:物联1301 姓名:齐亨 学号:13516110 组员:齐亨 实验日期:2016年5月13日 实验名称:定时器实验, Systick 和 TPM, 一、实验目的
1、掌握 M0+内核时钟和 KL25 TPM 定时器计数功能的原理和使用方法。 2、掌握 KL25 PWM 功能的使用。
二、实验内容
1、导入工程,运行程序,观察实验现象;
2、 对照课本和工程,理解 Systick 和 TPM 计数功能以及 PWM 功能的编程步骤;
3、 修改 Systick 或 TPM,使时间显示格式为 xx:xx:xx (如 19:01:00); 4、 修改 PWM 工程,使蓝灯的亮度可以随时间慢慢变暗或变亮。 三、实验过程
1、原理图
2、基本原理
计数器输入的计数脉冲源
系统的时钟振荡器输出脉冲经12分频后产生;
T0或T1引脚输入的外部脉冲源。
四、编程
1.程序流程图
所用寄存器名称及其各个位
1、SysTick定时器模块的寄存器地址
2、控制及状态寄存器SYST_CSR
3、Sys Tick优先级寄存器
主要程序代码
#include "includes.h" //包含总头文件
void Hex_to_ASCII(uint_8 *temp); int main(void)
{
//1. 声明主函数使用的变量
uint_32 remember;
//2. 关总中断
DISABLE_INTERRUPTS;
//3. 初始化外设模块
light_init(RUN_LIGHT_BLUE,LIGHT_OFF); //初始化蓝色RUN灯
uart_init (UART_0,MCGPLL, 9600); //串口0初始化, 总线时钟24000Khz,波特率9600
uart_send_string(UART_0, "Hello SYSTICK!\r\n"); //发送开始信息
systick_init(CORE_CLOCK_DIV_16, 10); // 初始化SysTick周期为10ms,时钟源为外部时钟
//4. 给有关变量赋初值
g_time[0] = 0; //"时分秒"缓存初始化(00:00:00)
g_time[1] = 0;
g_time[2] = 0;
remember = g_time[2]; //临时变量remember初始化
//5. 使能模块中断
uart_enable_re_int(UART_0); //启动串口1接收中断
//6. 开总中断
ENABLE_INTERRUPTS;
//进入主循环
//主循环开始
=================================================================
=
for(;;)
{
if (g_time[2] != remember) //判断秒钟是否发生变化
{
light_change(RUN_LIGHT_BLUE); //蓝色运行指示灯(RUN_LIGHT_BLUE)状态变化
// uart_sendN(UART_0,3,g_time);
remember=g_time[2];
Hex_to_ASCII(g_time);
}
//以下加入用户程序
--------------------------------------------------------
}//主循环end_for
//主循环结束
==============================================================
return 0;
}
void Hex_to_ASCII(uint_8 *temp)
{
uint_8 a_time[10];
a_time[0] = *temp/10+48;
a_time[1] = *temp%10+48;
a_time[2] = ':';
a_time[3] = *(temp+1)/10+48;
a_time[4] = *(temp+1)%10+48;
a_time[5] = ':';
a_time[6] = *(temp+2)/10+48;
a_time[7] = *(temp+2)%10+48;
a_time[8] = '\r';
a_time[9] = '\n';
uart_sendN(UART_0,10,a_time);
}
五.实验问答
当利用SysTick定时器设计的电子时钟,出现走快了或走慢了时,如何调整,
答:初始化相关模块:
SysTick_CounterCmd(SysTick_Counter_Disable);
SysTick_ITConfig(DISABLE);
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
SysTick_SetReload(9000); // 设定SysTick达到1ms计数结束
SysTick_ITConfig(ENABLE); // 使能SysTick中断 中断处理:
void SysTickHandler (void)
{ if (TimingDelay !=
0x00) TimingDelay--; }
延时代码:
void Delay(u32 nTime)
{ SysTick_CounterCmd(SysTick_Counter_Enable); // 使能
SysTick计数器
TimingDelay = nTime; // 读取延时时间
while(TimingDelay != 0); // 判断延时是否结束
SysTick_CounterCmd(SysTick_Counter_Disable); // 关闭SysTick计
数器
SysTick_CounterCmd(SysTick_Counter_Clear); // 清除SysTick计数
器 }
应用代码: Delay(300); // 延时 300ms
六.实验小结
通过该实验的学习,熟悉了M0+内核时钟和 KL25 TPM 定时器计数功能的原
理和使用方法;大概的掌握 KL25 PWM 功能的使用;进一步的熟悉了汇编程序C
语言编程。