Advertisement
Guest User

Untitled

a guest
Oct 30th, 2017
755
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.49 KB | None | 0 0
  1. #include "lib.h"
  2.  
  3. void TIM_InitMaster()
  4. {
  5.     TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  6.     NVIC_InitTypeDef NVIC_InitStructure;
  7.  
  8.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  9.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
  10.  
  11.     TIM_TimeBaseStructInit(&TIM_TimeBaseInitStructure);
  12.     TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned3;
  13.     TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  14.     TIM_TimeBaseInitStructure.TIM_Prescaler = 50000;
  15.     TIM_TimeBaseInitStructure.TIM_Period = 20;
  16.     TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
  17.     TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
  18.  
  19.     NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  20.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  21.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  22.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  23.     NVIC_Init(&NVIC_InitStructure);
  24.  
  25.     TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
  26.  
  27.     TIM_ARRPreloadConfig(TIM2, ENABLE);
  28.  
  29.     TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);
  30.     TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Enable);
  31.  
  32.     TIM_Cmd(TIM2, ENABLE);
  33.  
  34.     TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
  35. }
  36.  
  37. void TIM_InitSlave()
  38. {
  39.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
  40.  
  41.     TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  42.     TIM_OCInitTypeDef  TIM_OCTInitStructure;
  43.     TIM_BDTRInitTypeDef TIM_BDTR_StructInit;
  44.  
  45.     TIM_TimeBaseStructInit(&TIM_TimeBaseInitStructure);
  46.     TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned3;
  47.     TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  48.     TIM_TimeBaseInitStructure.TIM_Prescaler = 50000;
  49.     TIM_TimeBaseInitStructure.TIM_Period = 20;
  50.     TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStructure);
  51.  
  52.     TIM_ARRPreloadConfig(TIM1, ENABLE);
  53.  
  54.     TIM_OCStructInit(&TIM_OCTInitStructure);
  55.     TIM_OCTInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  56.     TIM_OCTInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  57.     TIM_OCTInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  58.     TIM_OCTInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
  59.     TIM_OCTInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
  60.     TIM_OCTInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  61.     TIM_OCTInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
  62.     TIM_OCTInitStructure.TIM_Pulse = 5;
  63.     TIM_OC1Init(TIM1, &TIM_OCTInitStructure);
  64.     TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
  65.     TIM_OCTInitStructure.TIM_Pulse = 10;
  66.     TIM_OC2Init(TIM1, &TIM_OCTInitStructure);
  67.     TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
  68.     TIM_OCTInitStructure.TIM_Pulse = 15;
  69.     TIM_OC3Init(TIM1, &TIM_OCTInitStructure);
  70.     TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
  71.  
  72.     TIM_BDTRStructInit(&TIM_BDTR_StructInit);
  73.     TIM_BDTR_StructInit.TIM_OSSRState = TIM_OSSRState_Enable;
  74.     TIM_BDTR_StructInit.TIM_OSSIState = TIM_OSSIState_Enable;
  75.     TIM_BDTR_StructInit.TIM_LOCKLevel = TIM_LOCKLevel_1;
  76.     TIM_BDTR_StructInit.TIM_Break = TIM_Break_Enable;
  77.     TIM_BDTR_StructInit.TIM_BreakPolarity = TIM_BreakPolarity_High;
  78.     TIM_BDTR_StructInit.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
  79.     TIM_BDTR_StructInit.TIM_DeadTime = 2;
  80.     TIM_BDTRConfig(TIM1, &TIM_BDTR_StructInit);
  81.  
  82.     TIM_CtrlPWMOutputs(TIM1, ENABLE);
  83.  
  84.     TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Trigger);
  85.     TIM_SelectInputTrigger(TIM1, TIM_TS_ITR1);
  86.  
  87.     TIM_Cmd(TIM1, ENABLE);
  88. }
  89.  
  90. void GPIO_InitPins()
  91. {
  92.     GPIO_InitTypeDef GPIO_InitStructure;
  93.  
  94.     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC, ENABLE);
  95.  
  96.     GPIO_StructInit(&GPIO_InitStructure);
  97.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
  98.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  99.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  100.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  101.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  102.  
  103.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_TIM1);
  104.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_TIM1);
  105.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_TIM1);
  106.  
  107.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  108.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  109.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  110.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  111.     GPIO_Init(GPIOB, &GPIO_InitStructure);
  112.  
  113.     GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_TIM1);
  114.     GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_TIM1);
  115.     GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_TIM1);
  116.  
  117.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
  118.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
  119.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  120.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  121.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  122.  
  123.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);
  124.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2);
  125.  
  126.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  127.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
  128.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  129.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  130.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  131.  
  132.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  133.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
  134.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  135.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  136.     GPIO_Init(GPIOC, &GPIO_InitStructure);
  137. }
  138.  
  139. void TIM2_IRQHandler()
  140. {
  141.     if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
  142.     {
  143.         GPIO_SetBits(GPIOC, GPIO_Pin_3);
  144.  
  145.         for(i=0;i<10;i++)
  146.         {
  147.             GPIO_ResetBits(GPIOC, GPIO_Pin_3);
  148.         }
  149.  
  150.         TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
  151.     }
  152. }
  153.  
  154. void ADC_InitModule()
  155. {
  156.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
  157.  
  158.     ADC_CommonInitTypeDef ADC_CommonInitStructure;
  159.     ADC_InitTypeDef ADC_InitStructure;
  160.  
  161.     ADC_CommonStructInit(&ADC_CommonInitStructure);
  162.     ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
  163.     ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;
  164.     ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
  165.     ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
  166.     ADC_CommonInit(&ADC_CommonInitStructure);
  167.  
  168.     ADC_StructInit(&ADC_InitStructure);
  169.     ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  170.     ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  171.     ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
  172.     ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising;
  173.     ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_TRGO;
  174.     ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  175.     ADC_InitStructure.ADC_NbrOfConversion = 1;
  176.     ADC_Init(ADC1, &ADC_InitStructure);
  177.  
  178.     ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_3Cycles);
  179.  
  180.     ADC_Cmd(ADC1, ENABLE);
  181.  
  182.     ADC_SoftwareStartConv(ADC1);
  183. }
  184.  
  185. void USART_InitCom()
  186. {
  187.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
  188.  
  189.     USART_InitTypeDef USART_IN;
  190.  
  191.     USART_IN.USART_BaudRate =9600;
  192.     USART_IN.USART_HardwareFlowControl= USART_HardwareFlowControl_None;
  193.     USART_IN.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  194.     USART_IN.USART_Parity = USART_Parity_No;
  195.     USART_IN.USART_StopBits = USART_StopBits_1;
  196.     USART_IN.USART_WordLength = USART_WordLength_8b;
  197.     USART_Init(USART2, &USART_IN );
  198.  
  199.     USART_Cmd(USART2, ENABLE);
  200. }
  201.  
  202. void send_char(char c)
  203. {
  204.     while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
  205.     USART_SendData(USART2, c);
  206. }
  207.  
  208. int __io_putchar(int c)
  209. {
  210.     if (c=='\n')send_char('\r');
  211.     send_char(c);
  212.     return c;
  213. }
  214.  
  215. void send_to_PC()
  216. {
  217.     uint16_t adc = ADC_GetConversionValue(ADC1);
  218.     printf("%.3fV", adc * 3.3f / 4096.0f);
  219. }
  220.  
  221. int main()
  222. {
  223.     GPIO_InitPins();
  224.     TIM_InitMaster();
  225.     TIM_InitSlave();
  226.     ADC_InitModule();
  227.     USART_InitCom();
  228.  
  229.     for(;;)
  230.     {
  231.         send_to_PC();
  232.     }
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement