STM32期末考试答案详解文档格式.docx
- 文档编号:20542677
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:19
- 大小:23.64KB
STM32期末考试答案详解文档格式.docx
《STM32期末考试答案详解文档格式.docx》由会员分享,可在线阅读,更多相关《STM32期末考试答案详解文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
TIM1适合多种用途,包含测量输入信号的脉冲宽度,或者产生输出波形。
使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。
高级控制定时器TIM1和通用控制定时器TIMx是完全独立的,它们不共享任何资源,因此可以同步操作。
2.简述STM32时钟的类型。
STM32提供了三种不同的时钟源,其都可被用来驱动系统时钟SYSCLK,这三种时钟源分别为:
qHSI振荡器时qHSE振荡器时钟qPLL时钟
这三种时钟源还可以有以下2种二级时钟源:
q32kHz低速内部RC,可以用于驱动独立看门狗和RTC。
其中,RTC用于从停机/待机模式下自动唤醒系统。
低速外部晶振也可用来驱动RTC(RTCCLK)。
任一个时钟源都可被独立地启动或关闭,这样可以通过关闭不使用的时钟源来优化整个系统的功耗。
1.简述DMA控制器的根本功能。
STM32的DMA控制器有7个通道,每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。
还有一个仲裁器来协调各个DMA请求的优先权。
DMA控制器和Cortex-M3核共享系统数据线执行直接存储器数据传输。
因此,1个DMA请求占用至少2个周期的CPU访问系统总线时间。
为了保证Cortex-M3核的代码执行的最小带宽,DMA控制器总是在2个连续的DMA请求间释放系统时钟至少1个周期。
NVIC和外部中断:
配置中断0〔LED绿灯闪1次〕,中断1〔LED蓝灯闪2次〕,中断2三个中断〔LED绿灯闪3次〕,执行顺序为0-->
1-->
2
。
〔默认中断0闪烁的是绿灯〕按下按键,绿灯闪(一亮一灭)1次,蓝灯闪2次,然后绿灯闪3次,中断结束。
#include"
stm32l1xx.h"
stdio.h"
discover_board.h"
stm32l_discovery_lcd.h"
stdarg.h"
/*Privatefunctionprototypes-----------------------------------------------*/
voidRCC_Configuration(void);
voidInit_GPIOs(void);
voidDelay(uint32_tnTime);
voidUSART_Configuration(void);
voidEXTI_Configuration(void);
voidNVIC_Configuration(void);
staticvolatileuint32_tTimingDelay;
intmain(void)
{/*ConfigureClocksforApplicationneed*/
RCC_Configuration();
SysTick_Config(16000000/2000);
NVIC_Configuration();
/*InitI/Oports*/
Init_GPIOs();
USART_Configuration();
EXTI_Configuration();
//printf("
\r\nWelcome!
!
\r\n"
);
while
(1)
{//Delay(20);
//printf("
}
}
voidRCC_Configuration(void)
{RCC_DeInit();
/*EnableHSIClock*/
RCC_HSICmd(ENABLE);
/*!
<
WaittillHSIisready*/
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)==RESET)
{}
/*RCC_PLLCmd(DISABLE);
RCC_PLLConfig(RCC_PLLSource_HSI,RCC_PLLMul_3,RCC_PLLDiv_2);
RCC_PLLCmd(ENABLE);
*/
WaittillPLLisready*/
//while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)
//{}
//RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
RCC_MSIRangeConfig(RCC_MSIRange_6);
RCC_HSEConfig(RCC_HSE_OFF);
if(RCC_GetFlagStatus(RCC_FLAG_HSERDY)!
=RESET)
{while
(1);
}
/*EnablecomparatorclockLCDandPWRmngt*/
//RCC_APB1PeriphClockCmd(RCC_APB1Periph_LCD|RCC_APB1Periph_PWR,ENABLE);
/*EnableADCclock&
SYSCFG*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_SYSCFG|RCC_APB2Periph_USART1,ENABLE);
voidInit_GPIOs(void)
{GPIO_InitTypeDefGPIO_InitStructure;
/*EnableGPIOsclock*/
RCC_AHBPeriphClockCmd(LD_GPIO_PORT_CLK|USERBUTTON_GPIO_CLK,ENABLE);
/*ConfigureUserButtonpinasinput*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
//USERBUTTON_GPIO_PIN
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_40MHz;
GPIO_Init(USERBUTTON_GPIO_PORT,&
GPIO_InitStructure);
/*ConfiguretheGPIO_LEDpinsLD3&
LD4*/
GPIO_InitStructure.GPIO_Pin=LD_GREEN_GPIO_PIN|LD_BLUE_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_Init(LD_GPIO_PORT,&
//GPIO_LOW(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);
//GPIO_LOW(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);
/*ConfiguretheUSART1_GPIO_PORT*/
/*ConnectPA9toUSART1_Tx*/
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
/*ConnectPA10toUSART1_Rx*/
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
/*ConfigureUSART1_TxandUSART1_Rxasalternatefunction*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOA,&
/*EnableallGPIOsclock*/
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB|
RCC_AHBPeriph_GPIOC|RCC_AHBPeriph_GPIOD|
RCC_AHBPeriph_GPIOE|RCC_AHBPeriph_GPIOH,ENABLE);
}
voidUSART_Configuration(void)
{
USART_InitTypeDefUSART_InitStructure;
USART_ClockInitTypeDefUSART_ClockIni;
USART_InitStructure.USART_BaudRate=9600;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_Init(USART1,&
USART_InitStructure);
USART_ClockIni.USART_Clock=USART_Clock_Disable;
USART_ClockIni.USART_CPOL=USART_CPOL_Low;
USART_ClockIni.USART_CPHA=USART_CPHA_2Edge;
USART_ClockIni.USART_LastBit=USART_LastBit_Disable;
USART_ClockInit(USART1,&
USART_ClockIni);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_Cmd(USART1,ENABLE)
voidEXTI_Configuration()
{EXTI_InitTypeDefEXTI_InitStructure;
/定义PA0,PA1,PA2为外部中断输入通道/
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource1);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource2);
/*ConfigureEXT1Line012ininterruptmodetriggedonFallingedge*/
EXTI_InitStructure.EXTI_Line=EXTI_Line0|EXTI_Line1|EXTI_Line2;
//PA0forUserbutton
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init(&
EXTI_InitStructure);
voidNVIC_Configuration()
{NVIC_InitTypeDefNVIC_InitStructure;
#ifdefVECT_TAB_RAM
//È
ç
¹
û
C/C++Compiler\Preprocessor\DefinedsymbolsÖ
Ð
µ
Ä
¶
¨
Ò
å
Á
Ë
VECT_TAB_RAM£
¼
³
Ì
ò
¿
â
¸
ü
Ú
È
Ý
±
í
ñ
£
©
NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);
//Ô
Ô
RAMµ
÷
Ê
#else//È
Ã
»
Ó
VECT_TAB_RAM
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
//Ô
FlashÀ
ï
#endif//½
á
ø
Å
Ï
¾
ä
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/*EnableandsetEXTI0Interrupttothelowestpriority*/
NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&
NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
voidDelay(uint32_tnTime)
{TimingDelay=nTime;
while(TimingDelay!
=0);
voidTimingDelay_Decrement(void)
if(TimingDelay!
=0x00)
{TimingDelay--;
intfputc(intch,FILE*f)
{USART_SendData(USART1,(unsignedchar)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
returnch;
stm32l1xx_it.h"
main.h"
voidNMI_Handler(void){}
voidHardFault_Handler(void)
{/*GotoinfiniteloopwhenHardFaultexceptionoccurs*/
while
(1){}
voidMemManage_Handler(void)
{/*GotoinfiniteloopwhenMemoryManageexceptionoccurs*/
voidBusFault_Handler(void)
{/*GotoinfiniteloopwhenBusFaultexceptionoccurs*/
voidUsageFault_Handler(void)
{/*GotoinfiniteloopwhenUsageFaultexceptionoccurs*/
while
(1){}
voidSVC_Handler(void){}
voidDebugMon_Handler(void){}
voidPendSV_Handler(void){}
voidSysTick_Handler(void)
TimingDelay_Decrement();
voidDMA1_Channel1_IRQHandler(void){}
voidRTC_WKUP_IRQHandler(void){}
voidEXTI0_IRQHandler(void)
{inti;
GPIO_TOGGLE(LD_GPIO_PORT,LD_GREEN_GPIO_PIN);
for(i=0;
i<
500000;
i++){}
EXTI_GenerateSWInterrupt(EXTI_Line1);
EXTI_ClearFlag(EXTI_Line0);
voidEXTI1_IRQHandler(void)
inti;
GPIO_TOGGLE(LD_GPIO_PORT,LD_BLUE_GPIO_PIN);
EXTI_GenerateSWInterrupt(EXTI_Line2);
EXTI_ClearFlag(EXTI_Line1);
voidEXTI2_IRQHandler(void)
GPIO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32 期末考试 答案 详解