嵌入式课程设计报告解答Word格式.docx
- 文档编号:18196742
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:34
- 大小:175.57KB
嵌入式课程设计报告解答Word格式.docx
《嵌入式课程设计报告解答Word格式.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计报告解答Word格式.docx(34页珍藏版)》请在冰豆网上搜索。
面向领域不同,Kinetis系列基于ARMCortex-M内核陆续推出了KinetisK系列、L系列、M系列、W系列。
目标应用领域是智能电表、传感器控制网络、工业控制、数据采集等。
本课程设计使用MKL25Z128VLK4微控制器,它是KinetisL系列,其CPU核是Cortex-M0+处理器,KinetisL系列命名格式为:
QKL##AFFFRTPPCC(N)
MKL25Z128VLK4
MCU的硬件最小系统是指可以使内部程序运行所必须的最低规模的外围电路,也可以包括写入器接口电路。
一般情况下,MCU的硬件最小系统由电源、晶振及复位等电路组成。
随着Flash存储器制造技术的发展,硬件最小系统把写入器的接口电路也包含在其中。
2.2系统硬件框图
KL系列MCU是以AMBA总线规范为架构SOC。
一般来说,AMBA架构包含高性能系统总线和低速、低功耗的外设总线。
系统总线AHB是负责连接ARM内核、DMA控制器、片内存储器或其他需要高带宽的模块。
外设总线APB则是用来连接系统的外围慢速模块,其协议规则相对系统总线AHB来说较为简单,它与系统总线AHB之间则通过总线桥(Busbridge)相连,期望能減少系统总线的负载.
图2.2KL系列MCU体系结构图
三.系统硬件设计
3.1定时器(TPM)模块
3.1.1计时器/定时器的工作原理
实现计数与定时的基本方法有三种:
完全硬件方式、完全软件方式、可编程计数器/定时器。
完全硬件方式使用数字逻辑电路实现,即完全用硬件电路实现计数/定时功能,缺点:
通用性差、灵活性差。
完全软件方式通过编程,利用计算机执行指令的时间实现定时,优点:
节省硬件;
缺点:
降低了CPU的使用效率、不容易提供多作业环境,可作为实现粗略延时的方法。
可编程计数器/定时器的优点:
其计数/定时功能可由程序灵活地设置,设定之后与CPU并行地工作,不占用CPU的工作时间。
3.1.2TPM模块功能概述
TPM(定时器/脉宽调制模块)共有三个模块TPM0/TPM1/TPM2,TPM0有6个通道,TPM1和TPM2只有2个通道。
TPM支持输入捕捉、输出比较,并且能够产生PWM信号来控制电机。
TPM的基本定时器部分是一个递增的计数器,通过设定模块的溢出值,当计数器递增到该数值时,产生TPM中断,可以通过选择时钟源和溢出值设定该计数器的频率。
1.外部引脚
TPM模块具有基本定时、输入捕捉、输出比较、脉宽调制(PWM)功能。
2.基本结构
1)计数时钟源与分频
TPM的时钟由SIM_SOPT2[TPMSRC]和SIM_SOPT2[PLLFLLSEL]来进行选择。
选择的时钟源的分频因子由状态和控制(TPMx_SC)的PS[2:
0]位决定。
2)计数器
TPM具有一个16位计数器,有两种操作模式:
上升计数和可逆计数。
上升计数:
当(CPWMS=0)时,上升计数被选中。
0值被加载到TPM计数器中,并且计数器增量直到达到MOD中的值,此刻计数器被重载为0。
可逆计数:
当(CPWMS=1)时,可逆计数被选中。
当配置为可逆计数时,MOD必须大于等于2。
0值被加载到TPM计数器,并且计数器增量直到达到MOD值,此时计数器减量直到它返回0值并且可逆计数重启。
将MCU的串口与PC机相连,TPM每达到1s进行一次计时,并通过串口将计时信息发送给PC机。
通过串口调试工具,可以看到时间计数值在递增。
TPM模块具有中断使能、初始化、关闭操作以及TPM中断处理函数。
按照构件的思想,可将它们封装成独立的功能函数。
3.2串行通信(UART)模块
实现异步串行通信功能的模块在一部分MCU中被称为通用异步收发器(UniversalAsynchronousReceiver/Transmitters,UART),在另一些MCU中被称为串行通信接口(SerialCommunicationInterface,SCI)。
3.2.1串行通信RS-232总线标准
在MCU中,若用RS-232总线进行串行通信,则需外界电路实现电平转换,在发送端需要用驱动电平将TTL电平转换成RS-232电平;
在接收端,需要用接收电路将RS-232电平转换为TTL电平。
电平转换器不仅可以由晶振管分立元件构成,也可以直接使用集成电路。
目前使用MAX232芯片比较多,该芯片使用单一+5V电源供电实现电平转换,下图芯片MAX232的引脚说明:
(1)VCC(16脚):
正电源端,一般为+5V;
(2)GND(15脚):
接地;
(3)Vs+(2脚):
vs+=2vcc-1.5v=8.5v;
(4)Vs-(6脚):
vs-=-2vcc-1.5v=-11.5v;
(5)C2+,C2-(4,5脚):
一般接1uF的电解电容;
(6)C1+,C2-(1,3脚):
一般接1uF的电解电容。
3.2.1MAX232
3.2.2MAX232芯片进行电平转换基本原理
MAX232芯片进行电平转换的基本原理发送过程:
MCU的TxD(TTL电平)经过MAX232的11脚(T1IN)送到MAX232内部,在内部TTL电平被“提升”为232电平,通过14脚(T1OUT)发送出去。
接收过程:
外部232电平经过MAX232的13脚(R1IN)送入到MAX232的内部,在内部的电平被“降低”为TTL电平,经过12脚(R1OUT)送到MCU的RxD,进入MCU内部。
进行MCU的串行通信接口编程时,只针对MCU的发送与接收引脚,与MAX232无关,MAX232只是起到电平转换作用。
输入输出引脚分两组,基本含义如表2.2所示。
在实际使用时,若只需要一路串行通信接口,可以使用其中任何一组。
表2MAX232芯片输入输出引脚分类与基本接法
组别
TTL电平引脚
方向
典型接口
232电平引脚
1
11
12
输入
输出
接MCU的TxD
接MCU的RxD
13
14
连接到接口,与其它设备通过232相接
2
10
9
8
7
3.3液晶显示模块
1.点阵字符型LCD基本特点:
LCD作为电子信息产品的主要显示器件,相对于其他类型的显示器件来说有其自身的特点,主要包括:
(1)低电压,低功耗;
(1)平板型结构;
(3)使用寿命长;
(4)被动显示;
(5)显示信息量大且易于彩色化;
(6)无电磁辐射。
点阵字符型LCD是专门用于显示数字,字母,图形符号及少量自定义符号的液晶显示器。
这类显示器把LCD控制器,点阵驱动器,字符存储器,显示体及少量的阻容元件等集成一个液晶显示模板。
鉴于字符型液晶显示模块目前在国际上已经规范化,其电特性及接口特性是统一的,只要设计出一种型号的接口电路,在指令上稍加修改即可使用各种规格的字符型液晶显示器模块。
点阵字符型液晶显示器模块的控制器大多数为日立公司生产的HD44780及其兼容的控制电路,如:
SED1278(SEIKOEPSON),KS0066(SAMSUNG),NJU6408(NERJAPANRADIO)等。
2.字符型液晶显示器模块的特点如下:
(1)液晶显示屏是以若干5*8或5*11点阵块等组成的显示字符群。
每个点阵块块为一个字符位,字符间距和行间距都是一个点的宽度。
(2)主控制电路为HD44780(HITACHI)及其他公司的兼容电路。
从程序员的角度来看LCD显示接口与编程是面向HD44780的,只要了解HD44780的编程结构即可进行LCD的显示编程。
(3)内部具有字符发生器ROM,可显示192种字符。
(4)具有64字节的字符发生器RAM,可以定义8个5*8点阵字符或4个5*11的点阵字符。
(5)具有64字节的数据显示RAM,供显示器编程使用。
(6)标准接口特性,与MC9S08系列的MCU容易接口。
(7)模块结构紧凑,轻巧,装配容易。
(8)单+5V电源供电(宽温型需要加-7V驱动电源)。
(9)低功耗,高可靠性。
图3.3MCU控制液晶显示接口接线图
表3HD44780的引脚信号
3.4单片机(MCU)模块
3.4.1MC9S08AW60单片机性能概述
S80是单芯片8位微控制器解决法案。
MC9S08AW60/AW60/AW48/AW32/AW16是低成本高性能的8位微处理器单元(MCU)S08家族中的成员。
家族中有的MCU使用增强型S08S核,且使用不同的模块,存储空间,存储器类型与封装类型。
AW60系列主要常规模块和特点:
(1)最高达40MHz的CPU工作频率和20MHz的内部总线工作频率;
时钟源选项包括晶振,谐振器,外部时钟或,内部产生的时钟。
(2)相比HC08CPU指令集,S08CPU增加了BGND指令。
(3)单线后台调试模式接口:
增强的断点能力,允许单一的断点设置在线调试(在片内调试模块增加了多于两个的断点)。
(4)内含32个中断/复位源;
内含2KB的片内RAM;
内含60KB的片内在线可编程的Flash存储器,带有块保护和安全选项。
(5)可选的计算机正常操作(COP)复位;
低电压检测与复位或中断;
非法操作码检测与复位;
非法地址检测与复位。
(6)ADC:
多达16个通道,10个A/D转换器与动动比较功能;
两个串行通信接口SCI模块与可选的13位中断;
一个串行外设接口SPI模块;
集成电路互联总线IIC模块运行高达100kbps的最高总线负载;
8引脚键盘中断KBI模块。
(7)Timers:
1个2通道和一个6通道16位定时器/脉冲宽度调制器模块。
既有输入捕获,输出比较,脉宽调制功能。
AW子系列MCU的4种封装形式只是引脚数量和形式有所区别,其他方面是一致的。
四.软件设置
4.1主函数(main.c)
//说明见工程文件夹下的Doc文件夹内Readme.txt文件
//============================================================================
#include"
includes.h"
//包含总头文件
intmain(void)
{
uint_8LCDBuffer[20];
//uint_8*g_DispalyInit;
//1.声明主函数使用的局部变量
uint_32remember;
//2.关总中断
enter_critical();
//进入临界区,关中断
//3.初始化底层模块
light_init(LIGHT_PORT,LIGHT_PIN_BLUE,LIGHT_OFF);
//蓝灯初始化
uart_init(UART_1,BUSCLK,9600);
//串口1初始化,总线时钟24000Khz,波特率9600
tpm_init(TPM0,TPM_CLKSRC_PLL,1000000);
//1s
LCDInit();
//LCD初始化
//4.变量赋初值
g_time[0]=00;
//
(1)"
时分秒"
缓存初始化(00:
00:
00)
g_time[1]=00;
g_time[2]=00;
//g_time[3]=11;
//g_time[4]=51;
g_time[3]='
'
;
g_time[4]='
Z'
g_time[5]='
h'
g_time[6]='
a'
g_time[7]='
o'
g_time[8]='
g_time[9]='
Y'
g_time[10]='
u'
g_time[11]='
e'
g_time[12]='
g_time[13]='
g_time[14]='
//g_DispalyInit=(uint_8*)"
sun"
remember=g_time[2];
//
(2)临时变量remember初始化
//5.开中断
uart_enable_re_int(UART_1);
//启动串口1接收中断
tpm_enable_int(TPM0);
//启动模块中断
init_critical();
//开总中断
//LCDShow(g_DispalyInit);
//进入主循环
//主循环开始=============================================================
for(;
)
{
if(g_time[2]!
=remember)//判断秒钟是否发生变化
LCDBuffer[0]=g_time[0]/10+'
0'
LCDBuffer[1]=g_time[0]%10+'
LCDBuffer[2]='
:
'
LCDBuffer[3]=g_time[1]/10+'
LCDBuffer[4]=g_time[1]%10+'
LCDBuffer[5]='
LCDBuffer[6]=g_time[2]/10+'
LCDBuffer[7]=g_time[2]%10+'
LCDBuffer[8]=g_time[3];
LCDBuffer[9]=g_time[4];
LCDBuffer[10]=g_time[5];
LCDBuffer[11]=g_time[6];
LCDBuffer[12]=g_time[7];
LCDBuffer[13]=g_time[8];
LCDBuffer[14]=g_time[9];
LCDBuffer[15]=g_time[10];
LCDBuffer[16]='
^'
LCDBuffer[17]='
_'
LCDBuffer[18]='
uart_sendN(UART_1,11,g_time);
remember=g_time[2];
LCDShow(LCDBuffer);
}
}//end_while
//主循环结束=============================================================
return0;
}
4.2中断子程序(isr.c)
//========================中断函数服务例程===============================
//串口0接收中断服务例程
voidisr_uart0_re(void)
uint_8ch;
uint_8flag=1;
ch=uart_re1(UART_0,&
flag);
if(0==flag)
uart_send1(UART_0,ch);
exit_critical();
//串口1接收中断服务例程
voidisr_uart1_re(void)
staticuint_8index=0;
//收到的个数
if(index>
11)index=0;
//三个字节一收,时分秒
g_time[index]=uart_re1(UART_1,&
if(0==flag)index++;
//串口2接收中断服务例程
voidisr_uart2_re(void)
ch=uart_re1(UART_2,&
uart_send1(UART_2,ch);
//tpm定时中断
voidtpm0_isr(void)
staticuint_32TPMCounter=0;
//定时器溢出中断标志
if((TPM_SC_REG(TPM0_BASE_PTR)&
TPM_SC_TOF_MASK)==TPM_SC_TOF_MASK)
TPMCounter++;
BSET(TPM_SC_TOF_SHIFT,TPM_SC_REG(TPM0_BASE_PTR));
//清标志位
if(TPMCounter>
100)//TPM每中断100次(即1s)闪烁一次。
TPMCounter=0;
SecAdd1(g_time);
4.3LCD子程序(lcd.c)
//===========================================================================
//文件名称:
lcd.c
//功能概要:
lcd构件头文件
//版权所有:
苏州大学飞思卡尔嵌入式中心()
//版本更新:
2013-03-17V1.2
lcd.h"
//lcd控制位和数据位端口及引脚号
structGPIOLCD[11]=
{LCD_RS_PORT,LCD_RS},
{LCD_RW_PORT,LCD_RW},
{LCD_E_PORT,LCD_E},
{LCD_D0_PORT,LCD_D0},
{LCD_D1_PORT,LCD_D1},
{LCD_D2_PORT,LCD_D2},
{LCD_D3_PORT,LCD_D3},
{LCD_D4_PORT,LCD_D4},
{LCD_D5_PORT,LCD_D5},
{LCD_D6_PORT,LCD_D6},
{LCD_D7_PORT,LCD_D7},
};
//内部函数原型说明
externvoidLCDCommand(uint_8cmd);
//函数名称:
LCDInit
//函数返回:
无
//参数说明:
//功能概要:
LCD初始化。
voidLCDInit()
uint_32i=0;
//定义数据口和控制口为输出
for(i=0;
i<
11;
i++)
gpio_init(LCD[i].gpio_port,LCD[i].gpio_pin,1,0);
//设置指令,RS,R/W=00,写指令代码
gpio_set(LCD[0].gpio_port,LCD[0].gpio_pin,0);
gpio_set(LCD[1].gpio_port,LCD[1].gpio_pin,0);
//功能设置-
//设置指令
LCDCommand(0x38);
//5*7点阵模式,2行显示,8位数据总线
LCDCommand(0x08);
//关显示,关光标显示,不闪烁
LCDCommand(0x01);
//清屏
for(i=0;
i<
40000;
i++)asm("
NOP"
);
//延时
LCDCommand(0x06);
LCDCommand(0x14);
//光标右移一个字符位,AC自动加1
LCDCommand(0x0C);
//开显示,关光标显示,不闪烁
LCDShow
需要显示的数据
/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 课程设计 报告 解答