嵌入式课程方案设计书报告0_第1页
嵌入式课程方案设计书报告0_第2页
嵌入式课程方案设计书报告0_第3页
嵌入式课程方案设计书报告0_第4页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中南民族大学嵌入式技术与应用课程设计报告题目串口数字时钟设计学院计算机科学学院专业自动化班级自动化四班姓名肖映彩学号08064112指导教师张志俊、田微、李薇、姚为2011年 11月 14日教师评语:总分:教师签名:通过本课程的学习,结合自动化专业人才培养方案 (2009 版 ) ,独立完成课程设计,并撰写课程设计报告,要求:1第 8 周:结合自己将来的研究或工作方向,选择自己感兴趣的课题;2第 9 周:根据课题要求,阅读、收集、整理相关参考资料及产品用户手册,拟出设计方案。并分析该设计的应用及其应用领域,要有一定的前瞻性;3第 10-11 周:实施设计方案;硬件设计可以实验室现有的实验箱为基

2、础( 可外部扩展 ) 进行,也可利用自购的开发板;配合硬件进行软件设计,在实现题目要求的功能基础上,尽可能增加新功能,使设计更完善;软硬件联调,应充分发挥软硬协同设计思想的作用,不断完善系统,并记录调试过程及结果。4第 12 周:将设计交于指导老师验收,并进行答辩。总结该设计的主要内容及主要思想,撰写设计报告;5第 13 周:交课程设计报告。说明:(1)此为本课程设计考查的书面报告,占总成绩 40%;(2)内容原创、真实,不得雷同,否则无报告成绩 ;(3)严格按照科技论文规范写作,字数为3000-4000 字,摘要( 75-150 字)、关键词( 3-5 个),格式参见“中南民族大学本科毕业论

3、文(设计)规范化要求”、“计算机科学学院本科毕业论文 (设计)规范化要求”和“论文格式及写作指南”;正文应包含以下内容:设计概述:设计需求,设计原理,设计框图及描述硬件设计:硬件电路及描述软件设计:程序流程图及描述,主要程序说明调试与结果:调试过程,测试、结果及描述总结:设计总结(3)广泛收集并阅读相关参考文献,参考文献不少于4 篇,其中英文文献不少于 1篇;(5)装订成册,并将本页装订在论文首页;(6)以大班为单位收齐并上交。第1页共1页目录摘要1ABSTRACT10引言21设计概述21.1 设计要求21.2STM32实时时钟简介22硬件电路设计33软件程序设计33.1需求分析33.2程序流

4、程图43.3主要程序说明44调试过程与结果54.1调试过程54.2调试结果55设计总结66参考文献67附录7I串口数字时钟设计摘要本文介绍了利用处理器 STM32F103VET6的实时时钟模块, 设计一个简单的数字时钟的方法。在对处理器 STM32F103VET6的实时时钟模块进行正确设置后, 处理器会每一秒钟通过串口发送数据到 PC机上显示实时时间。关键词STM32;实时时钟;串口Serial Ports Digital Clock DesignAbstractThis paper describes the use of STM32F103VET6 processor of real ti

5、me clock module, design a simple digital clock method. To STM32F103VET6 processor in the real time clockmodule after set correctly, processor will each seconds through a serial port sending data to PC displays real-time time.Key wordsSTM32;real time clock;serial ports10 引言在现代人们的生活中, 时钟几乎是不能缺少的东西。 在许

6、多单片机的应用系统中, 实时时钟的设计是一个不可或缺的部分, 要设计一个高精度、 智能化的时钟往往需要花费一番心血。 STM32处理器带有实时时钟模块,并有一个秒中断,能保证时钟的精度。1 设计概述1.1 设计要求对 STM32处理器的实时时钟 (RTC)模块进行操作, RTC模块的当前时间通过串口传送给PC机的超级终端显示,若 RTC模块还未设置时间则通过超级终端进行设置。1.2 STM32实时时钟简介STM32处理器的实时时钟是一个独立的定时器。 RTC模块拥有一组连续计数的计数器,在相应软件配置下, 可提供时钟日历的功能。 修改计数器的值可以重新设置系统当前的时间和日期。RTC模块和时钟

