嵌入式系统原理一、选择题(30分)1、假设Cortex-M4处理器的3级流水线,每级所耗时间均为0.1ms,不考虑流水线“断流”则顺序执行50条指令需要耗费时间____5.2___2、在下面的寄存器中,只能在特权级下进行访问的是()A.PCB.MSPC.R3 DAPSR3、若R0的值为4,执行指令ORR R0,R0,#3后,R0的值是___7____4、下列指令中会对内存单元进行写操作的是()A. Add r0,r1,r2,lsl#1B.ldr r0,[r1]C. bic r0,r0,#3D.mov r0,r15、下列指令中,寻址方式为基址变址寻址的是()A.ldr r0,[r1,#0x0f]B.mov r0,r1C.ldr r0,[r1]D.add r0,r1,r2,lsl#16、按照ATPCS规则,子程序的第5个参数通过__堆栈__传递。
7、若要把F组GPIO的模式寄存器GPIO_MODER的bit3和bit2位设置为二进制01,而其他位不变,下面可以实现这一功能的正确表达式是()A.GPIOF_MODER &=(~0x3)|0x1;B.GPIOF_MODER=0x1;C.GPIOF_MODER &=(0x3<<2)|(0x1<<2);D.GPIOF_MODER &=(~(0x3<<2))|(0x1<<2);8、STM32F439的主锁相环(PLL)时钟是否就绪,可通过寄存器()进行判断。
A.RCC_CFGRB.RCC_PLLCFGRC.RCC_CRD.RCC_CIR9、STM32F439的US ART1完成初始化工作后,若要发送数据,只要把需要发送的数据写入寄存器() ART1_SR ART1_DR ART1_BRR ART1_CR110、下列异常中,优先级可编程配置的异常是()A.NMIB.Hard faultC.SVCD.RESET11、若已知STM32F439通用定时器TIM3预分频器的时钟由内部时钟CK_INT提供,CN_INT的频率为20MHz,预分频寄存器的值为1,要实现2us的定时,自动重载寄存器的值应为__19=ARR ___12、STM32F439的通用定时器TIM14,工作在PWM模式时,在计数器时钟频率不变的情况下,输出PWM波形的周期取决于寄存器()。
A.TIM14_CCR1B.TIM14_ARRC.TIM14_CR1D.TIM14_SR13、Cortex_M4内核的嵌套向量中断控制器NVIC,要禁止一个中断,需要对寄存器()对应的位进行写1操作。
A.NVIC_ICERnB.NVIC_ISERnC.NVIC_ICPRnD.NVIC_ISPRn14、STM32F439的外部中断/事件控制器EXTI,若要允许某个输入线下降沿触发中断和事件,需要设置的寄存器是(c)。
A.EXTI_PRB.EXTI_RTSRC.EXTI_FTSRD.EXTI_IMR15、要取消STM32F439独立看门狗寄存器IWDG_PR的写保护,要对寄存器IWDG_KR寄存器写入____ 0x5555_____二、填空题(20分)1、STM32F439复位后默认的运行模式是__线性模式________ ,默认级别是__特权级________。
2、Cortex_M4三级流水线的三个阶段分别是____取指_____、___译码_______、__执行________3、Cortex_M4内核复位后,读取0x00000000地址单元的值作为寄存器_(MSP)___的初始值;读取0x00000004地址单元的值作为寄存器__(PC)___的初始值。
4、把CONTROL的值读取到R0,完整的汇编指令是___(mrs r0,control)______;把R0的值写入到CONTROL,完整的汇编指令是____(msr control,r0)_________5、伪操作IMPORT的作用是___声明需要应用的标号在其他文件中_。
6、Cortex_M4处理器嵌套向量中断控制器(NVIC)的中断控制器类型寄存器(NVIC_ICTR),主要用于_____显示NVIC支持的中断线数目_____。
7、通用寄存器TIM14主要由__触发控制器___、__时基单元__、_输入捕获通道__和__输出比较通道__组成。
8、伪指令ldr r0,=label的功能是_____将label标号地址传递给r0___。
9、STM32F439时钟数中,系统时钟SYSCLK的来源有三个,分别是:___HSI___、___HSE____和___PLLCLK_________,其中__ PLLCLK ____是由主锁相环倍频分频产生。
三、简答题(20分)1、Cortex_M4处理器的一个异常或中断被发出后,硬件自动完成了哪些操作?(10分)所有异常都在处理模式中操作。
出现异常时,自动将处理器状态保存到堆栈中,并在中断服务程序(ISR)结束时自动从堆栈中恢复。
在状态保存的同事取出向量快速地进入中断。
异常进入当CM4处理器的一个异常或中断被触发,硬件中断完成如下工作:(1)CM4中断控制器根据当前状态和中断的抢占级别来确定是响应应该中断,还是先挂起,并更新相应的寄存器状态。
(2)通过Dbus保存处理器状态,将下面的8个寄存器按顺序保存入SP(MSP或PSP)指向的系统堆栈。
(3)CM4通过Ibus从异常向量表取得对应的中断向量,并开始读取ISR指令,这一步几乎与压栈同时进行。
(4)CM4处理器更新到handler模式,SP切换到MSP,更新IPSR为新响应的异常编号,更新PC,更新LR寄存器为EXC_RETURN。
2、画出STM32F439独立看门狗的结构框图,并简述独立看门狗的工作原理。
(10分)答:工作原理在键值寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗。
此时计数器开始从其复位值0xFFF 递减,当计数器值计数到尾值0x000时会产生一个复位信号(IWDG_RESET)。
无论何时,只要在键值寄存器IWDG_KR中写入0xAAAA(即喂狗), 自动重装载寄存器IWDG_RLR的值就会重新加载到计数器,从而避免看门狗复位。
如果程序异常,就无法正常喂狗,从而系统复位。
作业3:画出STM32F439通用定时器PWM输出原理示意图,并简述TIM14输出PWM波形的原理。
答:工作原理定时器TIM14工作在向上计数 PWM模式,且当CNT<CCRx 时,输出0,当CNT>=CCRx 时输出1。
那么就可以得到如上的 PWM示意图:当 CNT 值小于 CCRx 的时候, IO 输出低电平(0),当 CNT 值大于等于 CCRx 的时候,IO 输出高电平(1),当 CNT 达到 ARR值的时候,重新归零,然后重新向上计数,依次循环。
改变CCRx的值,可改变PWM输出的占空比,改变ARR的值,可改变PWM输出的频率。
四、程序分析与设计题(30分)1、查阅串口相关参考手册,根据注释完善串口2的初始化函数**************************************功能: USART2的初始化参数: pclk1:USART2所连接的APB1总线时钟频率baud:USART2发送/接收波特率返回值:void***************************************void USART2_init(unsigned int pclk1,unsigned int baud){unsigned short int mantissa;unsigned char fraction;RCC_AHB1ENR |= 1<<0; //GPIOA时钟使能RCC_APB2ENR |= 1<<17; //USART2时钟使能GPIOA_MODER = GPIOA_MODER&(~(3<<4))|(2<<4); //设置PA2为复用功能模式GPIOA_MODER= GPIOA_MODER&(~(3<<6))|(2<<6); //设置PA3为复用功能模式GPIOA_OTYPER &= ~(1<<2); //设置PA2为推挽输出GPIOA_OTYPER &= ~(1<<3) //设置PA3为推挽输出GPIOA_OSPEEDR = GPIOA_OSPEEDR&(~(3<<4))|(2<<4); //设置PA2为50MHz快速GPIOA_OSPEEDR= GPIOA_OSPEEDR&(~(3<<6))|(2<<6); //设置PA3为50MHz快速GPIOA_PUPDR = GPIOA_PUPDR&(~(3<<4))|(1<<4); //设置PA2上拉GPIOA_PUPDR = GPIOA_PUPDR&(~(3<<6))|(1<<6); //设置PA3上拉GPIOA_AFRH = GPIOA_AFRH&(~(0xf<<8))|(7<<8); //将PA2复用为USART2_TXGPIOA_AFRH = GPIOA_AFRH&(~(0xf<<12))|(7<<12); //将PA3复用为USART2_RXUSART2_CR1&= ~((1<<12)|(1<<10)); //1个起始位,8个数据位,n个停止位,禁止奇偶校验USART2_CR2 &= ~(3<<12); //1个停止位USART2_CR3 &= ~(3<<8); //禁止CTS、RTS硬件流控USART2_CR1 &= ~(1<<15); //16倍过采样,即OVER8=0//计算得出USARTDIV的尾数mantissa=(unsigned short int)((pclk1*1000000)/(baud*(8*(2-0))));//计算得出USARTDIV的尾数fraction=(unsigned char)(((pclk1*1000000)/(baud*(8*(2-0)))-mantissa)*16);//将得到的尾数和小数设置波特率寄存器USART2_BRRUSART2_BRR = USART1_BRR&(~(0xffff<<0))|(mantissa<<4)|(fraction<<0);USART2_CR1|= (1<<13)|(1<<3)|(1<<2); //使能USART,使能发送器,使能接收器}2、用C语言编程控制与引脚PF9相连的LED闪烁,亮灭间隔用延时实现。