/**
******************************************************************************
* @file icc_measure.c
* @author Microcontroller Division
* @version V1.0.0
* @date Apri-2011
* @brief Current measurements
******************************************************************************
* @copy
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
*/
/* Includes ------------------------------------------------------------------*/
#include "misc.h"
#include "stm32l1xx.h"
#include "stm32l1xx_adc.h"
#include "stm32l1xx_lcd.h"
#include "stm32l1xx_rcc.h"
#include "stm32l1xx_rtc.h"
#include "stm32l1xx_pwr.h"
#include "stm32l1xx_gpio.h"
#include "discover_board.h"
#include "icc_measure.h"
#include "discover_functions.h"
#include "stm32l_discovery_lcd.h"
#include "stm32l1xx_conf.h"
/* Current measurment in RAM for Run mode and LPOWER run mode */
#define TESTINRAM 1
/* To use GPIO PA1 in user button instead wake up signal */
extern bool UserButton;
/* To indicate Wake UP setted in IT handler */
volatile bool Idd_WakeUP;
/* Variables used for save GPIO configuration */
uint32_t GPIOA_MODER, GPIOB_MODER, GPIOC_MODER,GPIOD_MODER,GPIOE_MODER ,GPIOE_MODER,GPIOH_MODER;
uint32_t GPIOA_PUPDR, GPIOB_PUPDR , GPIOC_PUPDR, GPIOD_PUPDR,GPIOE_PUPDR,GPIOH_PUPDR;
/**
* @brief To configure the GPIO in low consumption
* @caller ADC_Icc_Test
* @param None
* @retval None
*/
void GPIO_LowPower_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIOA_MODER = GPIOA->MODER;
GPIOB_MODER = GPIOB->MODER;
GPIOC_MODER = GPIOC->MODER;
GPIOD_MODER = GPIOD->MODER;
GPIOE_MODER = GPIOE->MODER;
GPIOH_MODER = GPIOH->MODER;
GPIOA_PUPDR = GPIOA->PUPDR;
GPIOB_PUPDR = GPIOB->PUPDR;
GPIOC_PUPDR = GPIOC->PUPDR;
GPIOD_PUPDR = GPIOD->PUPDR;
GPIOE_PUPDR = GPIOE->PUPDR;
GPIOH_PUPDR = GPIOH->PUPDR;
/* Configure all GPIO port pins in Analog Input mode (floating input trigger OFF) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_400KHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIOD->MODER = 0xFFFFFFFF;
GPIOE->MODER = 0xFFFFFFFF;
GPIOH->MODER = 0xFFFFFFFF;
/* Configure all GPIO port pins in Analog Input mode (floating input trigger OFF) */
/* Not PA0, PA4, (PA13 PA14 PA5 for debug only)*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_6| GPIO_Pin_7 \
| GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_5 | GPIO_Pin_8 |GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 |GPIO_Pin_15 ;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Not PC13 USED FOR MEASUREMENT */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4| GPIO_Pin_5 |GPIO_Pin_6| GPIO_Pin_7| GPIO_Pin_8 \
| GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15 ;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4| GPIO_Pin_5 | GPIO_Pin_8 \
| GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 |GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 ;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* PB 6 & 7 it's for the LEDs */
GPIO_LOW(GPIOB,GPIO_Pin_6);
GPIO_LOW(GPIOB,GPIO_Pin_7);
}
/**
* @brief To restore register values for GPIO.
* @caller ADC_Icc_Test
* @param None
* @retval None
*/
void Restore_GPIO_Config(void)
{
GPIOA->MODER = GPIOA_MODER;
GPIOB->MODER = GPIOB_MODER;
GPIOC->MODER = GPIOC_MODER;
GPIOD->MODER = GPIOD_MODER;
GPIOE->MODER = GPIOE_MODER;
GPIOH->MODER = GPIOH_MODER;
GPIOA->PUPDR = GPIOA_PUPDR;
GPIOB->PUPDR = GPIOB_PUPDR;
GPIOC->PUPDR = GPIOC_PUPDR;
GPIOD->PUPDR = GPIOD_PUPDR;
GPIOE->PUPDR = GPIOE_PUPDR;
GPIOH->PUPDR = GPIOH_PUPDR;
}
/**
* @brief Configures the clock system
* @param None
* @retval None
*/
void Config_Systick()
{
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq(&RCC_Clocks);
SysTick_Config(RCC_Clocks.HCLK_Frequency / 2000);
}
/**
* @brief Configures the clock system in low frequency
* @param None
* @retval None
*/
void Config_Systick_50ms()
{
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq(&RCC_Clocks);
SysTick_Config(RCC_Clocks.HCLK_Frequency / 2);
}
/**
* @brief To select MSI as System clock source
* @caller ADC_Icc_Test
* @param Frequence, DIV by 2 ot not , With or without RTC
* @retval None
*/
void SetHSICLKToMSI(uint32_t freq,bool div2,bool With_RTC)
{
/* RCC system reset */
RCC_DeInit();
/* Flash 1 wait state */
FLASH_SetLatency(FLASH_Latency_0);
/* Disable Prefetch Buffer */
FLASH_PrefetchBufferCmd(DISABLE);
/* Disable 64-bit access */
FLASH_ReadAccess64Cmd(DISABLE);
/* Disable FLASH during SLeep */
FLASH_SLEEPPowerDownCmd(ENABLE);
/* Enable the PWR APB1 Clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/* Select the Voltage Range 3 (1.2V) */
PWR_VoltageScalingConfig(PWR_VoltageScaling_Range3);
/* Wait Until the Voltage Regulator is ready */
while (PWR_GetFlagStatus(PWR_FLAG_VOS) != RESET)
{}
/* To configure the MSI frequency */
RCC_MSIRangeConfig(freq);
/* Select MSI as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_MSI);
/* Wait till MSI is used as system clock source */
while (RCC_GetSYSCLKSource() != 0x00)
{}
if (div2)
{
RCC_HCLKConfig(RCC_SYSCLK_Div2);
}
RCC_HSICmd(DISABLE);
/* Disable HSE clock */
RCC_HSEConfig(RCC_HSE_OFF);
/* Disable LSE clock */
if (! With_RTC)
RCC_LSEConfig(RCC_LSE_OFF);
/* Disable LSI clock */
RCC_LSICmd(DISABLE);
}
/**
* @brief To select HSI as System clock source and
* @caller ADC_Icc_Test
* @param None
* @retval None
*/
void SetHSICLK(void)
{
/* Enable HSI Clock */
RCC_HSICmd(ENABLE);
/*!< Wait till HSI is ready */
while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)
{}
/* Enable 64-bit access */
FLASH_ReadAccess64Cmd(ENABLE);
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(ENABLE);
/* Flash 1 wait state */
FLASH_SetLatency(FLASH_Latency_1);
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
while (RCC_GetSYSCLKSource() != 0x04) {}
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK */
RCC_PCLK1Config(RCC_HCLK_Div1);
}
/**
* @brief ADC initialization (ADC_Channel_4)
* @caller main and ADC_Icc_Test
* @param None
* @retval None
*/
void ADC_Icc_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
/* Enable ADC clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
/* de-initialize ADC */
ADC_DeInit(ADC1);
/* ADC configured as follow:
- NbrOfChannel = 1 - ADC_Channel_4
- Mode = Single ConversionMode(ContinuousConvMode disabled)
- Resolution = 12Bits
- Prescaler = /1
- sampling time 192 */
/* ADC Configuration */
ADC_StructInit(&ADC_InitStructure);
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = ENABL
PWM.rar_LBM_keil_pwm_pwm stm32_stm32 pwm
版权申诉
178 浏览量
2022-09-23
19:45:54
上传
评论
收藏 6KB RAR 举报
Kinonoyomeo
- 粉丝: 76
- 资源: 1万+