Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "lib.h"
- void TIM_InitMaster()
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
- TIM_TimeBaseStructInit(&TIM_TimeBaseInitStructure);
- TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned3;
- TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_TimeBaseInitStructure.TIM_Prescaler = 50000;
- TIM_TimeBaseInitStructure.TIM_Period = 20;
- TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
- TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
- NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_Init(&NVIC_InitStructure);
- TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
- TIM_ARRPreloadConfig(TIM2, ENABLE);
- TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);
- TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Enable);
- TIM_Cmd(TIM2, ENABLE);
- TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
- }
- void TIM_InitSlave()
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
- TIM_OCInitTypeDef TIM_OCTInitStructure;
- TIM_BDTRInitTypeDef TIM_BDTR_StructInit;
- TIM_TimeBaseStructInit(&TIM_TimeBaseInitStructure);
- TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned3;
- TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_TimeBaseInitStructure.TIM_Prescaler = 50000;
- TIM_TimeBaseInitStructure.TIM_Period = 20;
- TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStructure);
- TIM_ARRPreloadConfig(TIM1, ENABLE);
- TIM_OCStructInit(&TIM_OCTInitStructure);
- TIM_OCTInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
- TIM_OCTInitStructure.TIM_OutputState = TIM_OutputState_Enable;
- TIM_OCTInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
- TIM_OCTInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
- TIM_OCTInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
- TIM_OCTInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
- TIM_OCTInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
- TIM_OCTInitStructure.TIM_Pulse = 5;
- TIM_OC1Init(TIM1, &TIM_OCTInitStructure);
- TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
- TIM_OCTInitStructure.TIM_Pulse = 10;
- TIM_OC2Init(TIM1, &TIM_OCTInitStructure);
- TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
- TIM_OCTInitStructure.TIM_Pulse = 15;
- TIM_OC3Init(TIM1, &TIM_OCTInitStructure);
- TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
- TIM_BDTRStructInit(&TIM_BDTR_StructInit);
- TIM_BDTR_StructInit.TIM_OSSRState = TIM_OSSRState_Enable;
- TIM_BDTR_StructInit.TIM_OSSIState = TIM_OSSIState_Enable;
- TIM_BDTR_StructInit.TIM_LOCKLevel = TIM_LOCKLevel_1;
- TIM_BDTR_StructInit.TIM_Break = TIM_Break_Enable;
- TIM_BDTR_StructInit.TIM_BreakPolarity = TIM_BreakPolarity_High;
- TIM_BDTR_StructInit.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
- TIM_BDTR_StructInit.TIM_DeadTime = 2;
- TIM_BDTRConfig(TIM1, &TIM_BDTR_StructInit);
- TIM_CtrlPWMOutputs(TIM1, ENABLE);
- TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Trigger);
- TIM_SelectInputTrigger(TIM1, TIM_TS_ITR1);
- TIM_Cmd(TIM1, ENABLE);
- }
- void GPIO_InitPins()
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC, ENABLE);
- GPIO_StructInit(&GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_TIM1);
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_TIM1);
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_TIM1);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_TIM1);
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_TIM1);
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_TIM1);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- }
- void TIM2_IRQHandler()
- {
- if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
- {
- GPIO_SetBits(GPIOC, GPIO_Pin_3);
- for(i=0;i<10;i++)
- {
- GPIO_ResetBits(GPIOC, GPIO_Pin_3);
- }
- TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
- }
- }
- void ADC_InitModule()
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
- ADC_CommonInitTypeDef ADC_CommonInitStructure;
- ADC_InitTypeDef ADC_InitStructure;
- ADC_CommonStructInit(&ADC_CommonInitStructure);
- ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
- ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;
- ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
- ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
- ADC_CommonInit(&ADC_CommonInitStructure);
- ADC_StructInit(&ADC_InitStructure);
- ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
- ADC_InitStructure.ADC_ScanConvMode = DISABLE;
- ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
- ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising;
- ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_TRGO;
- ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
- ADC_InitStructure.ADC_NbrOfConversion = 1;
- ADC_Init(ADC1, &ADC_InitStructure);
- ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_3Cycles);
- ADC_Cmd(ADC1, ENABLE);
- ADC_SoftwareStartConv(ADC1);
- }
- void USART_InitCom()
- {
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
- USART_InitTypeDef USART_IN;
- USART_IN.USART_BaudRate =9600;
- USART_IN.USART_HardwareFlowControl= USART_HardwareFlowControl_None;
- USART_IN.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- USART_IN.USART_Parity = USART_Parity_No;
- USART_IN.USART_StopBits = USART_StopBits_1;
- USART_IN.USART_WordLength = USART_WordLength_8b;
- USART_Init(USART2, &USART_IN );
- USART_Cmd(USART2, ENABLE);
- }
- void send_char(char c)
- {
- while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
- USART_SendData(USART2, c);
- }
- int __io_putchar(int c)
- {
- if (c=='\n')send_char('\r');
- send_char(c);
- return c;
- }
- void send_to_PC()
- {
- uint16_t adc = ADC_GetConversionValue(ADC1);
- printf("%.3fV", adc * 3.3f / 4096.0f);
- }
- int main()
- {
- GPIO_InitPins();
- TIM_InitMaster();
- TIM_InitSlave();
- ADC_InitModule();
- USART_InitCom();
- for(;;)
- {
- send_to_PC();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement