STM32 用AD模块控制生成可变占空比的PWM.doc_第1页
STM32 用AD模块控制生成可变占空比的PWM.doc_第2页
STM32 用AD模块控制生成可变占空比的PWM.doc_第3页
STM32 用AD模块控制生成可变占空比的PWM.doc_第4页
STM32 用AD模块控制生成可变占空比的PWM.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/* * * file TIM/7PWM_Output/main.c * author MCD Application Team * version V3.5.0 * date 08-April-2011 * brief Main program body * * attention * * 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. * * © COPYRIGHT 2011 STMicroelectronics * */ /* Includes -*/#include stm32f10x.h#include math.h#define ADC1_DR_Address (uint32_t)0x4001244C)/* addtogroup STM32F10x_StdPeriph_Examples * */* addtogroup TIM_7PWM_Output * */ /* Private typedef -*/* Private define -*/* Private macro -*/* Private variables -*/ADC_InitTypeDef ADC_InitStructure;DMA_InitTypeDef DMA_InitStructure;_IO uint16_t ADCConvertedValue3;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;uint16_t TimerPeriod = 0;uint16_t Channel1Pulse = 0, Channel2Pulse = 0, Channel3Pulse = 0, Channel4Pulse = 0;/* Private function prototypes -*/void RCC_Configuration(void);void GPIO_Configuration(void);void DMA_Configuration(void);void TIM4_Configuration(void);void ADC1_Configuration(void);/* Private functions -*/* * brief Main program * param None * retval None */int main(void) /*!CCR1 = (uint16_t) (ADCConvertedValue1* (TimerPeriod - 1) / 4096);TIM4-CCR2 = (uint16_t) (ADCConvertedValue0* (TimerPeriod - 1) / 4096); /* * brief Configures the different system clocks. * param None * retval None */void RCC_Configuration(void) /* TIM1, GPIOA, GPIOB, GPIOE and AFIO clocks enable */ SystemInit(); RCC_ADCCLKConfig(RCC_PCLK2_Div2); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC , ENABLE); RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM4, ENABLE);/* * brief Configure the TIM 1 Pins. * param None * retval None */void GPIO_Configuration(void) GPIO_InitTypeDef GPIO_InitStructure; /* GPIOA Configuration: Channel 1, 2 and 3 as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_0|GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOC, &GPIO_InitStructure);void DMA_Configuration(void)/* DMA1 channel1 configuration -*/ DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 3; 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; 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); /* Enable DMA1 channel1 */ DMA_Cmd(DMA1_Channel1, ENABLE);void ADC1_Configuration(void) /* ADC1 configuration -*/ 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 = 3; ADC_Init(ADC1, &ADC_InitStructure); /* ADC1 regular channel14 configuration */ ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 2, ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 3, ADC_SampleTime_239Cycles5); /* Enable ADC1 DMA */ ADC_DMACmd(ADC1, ENABLE); /* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE); /* Enable ADC1 reset calibration register */ ADC_ResetCalibration(ADC1); /* Check the end of ADC1 reset calibration register */ while(ADC_GetResetCalibrationStatus(ADC1); /* Start ADC1 calibration */ ADC_StartCalibration(ADC1); /* Check the end of ADC1 calibration */ while(ADC_GetCalibrationStatus(ADC1); /* Start ADC1 Software Conversion */ ADC_SoftwareStartConvCmd(ADC1, ENABLE); void TIM4_Configuration(void) /* TIM1CLK = SystemCoreClock, Prescaler = 0, TIM1 counter clock = SystemCoreClock SystemCoreClock is set to 72 MHz for Low-density, Medium-density, High-density and Connectivity line devices and to 24 MHz for Low-Density Value line and Medium-Density Value line devices The Timer pulse is calculated as follows: - ChannelxPulse = DutyCycle * (TIM1_Period - 1) / 100 - */ TimerPeriod = (SystemCoreClock / 4000 ) - 1; /* Compute CCR1 value to generate a duty cycle at 50% for channel 1 and 1N */ Channel1Pulse = (uint16_t) (uint32_t) 5 * (TimerPeriod - 1) / 10); /* Compute CCR2 value to generate a duty cycle at 37.5% for channel 2 and 2N */ Channel2Pulse = (uint16_t) (uint32_t) 375 * (TimerPeriod - 1) / 1000); /* Compute CCR3 value to generate a duty cycle at 25% for channel 3 and 3N */ Channel3Pulse = (uint16_t) (uint32_t) 25 * (TimerPeriod - 1) / 100); /* Compute CCR4 value to generate a duty cycle at 12.5% for channel 4 */ Channel4Pulse = (uint16_t) (uint32_t) 125 * (TimerPeriod- 1) / 1000); /* Time Base configuration */ TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_Period = TimerPe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论