7、配置系统(RCC_BDCR寄存器 ) 处于后备区域, 即在系统复位或从待机模式唤醒后, RTC的设置和时间维持不变。系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP) 的意外写操作。执行以下操作将使能对后备寄存器和RTC的访问:设置寄存器 RCC_APB1ENR的 PWREN和 BKPEN位,使能电源和后备接口时钟设置寄存器 PWR_CR的 DBP位,使能对后备寄存器和 RTC的访问。RTC由两个主要部分组成如图 1-1 所示:APB1一部分的预分频模块,它可编程产生最长为20 位的可编程分频器 (RTC 预分频器 ) 。如果在 RTC_CR寄存器中设置了相应的允许

8、位,则在每个位的可编程计数器,可被初始化为当前的系统时间。系统时间按寄存器中的可编程时间相比较,如果个闹钟中断。图 1-1 RTC 框图2第一部分 (APB1 接口 ) 用来和 APB1 总线相连。此单元还包含一组16位寄存器,可通过APB1总线对其进行读写操作。APB1接口由 APB1总线时钟驱动,用来与APB1总线接口。另一部分 (RTC核心 ) 由一组可编程计数器组成,分成两个主要模块。第一个模块是RTC的预分频模块,它可编程产生最长为1 秒的 RTC时间基准 TR_CLK。 RTC的预分频模块包含了一个20 位的可编程分频器 (RTC 预分频器 ) 。如果在 RTC_CR寄存器中设置了

9、相应的允许位,则在每个 TR_CLK周期中 RTC产生一个中断 ( 秒中断 ) 。第二个模块是一个32 位的可编程计数器,可被初始化为当前的系统时间。系统时间按TR_CLK周期累加并与存储在RTC_ALR寄存器中的可编程时间相比较,如果RTC_CR控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。2 硬件电路设计在系统板上 STM32F103VET6处理器的 VBAT引脚接 +3V 钮扣电池, PC6引脚接 LED1,串口电路设计如图 2-1 所示:图 2-1串口电路有了以上电路,使用该实例时只需将用一根 RS232串行通讯线将系统板的 USART1口与PC机的串口相连即可。3 软件

10、程序设计3.1 需求分析根据设计要求,软件需实现以下任务:系统启动后检查RTC是否已设置。 由于 RTC在 BKP区域,当 Vdd 掉电之后可由后备电源提供电源,当后备电源连接到针脚 VBAT上时, RTC的设置不会由于外部电源的断开而丢失。在本设计中写一个值到 BKP_DR1寄存器中以标示 RTC是否已配置, 在启动之后程序检查 BKP_DR1寄存器的值。若 BKP_DR1寄存器的值不正确 ( BKP_DR1寄存器的值有误或者由于是第一次运行值还未写进去),则需要配置时间并且询问用户调整时间。若 BKP_DR1的值正确,则意味着 RTC已配置,此时将在超级终端上显示时间。在 RTC秒中断发生

11、时,连接到PC.06 的 LED1灯每秒闪烁一次。3.2 程序流程图根据系统设计要求,程序设计流程图如图3-1 所示:系统初始化RTC标志是否被配置过RTC 初始化检查是否是掉电重设置 RTC 时钟参数检查是否是 RESET将配置标志写入备份数据寄存器等待 RTC 寄存器被同步使能秒中断清除 RTC 待处理标志位显示当前时间图 3-1程序设计流程图3.3 主要程序说明整个工程包含3 个源文件: startup_stm32f10x_hd.s、 stm32f10x_it.c和 main.c ,其中 startup_stm32f10x_hd.s为启动代码, 所有中断服务子程序均在stm32f10x_

12、it.c中,其它函数则在main.c 中。下面分别介绍各个主要的函数,具体详细程序见附录1 程序清单:4stm32f10x_it.c 文件中函数 RTC_IRQHandler用于处理 RTC秒中断事件,每次秒中断令LED1闪烁一次,在每次遇到 23:59:59 时将时钟回零。main.c 函数 RTC_Configuration 用于配置 RTC模块。函数 USART_Scanf用于从 PC超级终端中获取数字值, Time_Regulate 利用函数 USART_Scanf从超级终端获取新的 RTC时间值,函数 Time_Adjust 则利用函数 USART_Scanf设置新的 RTC时间。函

