/hwconf/hw_r2.c
https://github.com/cyrilh/bldc · C · 151 lines · 94 code · 22 blank · 35 comment · 0 complexity · eef1fb0a571c720d1e9699b1de52cc7a MD5 · raw file
- /*
- Copyright 2012-2014 Benjamin Vedder benjamin@vedder.se
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /*
- * hw_r2.c
- *
- * Created on: 14 apr 2014
- * Author: benjamin
- */
- #include "hw.h"
- #ifdef HW_VERSION_R2
- #include "ch.h"
- #include "hal.h"
- #include "stm32f4xx_conf.h"
- #include "servo.h"
- void hw_init_gpio(void) {
- // GPIO clock enable
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
- // LEDs
- palSetPadMode(GPIOB, 6,
- PAL_MODE_OUTPUT_PUSHPULL |
- PAL_STM32_OSPEED_HIGHEST);
- palSetPadMode(GPIOB, 7,
- PAL_MODE_OUTPUT_PUSHPULL |
- PAL_STM32_OSPEED_HIGHEST);
- // GPIOC (ENABLE_GATE)
- palSetPadMode(GPIOC, 9,
- PAL_MODE_OUTPUT_PUSHPULL |
- PAL_STM32_OSPEED_HIGHEST);
- DISABLE_GATE();
- // GPIOB (DCCAL)
- palSetPadMode(GPIOB, 12,
- PAL_MODE_OUTPUT_PUSHPULL |
- PAL_STM32_OSPEED_HIGHEST);
- // GPIOA Configuration: Channel 1 to 3 as alternate function push-pull
- palSetPadMode(GPIOA, 8, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
- PAL_STM32_OSPEED_HIGHEST |
- PAL_STM32_PUDR_FLOATING);
- palSetPadMode(GPIOA, 9, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
- PAL_STM32_OSPEED_HIGHEST |
- PAL_STM32_PUDR_FLOATING);
- palSetPadMode(GPIOA, 10, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
- PAL_STM32_OSPEED_HIGHEST |
- PAL_STM32_PUDR_FLOATING);
- palSetPadMode(GPIOB, 13, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
- PAL_STM32_OSPEED_HIGHEST |
- PAL_STM32_PUDR_FLOATING);
- palSetPadMode(GPIOB, 14, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
- PAL_STM32_OSPEED_HIGHEST |
- PAL_STM32_PUDR_FLOATING);
- palSetPadMode(GPIOB, 15, PAL_MODE_ALTERNATE(GPIO_AF_TIM1) |
- PAL_STM32_OSPEED_HIGHEST |
- PAL_STM32_PUDR_FLOATING);
- // GPIOB (hall sensors)
- palSetPadMode(GPIOC, 1, PAL_MODE_INPUT_PULLUP);
- palSetPadMode(GPIOC, 2, PAL_MODE_INPUT_PULLUP);
- palSetPadMode(GPIOC, 3, PAL_MODE_INPUT_PULLUP);
- // Fault pin
- palSetPadMode(GPIOC, 12, PAL_MODE_INPUT_PULLUP);
- // ADC Pins
- palSetPadMode(GPIOA, 0, PAL_MODE_INPUT_ANALOG);
- palSetPadMode(GPIOA, 1, PAL_MODE_INPUT_ANALOG);
- palSetPadMode(GPIOA, 2, PAL_MODE_INPUT_ANALOG);
- palSetPadMode(GPIOA, 3, PAL_MODE_INPUT_ANALOG);
- palSetPadMode(GPIOA, 4, PAL_MODE_INPUT_ANALOG);
- palSetPadMode(GPIOA, 5, PAL_MODE_INPUT_ANALOG);
- palSetPadMode(GPIOA, 6, PAL_MODE_INPUT_ANALOG);
- palSetPadMode(GPIOA, 7, PAL_MODE_INPUT_ANALOG);
- palSetPadMode(GPIOB, 0, PAL_MODE_INPUT_ANALOG);
- palSetPadMode(GPIOB, 1, PAL_MODE_INPUT_ANALOG);
- palSetPadMode(GPIOC, 0, PAL_MODE_INPUT_ANALOG);
- palSetPadMode(GPIOC, 1, PAL_MODE_INPUT_ANALOG);
- palSetPadMode(GPIOC, 2, PAL_MODE_INPUT_ANALOG);
- palSetPadMode(GPIOC, 3, PAL_MODE_INPUT_ANALOG);
- palSetPadMode(GPIOC, 4, PAL_MODE_INPUT_ANALOG);
- palSetPadMode(GPIOC, 5, PAL_MODE_INPUT_ANALOG);
- }
- void hw_setup_adc_channels(void) {
- // ADC1 regular channels 0, 5, 4, 7, 14
- ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles);
- ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_3Cycles);
- ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 3, ADC_SampleTime_3Cycles);
- ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 4, ADC_SampleTime_3Cycles);
- ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 5, ADC_SampleTime_3Cycles);
- // ADC2 regular channels 1, 6, 9, 15, 8
- ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 1, ADC_SampleTime_3Cycles);
- ADC_RegularChannelConfig(ADC2, ADC_Channel_6, 2, ADC_SampleTime_3Cycles);
- ADC_RegularChannelConfig(ADC2, ADC_Channel_9, 3, ADC_SampleTime_3Cycles);
- ADC_RegularChannelConfig(ADC2, ADC_Channel_15, 4, ADC_SampleTime_3Cycles);
- ADC_RegularChannelConfig(ADC2, ADC_Channel_8, 5, ADC_SampleTime_3Cycles);
- // ADC3 regular channels 2, 10, 12, 11, 13
- ADC_RegularChannelConfig(ADC3, ADC_Channel_2, 1, ADC_SampleTime_3Cycles);
- ADC_RegularChannelConfig(ADC3, ADC_Channel_10, 2, ADC_SampleTime_3Cycles);
- ADC_RegularChannelConfig(ADC3, ADC_Channel_12, 3, ADC_SampleTime_3Cycles);
- ADC_RegularChannelConfig(ADC3, ADC_Channel_11, 4, ADC_SampleTime_3Cycles);
- ADC_RegularChannelConfig(ADC3, ADC_Channel_13, 5, ADC_SampleTime_3Cycles);
- // Injected channels
- ADC_InjectedChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_3Cycles);
- ADC_InjectedChannelConfig(ADC2, ADC_Channel_6, 1, ADC_SampleTime_3Cycles);
- }
- void hw_setup_servo_outputs(void) {
- // Set up GPIO ports
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
- servos[0].gpio = GPIOB;
- servos[0].pin = 5;
- servos[0].offset = 0;
- servos[0].pos = 128;
- servos[1].gpio = GPIOD;
- servos[1].pin = 2;
- servos[1].offset = 0;
- servos[1].pos = 0;
- }
- #endif