云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 第5章-作业题

第5章-作业题

  • 62 次阅读
  • 3 次下载
  • 2025/12/11 16:45:03

第5章 ARM Cortex_M3微控制器

一 填空题

LM3S微控制器的片上资源有I/O口、UART、A/D、GPTM、SSI总线、I2C总线、PWM、CAN、以太网、USB。

1. Stellaris微控制器提供一个集成的LDO稳压电源,电压调节范围是:2.25-2.75V。 2. Stellaris微控制器通常情况下有__系统时种、PWM时种、A/D采样时种、CAN模块时钟输出。

3. 睡眠模式指的是内核和存储器都不工作,外设可以正常工作,系统时钟与运行模式相同。

4. 深度睡眠模式指的是内核和存储器都不工作,外设可以正常工作,系统时钟只能使用主振荡器。

5. Stellaris微控制器系统需要_3.3_V的电源供电。

6. Stellaris微控制器的每一个I/O口都可用于通用I/O、中断、特殊功能等功能。

7. LM3S的定时器包含4个GPTM模块,可工作于32、16位定时模式,16位输入捕获

模式,16位PWM模式。

8. MCS-51单片机中的16位定时器属于加1计数模式,LM3S微控制器的GPTM属于

减1计数模式。

9. LM3S的串口功能有通用异步串口通信_、_红外通信模式两种主功能。 10. LM3S的ADC模块是属于10位A/D转换器。最大转换频率为1Mbps。工作时采用基于序列采样方式使一次可以完成多路模拟量的采集。 二 简答题

11. Stellaris微控制器内部和外部的晶振频率范围是多少?使用PLL功能时的工作频率是

多少? 答:内部采用12MHz时种,外部采用0~8MHz,PLL工作可以将低频时钟倍频到200MHz。 12. 请利用库函数设置外部晶振8MHz,利PLL后,让系统内核时钟为20MHz。 答:

SysCtlClock(SYSCTL_XTAL_8MHZ|SYSCTL_OSC_MAIN|SYSCTL_USE_PLL|SYSCTL_SYSDIV_10)

13. 请利用库函数设置处理器进入睡眠模式,并说明如何退出睡眠模式? 答:进入睡眠模式:SysCtlSleep()

退出睡眠模式:任何一个中断都可以使进入睡眠状的处理器退出睡眠模式。 14. 操作定时器让开发板上的4只LED软流流发光,其亮灭时间为0.5s。

发光二极管电路原理如图所示,系统时钟采用外接6MHz,先进行预分频100,变成频率为60000Hz,周期为

11(s),再计数30000次(x30000(s)?0.5s)。

6000060000

代码:

主程序:时种配置、外围模块的使能、定时器0设置成16位周期定时,预分频100,初值为30000。 void main() {

SysCtlClockSet(SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|SYSCTL_XTAL_6MHZ |SYSCTL_SYSDIV_1); SysCtlPeriEnable(SYSCTL_PERIPH_GPIOB); //使能B口

GPIOPinTypeOut(GPIO_PORTB_BASE, GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6); //管脚输出 SysCtlPeriEnable(SYSCTL_PERIPH_TIMER0); //使能Timer0模块

TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR |TIMER_CFG_A_PERIODIC); //16位周期定时 TimerPrescaleSet(TIMER0_BASE, TIMER_A, 99); //预先进行100分频(6M/100)=60000 TimerLoadSet(TIMER0_BASE, TIMER_A, 30000);// 设置Timer初值,定时500ms TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); //使能Timer超时中断 IntEnable(INT_TIMER0A); // 使能Timer中断 IntMasterEnable(); //使能处理器中断 TimerEnable(TIMER0_BASE, TIMER_A); //使能Timer计数 while(1){;} //循环 }

中断服务程序:间隔0.5s,PB1、PB4、PB5、PB6依次输出1,点亮四只发光二极管。 void Timer0A_ISR(void) {

unsigned char i; unsigned long ulStatus;

ulStatus = TimerIntStatus(TIMER0_BASE, true); // 读取中断状态 TimerIntClear(TIMER0_BASE, ulStatus); // 清除中断状态,重要 switch (i) {

case 0:GPIOPinWrite(GPIO_PORTB_BASE,0XFF, 0X02); break; case 1:GPIOPinWrite(GPIO_PORTB_BASE,0XFF, 0X10); break; case 2:GPIOPinWrite(GPIO_PORTB_BASE,0XFF, 0X20); break; case 3:GPIOPinWrite(GPIO_PORTB_BASE,0XFF, 0X40); break;} i++; if(i==4) {i=0} }

15. 编写程序实现将开发板上的A/D模块采集到的电压数据用串行通信口送到PC机,PC

机通过串口调式精灵或超级终端端观看数据。 答:

void uartInit(void) {

SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); // 使能UART模块

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); // 使能RX/TX所在的GPIO端口 UARTConfigSet(UART0_BASE, // 配置UART端口 115200, // 波特率:9600

GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); // 配置RX/TX所在管脚为

UART_CONFIG_WLEN_8 | // 数据位:8 UART_CONFIG_STOP_ONE | // 停止位:1 UART_CONFIG_PAR_NONE); // 校验位:无 UARTEnable(UART0_BASE); // 使能UART端口 }