13、数 Time_Display 和Time_Show用于将 RTC时间转换了字符串送往 USART1。4 调试过程与结果4.1 调试过程使用 Keil uVision3 打开工程 RTC-USART.Uv2,用仿真器连接系统板和 Keil uVision3 ,编译链接工程;使用标准串口线,连接系统板上的USART1接口和 PC机的串口;打开串口调试工具ComTools, 设置通讯端口参数为:COM1端口,波特率 9600,8位数据位,1位停止位,无校验位,无硬件流控制。选择硬件调试模式( 也可采用软件调试模式,利用 USART窗口来模拟实现COM1的输入和输出 ) ,点击 Keil uVisio

14、n3 的 Debug菜单,选择 Start/Stop Debug Session 项或 Ctrl+F5 键,远程连接目标板并下载调试代码到目标系统中;4.2 调试结果例程正常运行之后会在超级终端显示以下信息:RTC not yet configured.RTC configured.=TimeSettings=Please Set Hours:在 PC机上依次输入时钟、 分钟、秒钟之后每隔 1 秒在 ComTools 上显示一次时间, 同时开发板的 LED1灯也会每隔 1s 闪烁一次。显示效果图 4-1 所示:图 4-1程序正常运行时断开系统板外部电源,然后重新接上外部电源,在ComTools

15、 也将继续显示正常时间。显示效果图4-2 所示:5图 4-1取下系统板上的纽扣电池,并断开外部电源,然后重新接上外部电源,PC 超级终端上将无法继续正常显示时间,要重新设置时间才能正常显示。5设计总结本次课程设计设计的是串口数字时钟,是针对处理器STM32的实时时钟模块和串行通讯口设计的一个应用系统。该系统通过PC机的超级终端提供人际交互界面,实现和STM32的通讯,在设置好时间后,STM32会每一秒钟在超级终端上输出实时时间。通过设计该系统,我学习了 STM32实时时钟模块和通用串行输入输出端口的应用,也对其他通用模块有了一定的了解。6参考文献1意法半导体(中国)投资有限公司STM32F10

16、x微控制器参考手册.20102意法半导体(中国)投资有限公司STM32固件库使用手册的中文翻译版201067附录stm32f10x_it.c 文件:void RTC_IRQHandler(void)if(RTC_GetITStatus(RTC_IT_SEC) != RESET)/读取秒中断状态RTC_ClearITPendingBit(RTC_IT_SEC);/清除秒中断标志GPIO_WriteBit(GPIOB, GPIO_Pin_6,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_6); /LED1闪烁TimeDisplay = 1

17、;RTC_WaitForLastTask();/ 等待上一次对RTC寄存器的写操作完成if(RTC_GetCounter() = 0x00015180)/ 当前时间是23:59:59时复位为0:0:0RTC_SetCounter(0x0);/ 写入复位值RTC_WaitForLastTask();main.c文件 :#include stm32f10x.h#include stm32f10x_bkp.h#include stm32f10x_gpio.h#include stm32f10x_rcc.h#include stm32f10x_usart.h#include stm32f10x_rtc

18、.h#include stm32f10x_flash.h#include stm32f10x_pwr.h#include misc.h#include vu32 TimeDisplay = 0;void RCC_Configuration(void);void GPIO_Configuration(void);void USART_Configuration(void);void RTC_Configuration(void);void NVIC_Configuration(void);u32 Time_Regulate(void);void Time_Adjust(void);void Ti

19、me_Show(void);7void Time_Display(u32 TimeVar);u8 USART_Scanf(u32 value);int main(void)#ifdef DEBUGdebug();#endifRCC_Configuration();/系统时钟初始化NVIC_Configuration();/中断初始化GPIO_Configuration();/GPIO初始化USART_Configuration();/串口 1 初始化if(BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)/判断保存在备份寄存器的RTC标志是否已经被配置过pri

20、ntf(rnn RTC not yet configured.);RTC_Configuration();/RTC初始化printf(rn RTC configured.);Time_Adjust();/ 设置 RTC 时钟参数BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);/RTC设置后, 将已配置标志写入备份数据寄存器elseif(RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET)/检查是否掉电重启printf(rnn Power On Reset occurred.);else if(RCC_GetFlagStatu

21、s(RCC_FLAG_PINRST) != RESET) /检查是否reset复位printf(rnn External Reset occurred.);printf(rn No need to configure RTC.);RTC_WaitForSynchro();/等待RTC 寄存器被同步RTC_ITConfig(RTC_IT_SEC, ENABLE);/使能秒中断8RTC_WaitForLastTask();RCC_ClearFlag();Time_Show();/显示时钟void RCC_Configuration(void)RCC_DeInit();/将外设 RCC寄存器重设为缺

