微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32学习笔记6(TIM模块定时器)

STM32学习笔记6(TIM模块定时器)

时间:11-28 来源:互联网 点击:

//Step4.中断服务子程序:void TIM1_UP_IRQHandler(void){GPIOC->

  • int fputc(int ch, FILE *f){//USART_SendData(USART1, (u8) ch);USART1->

  • //USART1_TXGPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);//USART1_RXGPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);//ADC_CH10-->

    ture;USART_InitStructure.USART_BaudRate = 19200;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;USART_Init(USART1, &USART_InitStructure);USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);USART_Cmd(USART1, ENABLE);}

    void ADC1_Configuration(void){ADC_InitTypeDef ADC_InitStructure;

    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;ADC_InitStructure.ADC_ScanConvMode = ENABLE;ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //连续转换开启ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel = 2;//设置转换序列长度为2ADC_Init(ADC1, &ADC_InitStructure);//ADC内置温度传感器使能(要使用片内温度传感器,切忌要开启它)ADC_TempSensorVrefintCmd(ENABLE);//常规转换序列1:通道10ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_13Cycles5);//常规转换序列2:通道16(内部温度传感器),采样时间>2.2us,(239cycles)ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 2, ADC_SampleTime_239Cycles5);// Enable ADC1ADC_Cmd(ADC1, ENABLE);// 开启ADC的DMA支持(要实现DMA功能,还需独立配置DMA通道等参数)ADC_DMACmd(ADC1, ENABLE);// 下面是ADC自动校准,开机后需执行一次,保证精度// Enable ADC1 reset calibaration registerADC_ResetCalibration(ADC1);// Check the end of ADC1 reset calibration registerwhile(ADC_GetResetCalibrationStatus(ADC1));

    // Start ADC1 calibarationADC_StartCalibration(ADC1);// Check the end of ADC1 calibrationwhile(ADC_GetCalibrationStatus(ADC1));// ADC自动校准结束---------------}

    void DMA_Configuration(void){DMA_InitTypeDef DMA_InitStructure;DMA_DeInit(DMA1_Channel1);DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value;DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//BufferSize=2,因为ADC转换序列有2个通道//如此设置,使序列1结果放在AD_Value[0],序列2结果放在AD_Value[1]DMA_InitStructure.DMA_BufferSize = 2;DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//循环模式开启,Buffer写满后,自动回到初始地址开始传输DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;DMA_InitStructure.DMA_Priority = DMA_Priority_High;DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;DMA_Init(DMA1_Channel1, &DMA_InitStructure);//配置完成后,启动DMA通道DMA_Cmd(DMA1_Channel1, ENABLE);}

    《九九的STM32笔记》整理这次是RTC的笔记:)RTC这东西晕晕的,因为一个模块涉及到了RTC,BKP,RCC多个模块,之间的关系让人有点模糊入门的知识请大家看手册,我来总结:总之,RTC只是个能靠电池维持运行的32位定时器over!所以,使用时要注意以下问题:1. 上电后要检查备份电池有没有断过电。如何检查? 恩,RTC的示例代码中已经明示:往备份域寄存器中写一个特殊的字符,备份域寄存器是和RTC一起在断电下能保存数据的。上电后检查下这个特殊字符是否还存在,如果存在,ok,RTC的数据应该也没丢,不需要重新配置它如果那个特殊字符丢了,那RTC的定时器数据一定也丢了,那我们要重新来配置RTC了这个过程包括时钟使能、RTC时钟源切换、设置分频系数等等,这个可以参考FWLibexampleRTCCalendar的代码在我的这个实例里,检查备份域掉电在Init.c的RTC_Conig()中,函数内若检测到BKP掉电,则会调用RTC_Configuration()

    2. 因为RTC的一些设置是保存在后备域中的,so,操作RTC的设置寄存器前,要打开后备域模块中的写保护功能。3. RTC设定值写入前后都要检查命令有没有完成,调用RT

  • Copyright © 2017-2020 微波EDA网 版权所有

    网站地图

    Top