void adcInit(void) {

SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC); // 使能ADC模块的时钟 SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); //125KSps采样率 ADCSequenceDisable(ADC_BASE, 0); //禁能所有采样序列

ADCSequenceConfigure(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0); //采样序列0为处理器触发,优先级为0

ADCSequenceStepConfigure(ADC_BASE, 0, 0, ADC_CTL_CH0 | ADC_CTL_END); //样序列0的第0步使用ADC0通道,完成第0步后结束

ADCSequenceEnable(ADC_BASE, 0); // 使能采样序列0 }

Include <>

#define HWREG(x) (*((volatile unsigned long *)(x))) #define UART0_DATA 0x4000C000

#define UART0_FLAG 0x4000C018 /*UART标置寄存器*/ Void main() {

unsigned int ulData; uartInit(); adcInit(); while(1) {

ADCProcessorTrigger(ADC_BASE, 0); //处理器触发采样序列0 while( (HWREG(ADC_BASE + ADC_O_X_SSFSTAT) & 0x00000100) );

// 等待FIFO 0为非空,即等待转换结束

ADCSequenceDataGet(ADC_BASE, 0, &ulData); //读出10位转换结果 ulData = (ulData * 1000 * 3.3) / 1024; //换算成真实电压值,单位mV HWREG(UART0_DATA)=ulData; //数据发给你串口 while((HWREG(UART0_FLAG)&0x8)); //检测发送完毕 } }

16. 编程实现SSI驱动8位数码管显示,并显示0、1、2、3、4、5、6、7,结合RTC显

示实时时钟。 答:

程序代码:

#include 《lm3sxxxx.h》

#define BitRate 115200 //设定波特率

#define DataWidth 16 //16位宽

unsigned char dispBuf[8]; // 定义显示缓冲区

unsigned short DISP_TAB[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; //段码 const unsigned char DigTab[8] = {0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08 }; // 定义数码管位选数据 int main (void) {

unsigned char n=0; unsigned short t;

SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI); //为SSI提供时钟 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); //为GPIOA端口提供时钟 /* 设置SPI为主机模式0,16位数据宽度,115200的波特率*/

SSIConfig(SSI_BASE, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, BitRate, DataWidth); SSIEnable(SSI_BASE); // 使能SPI

/* 设定 GPIO A 2~5 引脚为使用外设功能*/

GPIOPinTypeSSI(GPIO_PORTA_BASE, (GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5)); //设置SSI管脚 while (1) {

for (n=0; n<=7; n++) {

t = DigTab[n]; // 获取位选数据 t <<= 8; // 位选数据放在高8位 t |= DISP_TAB[dispBuf[n]];; // 段选数据放在低8位 SSIDataPut(SSI_BASE, t); // 输出数据,共16个有效位 } }

//SysCtlDelay(20 * (TheSysClock / 3000));

}

17. 编程用PWM实现直流电机转速控制。 答:

/******************************************************************************************* LM3S系列PWM例程:在PB0/PWM2和PB1/PWM3管脚产生占空比不同的PWM方波

*******************************************************************************************/ #include \#include \#include \#include \#include \

#define PB0_PWM2 GPIO_PIN_0 #define PB1_PWM3 GPIO_PIN_1 int main (void) {

SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|

SYSCTL_XTAL_6MHZ);

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); //使能PWM2和PWM3输出所在GPIO SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM); //使能PWM模块 SysCtlPWMClockSet(SYSCTL_PWMDIV_1); //PWM时钟配置:不分频

GPIOPinTypePWM(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1)); //PB0和PB1配置为PWM功能

PWMGenConfigure(PWM_BASE, PWM_GEN_1, //配置PWM发生器1:加减计数 PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);

PWMGenPeriodSet(PWM_BASE, PWM_GEN_1, 6000); //设置PWM发生器1的周期 PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, 4200); //设置PWM2输出的脉冲宽度 PWMPulseWidthSet(PWM_BASE, PWM_OUT_3, 2100); // 设置PWM3输出的脉冲宽度 PWMOutputState(PWM_BASE, (PWM_OUT_2_BIT | PWM_OUT_3_BIT), true); //使能PWM2和PWM3的输出

PWMGenEnable(PWM_BASE, PWM_GEN_1); // 使能PWM发生器1, 开始产生PWM方波 for (;;) { } }

搜索更多关于: 第5章-作业题 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

第5章 ARM Cortex_M3微控制器 一 填空题 LM3S微控制器的片上资源有I/O口、UART、A/D、GPTM、SSI总线、I2C总线、PWM、CAN、以太网、USB。 1. Stellaris微控制器提供一个集成的LDO稳压电源,电压调节范围是:2.25-2.75V。 2. Stellaris微控制器通常情况下有__系统时种、PWM时种、A/D采样时种、CAN模块时钟输出。 3. 睡眠模式指的是内核和存储器都不工作,外设可以正常工作,系统时钟与运行模式相同。 4. 深度睡眠模式指的是内核和存储器都不工作,外设可以正常工作,系统时钟只能使用主振荡器。 5. Stellaris微控制器系统需要_3.3_V的电源供电。 6. Stellaris微控制器的每一个I/O口都可用于通用I

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com