1 | void System_Clock_Setup(void) {
|
2 | RCC_DeInit();
|
3 | RCC_HSICmd(ENABLE);
|
4 | while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
|
5 | FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
|
6 | FLASH_SetLatency(FLASH_Latency_2);
|
7 | RCC_HCLKConfig(RCC_SYSCLK_Div1);
|
8 | RCC_PCLK2Config(RCC_HCLK_Div1);
|
9 | RCC_PCLK1Config(RCC_HCLK_Div2);
|
10 | RCC_ADCCLKConfig(RCC_PCLK2_Div4);
|
11 | RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);
|
12 | RCC_PLLCmd(ENABLE);
|
13 | while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
|
14 | RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
|
15 | while (RCC_GetSYSCLKSource() != 0x08);
|
16 |
|
17 | /* GPIOA GPIOB and GPIOC clock enable */
|
18 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
|
19 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
|
20 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
|
21 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
|
22 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
|
23 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
|
24 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
|
25 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);
|
26 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
|
27 | }
|
28 |
|
29 | void ADC_Cal(void) {
|
30 | ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
|
31 | ADC_InitStructure.ADC_ScanConvMode = ENABLE;
|
32 | ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
|
33 | ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
|
34 | ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
|
35 | ADC_InitStructure.ADC_NbrOfChannel = 3;
|
36 | ADC_Init(ADC3, &ADC_InitStructure);
|
37 | ADC_InjectedSequencerLengthConfig(ADC3, 3);
|
38 | ADC_InjectedChannelConfig(ADC3, ADC_Channel_10, 1, ADC_SampleTime_7Cycles5);
|
39 | ADC_InjectedChannelConfig(ADC3, ADC_Channel_13, 2, ADC_SampleTime_7Cycles5);
|
40 | ADC_InjectedChannelConfig(ADC3, ADC_Channel_0, 3, ADC_SampleTime_7Cycles5);
|
41 |
|
42 | ADC_ExternalTrigInjectedConvConfig(ADC3, ADC_ExternalTrigInjecConv_T8_CC4);
|
43 | ADC_ExternalTrigInjectedConvCmd(ADC3, ENABLE);
|
44 | ADC_ITConfig(ADC3, ADC_IT_JEOC, ENABLE);
|
45 | ADC_Cmd(ADC3, ENABLE);
|
46 | ADC_ResetCalibration(ADC3);
|
47 | while (ADC_GetResetCalibrationStatus(ADC3)) {}
|
48 |
|
49 | ADC_StartCalibration(ADC3);
|
50 | while (ADC_GetCalibrationStatus(ADC3)) {}
|
51 | }
|
52 |
|
53 | void Timer_Cal(void){
|
54 | TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
55 | TIM_OCInitTypeDef TIM_OCInitStructure;
|
56 | TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
|
57 | TIM_OCStructInit(&TIM_OCInitStructure);
|
58 |
|
59 | TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
60 | TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
61 | TIM_TimeBaseStructure.TIM_Prescaler = 640 - 1;
|
62 | TIM_TimeBaseStructure.TIM_Period = 50000 - 1;
|
63 | TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
|
64 | TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
|
65 | TIM_Cmd(TIM2, ENABLE);
|
66 |
|
67 | TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
|
68 | TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
69 | TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
|
70 | TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
|
71 | TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;
|
72 | TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
|
73 | TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
|
74 | TIM_OCInitStructure.TIM_Pulse = 0;
|
75 | TIM_OC1Init(TIM8, &TIM_OCInitStructure);
|
76 | TIM_OCInitStructure.TIM_Pulse = 0;
|
77 | TIM_OC2Init(TIM8, &TIM_OCInitStructure);
|
78 | TIM_OCInitStructure.TIM_Pulse = 0;
|
79 | TIM_OC3Init(TIM8, &TIM_OCInitStructure);
|
80 | TIM_OCInitStructure.TIM_Pulse = 1;
|
81 | TIM_OC4Init(TIM8, &TIM_OCInitStructure);
|
82 | TIM_Cmd(TIM8, ENABLE);
|
83 | }
|
84 |
|
85 | void NVIC(void){
|
86 | NVIC_InitTypeDef NVIC_InitStructure;
|
87 |
|
88 | NVIC_InitStructure.NVIC_IRQChannel = ADC3_IRQn;
|
89 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
90 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
91 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
92 | NVIC_Init(&NVIC_InitStructure);
|
93 |
|
94 | NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
|
95 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
96 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
97 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
98 | NVIC_Init(&NVIC_InitStructure);
|
99 | }
|
100 |
|
101 | void TIM2_IRQHandler(void) {
|
102 | TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
|
103 | GPIOB->ODR ^= LED;
|
104 | }
|
105 |
|
106 | void ADC3_IRQHandler(void) {
|
107 | ADC_ClearITPendingBit(ADC3, ADC_IT_JEOC);
|
108 | }
|