B7上,简述其引脚配置步骤。
4、 STM32有5个时钟源,请写出其英文缩写和英文全称。
5、 试闸述抢占式优先级(PreemptionPriority)和响应优先级(SubPriority)的区别。 6、 若通过定时器的PWM功能,来调整LED灯的亮度,实现亮度由暗变亮,又由亮变暗,
也就是常说的呼吸灯功能,试闸述其实现步骤。
五、 综合题
1、 如图所示为某实际工程中STM32F0的时钟系统配置
问:该工程采用驱动系统时钟,系统选用为SYSCLK,外设时钟频率为MHz,独立看门狗的时钟为KHz,PLL输入时钟为MHz。
2、 某工程中,SPI器件接口时序图如下图所示,试使用标准库函数完成SPI主设备的
初始化程序。
static void SPI2_Init(void) {
SPI_InitTypeDefSPI_InitStructure;
NVIC_InitTypeDefNVIC_InitStructure;
//PA15:RST PB12:DC PB13:CLK:D0 PB15:data:D1
(RCC_APB1Periph_SPI2,ENABLE);
SPI2_GpioInit();
SPI_I2S_DeInit(SPI2);
SPI_InitStructure.SPI_Direction = ; //全双工模式
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //作为主机使用 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //数据长度8 SPI_InitStructure.SPI_CPOL =; SPI_InitStructure.SPI_CPHA = ;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler =SPI_BaudRatePrescaler_16;//480Kbps SPI_InitStructure.SPI_FirstBit = ; SPI_InitStructure.SPI_CRCPolynomial = 0; SPI_Init(SPI2,&SPI_InitStructure); SPI_Cmd(SPI2,ENABLE);
/* Configure the SPI interrupt priority */
NVIC_InitStructure.NVIC_IRQChannel = SPI2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
/* Enable the Rx buffer not empty interrupt */ SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_RXNE, ENABLE); // /* Enable the Tx buffer empty interrupt */ SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_TXE, DISABLE); SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_OVR, DISABLE); SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE); SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_RXNE);
SPI_I2S_ClearITPendingBit(SPI2,SPI_I2S_IT_TXE); SPI_I2S_ClearITPendingBit(SPI2,SPI_I2S_IT_RXNE); }
3、 以下程序使用HAL库,使用STM32F030单片机实现的串口通讯程序,试阅读程序,
回答问题。/* USART1 init function */
static void MX_USART1_UART_Init(void) {
huart1.Instance = USART1; huart1.Init.BaudRate = 9600;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; if (HAL_UART_Init(&huart1) != HAL_OK) {
_Error_Handler(__FILE__, __LINE__); } } …… __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);//打开空闲中断 __HAL_UART_DISABLE_IT(&huart1,UART_IT_RXNE); __HAL_UART_DISABLE_IT(&huart1,UART_IT_TXE); HAL_UART_Receive_DMA(&huart1, Uart1Data.uart1Rxbuf, Uart_DataRxLength);//打开空闲中断,初始化DMA接收
该初始化程序指定的波特率、数据位、校验位和停止位分别是。 该程序使用什么方式接收数据? 打开空闲中断的目的是什么?
4、 以下程序使用的单片机(STM32F205RG,SYSCLK配置为120MHz)定时器2(APB1为60
MHz)的初始化程序,试阅读程序,回答问题。
static void TIM2_Config(u32 HZ,float Ratio)// PWM {
uint32_t ARR;
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure; TIM_OCInitTypeDefTIM_OCInitStructure; ARR = (60000000 / HZ-1);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_TIM2);//
TIM_TimeBaseStructure.TIM_Period = ARR; //between 0x0000 and 0xFFFF TIM_TimeBaseStructure.TIM_Prescaler = 0; //
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x00; TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; TIM_OCInitStructure.TIM_Pulse = (uint32_t)(ARR * Ratio);// TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;// TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset; TIM_OC4Init(TIM2,&TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM2, ENABLE); TIM_ClearFlag(TIM2,TIM_FLAG_Update); TIM_ClearFlag(TIM2,TIM_FLAG_CC4); TIM_Cmd(TIM2,ENABLE);
TIM_CtrlPWMOutputs(TIM2,ENABLE);
}
1)该程序配置TIM2利用其捕获比较功能产生信号。
2)该初始化程序两个参数用于设置,在引用的时候,第一个参数应该不小于,第二个参数应该在0~1之间。 3)生成的信号从端口输出。
4)TIM2的计数模式为向上计数、向下计数还是中央对齐?
5、 以下程序是STM32F205单片机的独立看门狗初始化程序,阅读程序,回答问题。
static void IWDG_Init(void) {
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); IWDG_SetPrescaler(IWDG_Prescaler_256); // IWDG_SetReload(2500); IWDG_ReloadCounter(); IWDG_Enable(); }
1)F2系列的LSI是32KHz,所以必须在秒内喂狗。 2)喂狗时应该调用的函数是:
3)IWDG_WriteAccessCmd()的功能是取消写保护,对哪两个寄存器有效?
4)如果在IWDG_Enable();前插一句IWDG_WriteAccessCmd(IWDG_WriteAccess_Diable);还能否正常喂狗?
6、 试阅读下面的程序,回答问题。
//adc1 dma2 channel0 stream0
static void ADC1_Mode_Config(void) { DMA_InitTypeDefDMA_InitStructure; ADC_InitTypeDefADC_InitStructure; ADC_CommonInitTypeDefADC_CommonInitStructure; GPIO_InitTypeDefGPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);