赞
踩
1.使能GPIO时钟(重映射后的IO); 使能功能外设时钟(例如串口1);
2.使能AFIO时钟。重映射必须使能AFIO时钟: RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
3.开启重映射。 GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
根据第一个参数,来确定是部分重映射还是全部重映射
1.系统运行后先设置中断优先级分组。 调用函数: void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup); 整个系统执行过程中,只设置一次中断分组。
2.针对每个中断,设置对应的抢占优先级和响应优先级: void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
如果需要挂起/解挂,查看中断当前激活状态,分别调用相关函数即可。
1.串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();
2.串口复位:USART_DeInit(); 这一步不是必须的
3.GPIO端口模式设置:GPIO_Init();
4.串口参数初始化:USART_Init();
5.开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤) NVIC_Init(); USART_ITConfig();
6.使能串口:USART_Cmd();
7.编写中断处理函数:USARTx_IRQHandler();
8.串口数据收发: void USART_SendData();//发送数据到串口,DR uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
9.串口传输状态获取: FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);
1.初始化IO口为输入。 GPIO_Init();
2.开启IO口复用时钟。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
3.设置IO口与中断线的映射关系。 void GPIO_EXTILineConfig();
4.初始化线上中断,设置触发条件等。 EXTI_Init();
5.配置中断分组(NVIC),并使能中断。 NVIC_Init();
6. 编写中断服务函数。 EXTIx_IRQHandler();
7.清除中断标志位 EXTI_ClearITPendingBit();
1.取消寄存器写保护: IWDG_WriteAccessCmd();
2. 设置独立看门狗的预分频系数,确定时钟: IWDG_SetPrescaler();
3. 设置看门狗重装载值,确定溢出时间: IWDG_SetReload();
4. 使能看门狗 ; IWDG_Enable();
5. 应用程序喂狗: IWDG_ReloadCounter();
溢出时间计算:Tout=((4×2^prer) ×rlr) /40 (M3)
1.使能看门狗时钟: RCC_APB1PeriphClockCmd();
2. 设置分频系数: WWDG_SetPrescaler();
3.设置上窗口值: WWDG_SetWindowValue();
4.开启提前唤醒中断并分组(可选): WWDG_EnableIT(); NVIC_Init();
5.使能看门狗: WWDG_Enable();
6.喂狗: WWDG_SetCounter();
7.编写中断服务函数 WWDG_IRQHandler();
1. 能定时器时钟。 RCC_APB1PeriphClockCmd();
2. 初始化定时器,配置ARR,PSC。 TIM_TimeBaseInit();
3.开启定时器中断,配置NVIC。 void TIM_ITConfig(); NVIC_Init();
4. 使能定时器。 TIM_Cmd();
5. 编写中断服务函数。 TIMx_IRQHandler();
1.使能定时器和相关IO口时钟。
使能定时器时钟:RCC_APB1PeriphClockCmd();
使能GPIOB时钟:RCC_APB2PeriphClockCmd();
2. 初始化IO口为复用功能输出。函数: GPIO_Init(); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
3.这里我们是要把PB5用作定时器的PWM输出引脚,所以要重映射配置, 所以需要开启AFIO时钟。同时设置重映射。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
4. 初始化定时器:ARR,PSC等:TIM_TimeBaseInit();
5. 初始化输出比较参数:TIM_OC2Init();
6. 使能预装载寄存器: TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
7. 使能定时器。TIM_Cmd();
8. 不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare2()
1.初始化定时器和通道对应IO的时钟。
2.初始化IO口,模式为输入: GPIO_Init(); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 输入
3.初始化定时器ARR,PSC TIM_TimeBaseInit();
4.初始化输入捕获通道 TIM_ICInit();
5.如果要开启捕获中断, TIM_ITConfig(); NVIC_Init();
6.使能定时器:TIM_Cmd();
7.编写中断服务函数:TIMx_IRQHandler();
1.开启PA口时钟和ADC1时钟,设置PA1为模拟输入。 GPIO_Init(); APB2PeriphClockCmd();
2.复位ADC1,同时设置ADC1分频因子。 RCC_ADCCLKConfig(RCC_PCLK2_Div6); ADC_DeInit(ADC1);
3.初始化ADC1参数,设置ADC1的工作模式以及规则序列的相关信息。 void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);
4.使能ADC并校准。 ADC_Cmd(ADC1, ENABLE);
5.配置规则通道参数: ADC_RegularChannelConfig();
6.开启软件转换:ADC_SoftwareStartConvCmd(ADC1);
7.等待转换完成,读取ADC值。 ADC_GetConversionValue(ADC1);
1.选择ADC_IN16输入通道。
2. 设置采样时间大于17.1us
3.设置ADC_CR2的TSVREFE位,打开内部温度传感器
4. 设置ADON位启动转换
5.读取ADC结果
6.计算。
1使能DMA时钟 RCC_AHBPeriphClockCmd();
2.初始化DMA通道参数 DMA_Init();
3.使能串口DMA发送,串口DMA使能函数: USART_DMACmd();
4.使能DMA1通道,启动传输。 DMA_Cmd();
5.查询DMA传输状态 DMA_GetFlagStatus();
6.获取/设置通道当前剩余数据量: DMA_GetCurrDataCounter(); DMA_SetCurrDataCounter();
1.配置相关引脚的复用功能,使能SPIx时钟 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
2.初始化SPIx,设置SPIx工作模式 void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct);
3.使能SPIx void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);
4.SPI传输数据 void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data); uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx) ;
5.查看SPI传输状态 SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。