22、省值RCC_HSEConfig(RCC_HSE_ON);/设置外部高速晶振HSEStartUpStatus = RCC_WaitForHSEStartUp();/等待 HSE起振if(HSEStartUpStatus = SUCCESS)/如果 HSE成功起振RCC_HCLKConfig(RCC_SYSCLK_Div1);/设置 AHB 时钟为系统时钟RCC_PCLK2Config(RCC_HCLK_Div1);/设置高速 AHB时钟RCC_PCLK1Config(RCC_HCLK_Div2);/设置低速 AHB时钟FLASH_SetLatency(FLASH_Latency_2);/设置代码

23、延时值为2 延时周期FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /设置 PLL 的输入时钟为HSE 时钟,倍频系数为 9RCC_PLLCmd(ENABLE);/使能 PLLwhile(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET)/等待 PLL 就绪RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/选择 PLL 作为系统时钟while(RCC_GetSY

24、SCLKSource() != 0x08)/等待 PLL 作为系统时钟9RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC , ENABLE);/使能外设时钟void NVIC_Configuration(void)NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_

25、IRQChannel = RTC_IRQn;/配置 RTC秒中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStruct

26、ure.GPIO_Pin = GPIO_Pin_6;/PC.06GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/最高输出速率50MHzGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/推挽输出模式GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;/PA.09,串口发送引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;/复用推挽输出模式GPIO

27、_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;/PA.10,串口接收引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/浮空输入模式GPIO_Init(GPIOA, &GPIO_InitStructure);void RTC_Configuration(void)RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR |RCC_APB1Periph_BKP, ENABLE);/使能 PWR和 BKP时钟

28、PWR_BackupAccessCmd(ENABLE);/使能RTC 和后备寄存10器访问BKP_DeInit();/重置 BKPRCC_LSEConfig(RCC_LSE_ON);while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) = RESET)/等待 LSE就绪RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);/选择 LSE 作为 RTC时钟RTC_WaitForLastTask();/等待最近一次对RTC寄存器的写操作完成u32 Time_Regulate(void)u32 Tmp_HH = 0xFF, Tmp_MM = 0xF

29、F, Tmp_SS = 0xFF;printf(rn=TimeSettings=);printf(rn Please Set Hours);while(Tmp_HH = 0xFF)Tmp_HH = USART_Scanf(23);/ 输入小时,输入的值小于23printf(: %d, Tmp_HH);printf(rn Please Set Minutes);while(Tmp_MM = 0xFF)Tmp_MM = USART_Scanf(59);/输入分,输入的值小于59printf(: %d, Tmp_MM);printf(rn Please Set Seconds);while(Tmp_

30、SS = 0xFF)Tmp_SS = USART_Scanf(59);/ 输入秒,输入的值小于1159printf(: %d, Tmp_SS);return(Tmp_HH*3600 + Tmp_MM*60 + Tmp_SS);/ 将当前输入的时间换算成秒作为返回值void Time_Adjust(void)RTC_WaitForLastTask();/ 等待最近一次对RTC 寄存器的写操作完成RTC_SetCounter(Time_Regulate();/ 设置RTC 计数器的值为输入的当前时间RTC_WaitForLastTask();/ 等待最近一次对RTC 寄存器的写操作完成void T

31、ime_Display(u32 TimeVar)u32 THH = 0, TMM = 0, TSS = 0;THH = TimeVar/3600;TMM = (TimeVar % 3600)/60;TSS = (TimeVar % 3600)% 60;printf(Time: %0.2d:%0.2d:%0.2dr,THH, TMM, TSS);void Time_Show(void)printf(nr);while(1)if(TimeDisplay = 1)/ 如果 1s 过去Time_Display(RTC_GetCounter(); /显示当前时间TimeDisplay = 0;void USART_Configuration(void)USART_InitTypeDef USART_InitStructure;12USART_InitStructure.USART_BaudRate = 9600;/波特率 9600USART

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论