stm32外设指的是单片机外部的外围功能模块,比如键盘控制芯片,液晶,A/D转换芯片,等等。外设可通过单片机的I/O,SPI,I2C等总线控制。
常见stm32外设:基本IO、定时器TIM、串口USART、ADC模数转换、DAC数模转换、SPI串行通信、EXIT外部中断、BKP备份数据、RTC闹钟SysTick系统滴答、WDG看门狗(独立+窗口)、DMA传输数据、片内FLASH编程、FSMC读写外部SRAM、外部NorFlash操作等。
stm32外设的初始化和设置:
在设置一个外设前,必须调用以下一个函数来使能它的时钟
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_PPPx,ENABLE);
1,在主应用文件中声明一个结构PPP_InitTypeDef,例如:PPP_InitTypeDef
PPP_InitStructure;
2,为变量PPP_InitStructure的各个结构成员填入允许的值。可以采用以下2种方式:
a)PPP_InitStructure.member1=val1;
b)PPP_StructInit(&PPP_InitStructure)PP_InitStructure.memberX=valX;
3,调用函数PPP_Init()来初始化外设PPP;
4,在这一步,外设PPP已被初始化。可以调用函数PPP_Cmd()来使能之。
使用STM32外设的步骤
1,PPP_Init()函数,其功能是根据PPP_InitTypeDef中指定的参数,初始化外设PPP,如TIM_Init()名为PPP_DeInit()函数,其功能为复位外设PPP的所有寄存器至缺省值。
2,PPP_StructInit()函数,其功能为通过设置PPP_InitTypeDef结构中的各种参数来定义外设的功能,例如:USART_StructInit()
3,PPP_Cmd()函数,其功能为使能或者失能外设PPP,例如:SPI_Cmd
4,PPP_ITConfig()函数,其功能为使能或者失能来自外设PPP的中断源,例如:RCC_ITConfig
5,PPP_DMAConfig()的函数,其功能为使能或者失能外PPP的DMA接口
6,PPP_GetFlagStatus()的函数,其功能为检查外设PPP某标志位被设置与否
7,PPP_ClearFlag()的函数,其功能为清除外设PPP标志位,例如:I2C_ClearFlag.
8,PPP_GetITStatus()的函数,其功能为判断来自外设PPP的中断发生与否
9,PPP_ClearITPendingBit()的函数,其功能为清除外设PPP中断待处理标志位
STM32外设使用要点
1、时钟安全系统(CSS)
时钟安全系统被激活后,时钟监控器将实时监控外部高速振荡器;如果HSE时钟发生故障,外部振荡器自动被关闭,产生时钟安全中断,该中断被连接到Cortex-M3的NMI的中断;同时CSS将内部RC振荡器切换为STM32的系统时钟源(对于STM32F103,时钟失效事件还将被送到高级定时器TIM1的刹车输入端,用以实现电机保护控制)。
操作流程:
1)、启动时钟安全系统CSS: RCC_ClockSecuritySystemCmd(ENABLE); (NMI中断是不可屏蔽的!)
2)外部振荡器失效时,产生NMI中断,对应的中断程序:
void NMIException(void)
{
if (RCC_GetITStatus(RCC_IT_CSS) ! RESET)
{ // HSE、PLL已被禁止(但是PLL设置未变)
…… // 客户添加相应的系统保护代码处
// 下面为HSE恢复后的预设置代码
RCC_HSEConfig(RCC_HSE_ON); // 使能HSE
RCC_ITConfig(RCC_IT_HSERDY, ENABLE); // 使能HSE就绪中断
RCC_ITConfig(RCC_IT_PLLRDY, ENABLE); // 使能PLL就绪中断
RCC_ClearITPendingBit(RCC_IT_CSS); // 清除时钟安全系统中断的挂起位
// 至此,一旦HSE时钟恢复,将发生HSERDY中断,在RCC中断处理程序里, 系统时钟可以设置到以前的状态
}
}
评论
查看更多