mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #1119 from bcostm/master
STM32F3xx - Refactor analogin, analogout and pwmoutpull/1128/head
commit
36a43ec36b
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -39,7 +39,8 @@ extern "C" {
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ADC_1 = (int)ADC1_BASE,
|
ADC_1 = (int)ADC1_BASE,
|
||||||
ADC_2 = (int)ADC2_BASE,
|
ADC_2 = (int)ADC2_BASE,
|
||||||
ADC_3 = (int)ADC3_BASE
|
ADC_3 = (int)ADC3_BASE,
|
||||||
|
ADC_4 = (int)ADC4_BASE
|
||||||
} ADCName;
|
} ADCName;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -39,38 +39,38 @@
|
||||||
//*** ADC ***
|
//*** ADC ***
|
||||||
|
|
||||||
const PinMap PinMap_ADC[] = {
|
const PinMap PinMap_ADC[] = {
|
||||||
{PA_0, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN1
|
{PA_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1
|
||||||
{PA_1, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN2
|
{PA_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2
|
||||||
{PA_2, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN3
|
{PA_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3
|
||||||
{PA_3, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN4
|
{PA_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_IN4
|
||||||
{PA_4, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN1
|
{PA_4, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC2_IN1
|
||||||
{PA_5, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN5
|
{PA_5, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC2_IN5
|
||||||
{PA_6, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN3
|
{PA_6, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC2_IN3
|
||||||
{PA_7, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN4
|
{PA_7, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC2_IN4
|
||||||
|
|
||||||
{PB_0, ADC_3, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC3_IN12
|
{PB_0, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC3_IN12
|
||||||
{PB_1, ADC_3, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN1
|
{PB_1, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1
|
||||||
{PB_2, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN12
|
{PB_2, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC2_IN12
|
||||||
{PB_11, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN14
|
{PB_11, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC1_IN14
|
||||||
{PB_13, ADC_3, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC3_IN5
|
{PB_13, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC3_IN5
|
||||||
|
|
||||||
{PC_0, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN6
|
{PC_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_IN6
|
||||||
{PC_1, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN7
|
{PC_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_IN7
|
||||||
{PC_2, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN8
|
{PC_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8
|
||||||
{PC_3, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN9
|
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9
|
||||||
{PC_4, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN5
|
{PC_4, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC2_IN5
|
||||||
{PC_5, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN11
|
{PC_5, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC2_IN11
|
||||||
|
|
||||||
{PF_2, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN10
|
{PF_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10
|
||||||
{PF_4, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN5
|
{PF_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_IN5
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
//*** DAC ***
|
//*** DAC ***
|
||||||
|
|
||||||
const PinMap PinMap_DAC[] = {
|
const PinMap PinMap_DAC[] = {
|
||||||
{PA_4, DAC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // DAC1_OUT1
|
{PA_4, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC1_OUT1
|
||||||
{PA_5, DAC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // DAC1_OUT2
|
{PA_5, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC1_OUT2
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -110,95 +110,95 @@ const PinMap PinMap_PWM[] = {
|
||||||
* change the timer that is used on PA_5. This is why the other possibilities are
|
* change the timer that is used on PA_5. This is why the other possibilities are
|
||||||
* commented to make this change easier without looking deeply into the mcu datasheet.
|
* commented to make this change easier without looking deeply into the mcu datasheet.
|
||||||
*/
|
*/
|
||||||
{PA_1, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15)}, // TIM15_CH1N
|
{PA_1, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15, 1, 1)}, // TIM15_CH1N
|
||||||
{PA_2, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15)}, // TIM15_CH1
|
{PA_2, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15, 1, 0)}, // TIM15_CH1
|
||||||
{PA_3, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15)}, // TIM15_CH2
|
{PA_3, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15, 2, 0)}, // TIM15_CH2
|
||||||
{PA_4, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2
|
{PA_4, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
{PA_6, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PA_6, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
//{PA_6, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2
|
//{PA_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
{PA_7, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17)}, // TIM17_CH1
|
{PA_7, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17, 1, 0)}, // TIM17_CH1
|
||||||
// {PA_7, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2
|
// {PA_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
// {PA_7, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1N
|
// {PA_7, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
{PA_8, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1
|
{PA_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 0)}, // TIM1_CH1
|
||||||
{PA_9, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2
|
{PA_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 0)}, // TIM1_CH2
|
||||||
// {PA_9, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2)}, // TIM2_CH3
|
// {PA_9, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2, 3, 0)}, // TIM2_CH3
|
||||||
{PA_10, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH3
|
{PA_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 3, 0)}, // TIM1_CH3
|
||||||
{PA_11, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_TIM1)}, // TIM1_CH4
|
{PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_TIM1, 4, 0)}, // TIM1_CH4
|
||||||
// {PA_11, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM4)}, // TIM4_CH1
|
// {PA_11, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM4, 1, 0)}, // TIM4_CH1
|
||||||
// {PA_11, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1N
|
// {PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
{PA_12, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PA_12, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
// {PA_12, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
// {PA_12, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
// {PA_12, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM4)}, // TIM4_CH2
|
// {PA_12, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM4, 2, 0)}, // TIM4_CH2
|
||||||
{PA_13, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1N
|
{PA_13, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 1)}, // TIM16_CH1N
|
||||||
// {PA_13, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
// {PA_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
{PA_14, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM8)}, // TIM8_CH2
|
{PA_14, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM8, 2, 0)}, // TIM8_CH2
|
||||||
|
|
||||||
{PB_0, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
{PB_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
//{PB_0, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH2N
|
//{PB_0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 2, 1)}, // TIM8_CH2N
|
||||||
//{PB_0, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH3
|
//{PB_0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3
|
||||||
{PB_1, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH3N
|
{PB_1, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
//{PB_1, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH3N
|
//{PB_1, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 3, 1)}, // TIM8_CH3N
|
||||||
//{PB_1, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH4
|
//{PB_1, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
|
||||||
{PB_3, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH1N
|
{PB_3, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 1, 1)}, // TIM8_CH1N
|
||||||
{PB_4, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PB_4, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
//{PB_4, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM8)}, // TIM8_CH2N
|
//{PB_4, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM8, 2, 1)}, // TIM8_CH2N
|
||||||
//{PB_4, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH1
|
//{PB_4, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
|
||||||
{PB_5, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM17)},// TIM17_CH1
|
{PB_5, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM17, 1, 0)}, // TIM17_CH1
|
||||||
//{PB_5, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8)},// TIM8_CH3N
|
//{PB_5, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N
|
||||||
//{PB_5, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)},// TIM3_CH2
|
//{PB_5, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
{PB_6, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1N
|
{PB_6, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 1)}, // TIM16_CH1N
|
||||||
//{PB_6, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH1
|
//{PB_6, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1
|
||||||
//{PB_6, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM8)}, // TIM8_CH1
|
//{PB_6, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM8, 1, 0)}, // TIM8_CH1
|
||||||
{PB_7, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17)}, // TIM17_CH1N
|
{PB_7, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17, 1, 1)}, // TIM17_CH1N
|
||||||
//{PB_7, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH2
|
//{PB_7, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2
|
||||||
//{PB_7, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM3)}, // TIM3_CH4
|
//{PB_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM3, 4, 0)}, // TIM3_CH4
|
||||||
{PB_8, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PB_8, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
//{PB_8, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH3
|
//{PB_8, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3
|
||||||
//{PB_8, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM8)}, // TIM8_CH2
|
//{PB_8, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM8, 2, 0)}, // TIM8_CH2
|
||||||
{PB_9, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17)}, // TIM17_CH1
|
{PB_9, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17, 1, 0)}, // TIM17_CH1
|
||||||
//{PB_9, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH4
|
//{PB_9, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
|
||||||
//{PB_9, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM8)}, // TIM8_CH3
|
//{PB_9, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM8, 3, 0)}, // TIM8_CH3
|
||||||
{PB_13, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1N
|
{PB_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
{PB_14, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15)}, // TIM15_CH1
|
{PB_14, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15, 1, 0)}, // TIM15_CH1
|
||||||
// {PB_14, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
// {PB_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
{PB_15, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15)}, // TIM15_CH2
|
{PB_15, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15, 2, 0)}, // TIM15_CH2
|
||||||
// {PB_15, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM15)}, // TIM15_CH1N
|
// {PB_15, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM15, 1, 1)}, // TIM15_CH1N
|
||||||
// {PB_15, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1)}, // TIM1_CH3N
|
// {PB_15, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
|
|
||||||
//{PC_6, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH1
|
//{PC_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
|
||||||
{PC_6, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH1
|
{PC_6, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 1, 0)}, // TIM8_CH1
|
||||||
//{PC_7, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2
|
//{PC_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
{PC_7, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH2
|
{PC_7, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 2, 0)}, // TIM8_CH2
|
||||||
//{PC_8, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH3
|
//{PC_8, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3
|
||||||
{PC_8, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH3
|
{PC_8, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 3, 0)}, // TIM8_CH3
|
||||||
//{PC_9, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH4
|
//{PC_9, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
|
||||||
{PC_9, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH4
|
{PC_9, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 4, 0)}, // TIM8_CH4
|
||||||
{PC_10, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH1N
|
{PC_10, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 1, 1)}, // TIM8_CH1N
|
||||||
{PC_11, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH2N
|
{PC_11, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 2, 1)}, // TIM8_CH2N
|
||||||
{PC_12, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH3N
|
{PC_12, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 3, 1)}, // TIM8_CH3N
|
||||||
{PC_13, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH4N
|
{PC_13, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 4, 1)}, // TIM8_CH4N
|
||||||
|
|
||||||
{PD_1, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH4
|
{PD_1, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 4, 0)}, // TIM8_CH4
|
||||||
{PD_12, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH1
|
{PD_12, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1
|
||||||
{PD_13, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH2
|
{PD_13, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2
|
||||||
{PD_14, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH3
|
{PD_14, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3
|
||||||
{PD_15, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH4
|
{PD_15, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
|
||||||
|
|
||||||
{PE_0, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM16)}, // TIM16_CH1
|
{PE_0, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
{PE_1, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM17)}, // TIM17_CH1
|
{PE_1, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM17, 1, 0)}, // TIM17_CH1
|
||||||
{PE_2, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH1
|
{PE_2, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
|
||||||
{PE_3, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2
|
{PE_3, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
{PE_4, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH3
|
{PE_4, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3
|
||||||
{PE_5, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH4
|
{PE_5, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
|
||||||
{PE_8, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH1N
|
{PE_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
{PE_9, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH1
|
{PE_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 1, 0)}, // TIM1_CH1
|
||||||
{PE_10, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH2N
|
{PE_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
{PE_11, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH2
|
{PE_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 2, 0)}, // TIM1_CH2
|
||||||
{PE_12, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH3N
|
{PE_12, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
{PE_13, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH3
|
{PE_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 3, 0)}, // TIM1_CH3
|
||||||
{PE_14, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH4
|
{PE_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 4, 0)}, // TIM1_CH4
|
||||||
|
|
||||||
{PF_0, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH3N
|
{PF_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -228,7 +228,6 @@ const PinMap PinMap_UART_RX[] = {
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//*** SPI ***
|
//*** SPI ***
|
||||||
|
|
||||||
const PinMap PinMap_SPI_MOSI[] = {
|
const PinMap PinMap_SPI_MOSI[] = {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -36,11 +36,22 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// See stm32f3xx_hal_gpio.h and stm32f3xx_hal_gpio_ex.h for values of MODE, PUPD and AFNUM
|
#define STM_PIN_DATA(MODE, PUPD, AFNUM) ((int)(((MODE & 0x0F) << 0) |\
|
||||||
#define STM_PIN_DATA(MODE, PUPD, AFNUM) ((int)(((AFNUM) << 7) | ((PUPD) << 4) | ((MODE) << 0)))
|
((PUPD & 0x07) << 4) |\
|
||||||
#define STM_PIN_MODE(X) (((X) >> 0) & 0x0F)
|
((AFNUM & 0x0F) << 7)))
|
||||||
#define STM_PIN_PUPD(X) (((X) >> 4) & 0x07)
|
|
||||||
#define STM_PIN_AFNUM(X) (((X) >> 7) & 0x0F)
|
#define STM_PIN_DATA_EXT(MODE, PUPD, AFNUM, CHANNEL, INVERTED) ((int)(((MODE & 0x0F) << 0) |\
|
||||||
|
((PUPD & 0x07) << 4) |\
|
||||||
|
((AFNUM & 0x0F) << 7) |\
|
||||||
|
((CHANNEL & 0x0F) << 11) |\
|
||||||
|
((INVERTED & 0x01) << 15)))
|
||||||
|
|
||||||
|
#define STM_PIN_MODE(X) (((X) >> 0) & 0x0F)
|
||||||
|
#define STM_PIN_PUPD(X) (((X) >> 4) & 0x07)
|
||||||
|
#define STM_PIN_AFNUM(X) (((X) >> 7) & 0x0F)
|
||||||
|
#define STM_PIN_CHANNEL(X) (((X) >> 11) & 0x0F)
|
||||||
|
#define STM_PIN_INVERTED(X) (((X) >> 15) & 0x01)
|
||||||
|
|
||||||
#define STM_MODE_INPUT (0)
|
#define STM_MODE_INPUT (0)
|
||||||
#define STM_MODE_OUTPUT_PP (1)
|
#define STM_MODE_OUTPUT_PP (1)
|
||||||
#define STM_MODE_OUTPUT_OD (2)
|
#define STM_MODE_OUTPUT_OD (2)
|
||||||
|
@ -66,107 +77,107 @@ typedef enum {
|
||||||
} PinDirection;
|
} PinDirection;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
PA_0 = 0x00,
|
PA_0 = 0x00,
|
||||||
PA_1 = 0x01,
|
PA_1 = 0x01,
|
||||||
PA_2 = 0x02,
|
PA_2 = 0x02,
|
||||||
PA_3 = 0x03,
|
PA_3 = 0x03,
|
||||||
PA_4 = 0x04,
|
PA_4 = 0x04,
|
||||||
PA_5 = 0x05,
|
PA_5 = 0x05,
|
||||||
PA_6 = 0x06,
|
PA_6 = 0x06,
|
||||||
PA_7 = 0x07,
|
PA_7 = 0x07,
|
||||||
PA_8 = 0x08,
|
PA_8 = 0x08,
|
||||||
PA_9 = 0x09,
|
PA_9 = 0x09,
|
||||||
PA_10 = 0x0A,
|
PA_10 = 0x0A,
|
||||||
PA_11 = 0x0B,
|
PA_11 = 0x0B,
|
||||||
PA_12 = 0x0C,
|
PA_12 = 0x0C,
|
||||||
PA_13 = 0x0D,
|
PA_13 = 0x0D,
|
||||||
PA_14 = 0x0E,
|
PA_14 = 0x0E,
|
||||||
PA_15 = 0x0F,
|
PA_15 = 0x0F,
|
||||||
|
|
||||||
PB_0 = 0x10,
|
PB_0 = 0x10,
|
||||||
PB_1 = 0x11,
|
PB_1 = 0x11,
|
||||||
PB_2 = 0x12,
|
PB_2 = 0x12,
|
||||||
PB_3 = 0x13,
|
PB_3 = 0x13,
|
||||||
PB_4 = 0x14,
|
PB_4 = 0x14,
|
||||||
PB_5 = 0x15,
|
PB_5 = 0x15,
|
||||||
PB_6 = 0x16,
|
PB_6 = 0x16,
|
||||||
PB_7 = 0x17,
|
PB_7 = 0x17,
|
||||||
PB_8 = 0x18,
|
PB_8 = 0x18,
|
||||||
PB_9 = 0x19,
|
PB_9 = 0x19,
|
||||||
PB_10 = 0x1A,
|
PB_10 = 0x1A,
|
||||||
PB_11 = 0x1B,
|
PB_11 = 0x1B,
|
||||||
PB_12 = 0x1C,
|
PB_12 = 0x1C,
|
||||||
PB_13 = 0x1D,
|
PB_13 = 0x1D,
|
||||||
PB_14 = 0x1E,
|
PB_14 = 0x1E,
|
||||||
PB_15 = 0x1F,
|
PB_15 = 0x1F,
|
||||||
|
|
||||||
PC_0 = 0x20,
|
PC_0 = 0x20,
|
||||||
PC_1 = 0x21,
|
PC_1 = 0x21,
|
||||||
PC_2 = 0x22,
|
PC_2 = 0x22,
|
||||||
PC_3 = 0x23,
|
PC_3 = 0x23,
|
||||||
PC_4 = 0x24,
|
PC_4 = 0x24,
|
||||||
PC_5 = 0x25,
|
PC_5 = 0x25,
|
||||||
PC_6 = 0x26,
|
PC_6 = 0x26,
|
||||||
PC_7 = 0x27,
|
PC_7 = 0x27,
|
||||||
PC_8 = 0x28,
|
PC_8 = 0x28,
|
||||||
PC_9 = 0x29,
|
PC_9 = 0x29,
|
||||||
PC_10 = 0x2A,
|
PC_10 = 0x2A,
|
||||||
PC_11 = 0x2B,
|
PC_11 = 0x2B,
|
||||||
PC_12 = 0x2C,
|
PC_12 = 0x2C,
|
||||||
PC_13 = 0x2D,
|
PC_13 = 0x2D,
|
||||||
PC_14 = 0x2E,
|
PC_14 = 0x2E,
|
||||||
PC_15 = 0x2F,
|
PC_15 = 0x2F,
|
||||||
|
|
||||||
PD_0 = 0x30,
|
PD_0 = 0x30,
|
||||||
PD_1 = 0x31,
|
PD_1 = 0x31,
|
||||||
PD_2 = 0x32,
|
PD_2 = 0x32,
|
||||||
PD_3 = 0x33,
|
PD_3 = 0x33,
|
||||||
PD_4 = 0x34,
|
PD_4 = 0x34,
|
||||||
PD_5 = 0x35,
|
PD_5 = 0x35,
|
||||||
PD_6 = 0x36,
|
PD_6 = 0x36,
|
||||||
PD_7 = 0x37,
|
PD_7 = 0x37,
|
||||||
PD_8 = 0x38,
|
PD_8 = 0x38,
|
||||||
PD_9 = 0x39,
|
PD_9 = 0x39,
|
||||||
PD_10 = 0x3A,
|
PD_10 = 0x3A,
|
||||||
PD_11 = 0x3B,
|
PD_11 = 0x3B,
|
||||||
PD_12 = 0x3C,
|
PD_12 = 0x3C,
|
||||||
PD_13 = 0x3D,
|
PD_13 = 0x3D,
|
||||||
PD_14 = 0x3E,
|
PD_14 = 0x3E,
|
||||||
PD_15 = 0x3F,
|
PD_15 = 0x3F,
|
||||||
|
|
||||||
PE_0 = 0x40,
|
PE_0 = 0x40,
|
||||||
PE_1 = 0x41,
|
PE_1 = 0x41,
|
||||||
PE_2 = 0x42,
|
PE_2 = 0x42,
|
||||||
PE_3 = 0x43,
|
PE_3 = 0x43,
|
||||||
PE_4 = 0x44,
|
PE_4 = 0x44,
|
||||||
PE_5 = 0x45,
|
PE_5 = 0x45,
|
||||||
PE_6 = 0x46,
|
PE_6 = 0x46,
|
||||||
PE_7 = 0x47,
|
PE_7 = 0x47,
|
||||||
PE_8 = 0x48,
|
PE_8 = 0x48,
|
||||||
PE_9 = 0x49,
|
PE_9 = 0x49,
|
||||||
PE_10 = 0x4A,
|
PE_10 = 0x4A,
|
||||||
PE_11 = 0x4B,
|
PE_11 = 0x4B,
|
||||||
PE_12 = 0x4C,
|
PE_12 = 0x4C,
|
||||||
PE_13 = 0x4D,
|
PE_13 = 0x4D,
|
||||||
PE_14 = 0x4E,
|
PE_14 = 0x4E,
|
||||||
PE_15 = 0x4F,
|
PE_15 = 0x4F,
|
||||||
|
|
||||||
PF_0 = 0x50,
|
PF_0 = 0x50,
|
||||||
PF_1 = 0x51,
|
PF_1 = 0x51,
|
||||||
PF_2 = 0x52,
|
PF_2 = 0x52,
|
||||||
PF_3 = 0x53,
|
PF_3 = 0x53,
|
||||||
PF_4 = 0x54,
|
PF_4 = 0x54,
|
||||||
PF_5 = 0x55,
|
PF_5 = 0x55,
|
||||||
PF_6 = 0x56,
|
PF_6 = 0x56,
|
||||||
PF_7 = 0x57,
|
PF_7 = 0x57,
|
||||||
PF_8 = 0x58,
|
PF_8 = 0x58,
|
||||||
PF_9 = 0x59,
|
PF_9 = 0x59,
|
||||||
PF_10 = 0x5A,
|
PF_10 = 0x5A,
|
||||||
PF_11 = 0x5B,
|
PF_11 = 0x5B,
|
||||||
PF_12 = 0x5C,
|
PF_12 = 0x5C,
|
||||||
PF_13 = 0x5D,
|
PF_13 = 0x5D,
|
||||||
PF_14 = 0x5E,
|
PF_14 = 0x5E,
|
||||||
PF_15 = 0x5F,
|
PF_15 = 0x5F,
|
||||||
|
|
||||||
// Arduino connector namings
|
// Arduino connector namings
|
||||||
A0 = PA_0,
|
A0 = PA_0,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,187 +0,0 @@
|
||||||
/* mbed Microcontroller Library
|
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
|
||||||
* may be used to endorse or promote products derived from this software
|
|
||||||
* without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
#include "mbed_assert.h"
|
|
||||||
#include "analogin_api.h"
|
|
||||||
|
|
||||||
#if DEVICE_ANALOGIN
|
|
||||||
|
|
||||||
#include "wait_api.h"
|
|
||||||
#include "cmsis.h"
|
|
||||||
#include "pinmap.h"
|
|
||||||
#include "PeripheralPins.h"
|
|
||||||
|
|
||||||
ADC_HandleTypeDef AdcHandle;
|
|
||||||
|
|
||||||
int adc_inited = 0;
|
|
||||||
|
|
||||||
void analogin_init(analogin_t *obj, PinName pin)
|
|
||||||
{
|
|
||||||
// Get the peripheral name from the pin and assign it to the object
|
|
||||||
obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC);
|
|
||||||
MBED_ASSERT(obj->adc != (ADCName)NC);
|
|
||||||
|
|
||||||
// Configure GPIO
|
|
||||||
pinmap_pinout(pin, PinMap_ADC);
|
|
||||||
|
|
||||||
// Save pin number for the read function
|
|
||||||
obj->pin = pin;
|
|
||||||
|
|
||||||
// The ADC initialization is done once
|
|
||||||
if (adc_inited == 0) {
|
|
||||||
adc_inited = 1;
|
|
||||||
|
|
||||||
// Enable ADC clock
|
|
||||||
__ADC12_CLK_ENABLE();
|
|
||||||
__ADC34_CLK_ENABLE();
|
|
||||||
|
|
||||||
// Configure ADC
|
|
||||||
AdcHandle.Instance = (ADC_TypeDef *)(obj->adc);
|
|
||||||
AdcHandle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
|
|
||||||
AdcHandle.Init.Resolution = ADC_RESOLUTION12b;
|
|
||||||
AdcHandle.Init.ScanConvMode = DISABLE;
|
|
||||||
AdcHandle.Init.ContinuousConvMode = DISABLE;
|
|
||||||
AdcHandle.Init.DiscontinuousConvMode = DISABLE;
|
|
||||||
AdcHandle.Init.NbrOfDiscConversion = 0;
|
|
||||||
AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
|
|
||||||
AdcHandle.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
|
|
||||||
AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
|
||||||
AdcHandle.Init.NbrOfConversion = 1;
|
|
||||||
AdcHandle.Init.DMAContinuousRequests = DISABLE;
|
|
||||||
AdcHandle.Init.EOCSelection = DISABLE;
|
|
||||||
HAL_ADC_Init(&AdcHandle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline uint16_t adc_read(analogin_t *obj)
|
|
||||||
{
|
|
||||||
ADC_ChannelConfTypeDef sConfig;
|
|
||||||
|
|
||||||
AdcHandle.Instance = (ADC_TypeDef *)(obj->adc);
|
|
||||||
|
|
||||||
// Configure ADC channel
|
|
||||||
sConfig.Rank = ADC_REGULAR_RANK_1;
|
|
||||||
sConfig.SamplingTime = ADC_SAMPLETIME_19CYCLES_5;
|
|
||||||
sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
|
||||||
sConfig.OffsetNumber = ADC_OFFSET_NONE;
|
|
||||||
sConfig.Offset = 0;
|
|
||||||
|
|
||||||
switch (obj->pin) {
|
|
||||||
case PA_0:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_1;
|
|
||||||
break;
|
|
||||||
case PA_1:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_2;
|
|
||||||
break;
|
|
||||||
case PA_2:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_3;
|
|
||||||
break;
|
|
||||||
case PA_3:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_4;
|
|
||||||
break;
|
|
||||||
case PA_4:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_1;
|
|
||||||
break;
|
|
||||||
case PA_5:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_5;
|
|
||||||
break;
|
|
||||||
case PA_6:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_3;
|
|
||||||
break;
|
|
||||||
case PA_7:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_4;
|
|
||||||
break;
|
|
||||||
case PB_0:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_12;
|
|
||||||
break;
|
|
||||||
case PB_1:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_1;
|
|
||||||
break;
|
|
||||||
case PB_2:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_12;
|
|
||||||
break;
|
|
||||||
case PB_11:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_14;
|
|
||||||
break;
|
|
||||||
case PB_13:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_5;
|
|
||||||
break;
|
|
||||||
case PC_0:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_6;
|
|
||||||
break;
|
|
||||||
case PC_1:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_7;
|
|
||||||
break;
|
|
||||||
case PC_2:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_8;
|
|
||||||
break;
|
|
||||||
case PC_3:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_9;
|
|
||||||
break;
|
|
||||||
case PC_4:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_5;
|
|
||||||
break;
|
|
||||||
case PC_5:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_11;
|
|
||||||
break;
|
|
||||||
case PF_2:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_10;
|
|
||||||
break;
|
|
||||||
case PF_4:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_5;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
|
|
||||||
|
|
||||||
HAL_ADC_Start(&AdcHandle); // Start conversion
|
|
||||||
|
|
||||||
// Wait end of conversion and get value
|
|
||||||
if (HAL_ADC_PollForConversion(&AdcHandle, 10) == HAL_OK) {
|
|
||||||
return (HAL_ADC_GetValue(&AdcHandle));
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t analogin_read_u16(analogin_t *obj)
|
|
||||||
{
|
|
||||||
uint16_t value = adc_read(obj);
|
|
||||||
// 12-bit to 16-bit conversion
|
|
||||||
value = ((value << 4) & (uint16_t)0xFFF0) | ((value >> 8) & (uint16_t)0x000F);
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
float analogin_read(analogin_t *obj)
|
|
||||||
{
|
|
||||||
uint16_t value = adc_read(obj);
|
|
||||||
return (float)value * (1.0f / (float)0xFFF); // 12 bits range
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -57,11 +57,13 @@ struct port_s {
|
||||||
struct analogin_s {
|
struct analogin_s {
|
||||||
ADCName adc;
|
ADCName adc;
|
||||||
PinName pin;
|
PinName pin;
|
||||||
|
uint32_t channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct dac_s {
|
struct dac_s {
|
||||||
DACName dac;
|
DACName dac;
|
||||||
PinName pin;
|
PinName pin;
|
||||||
|
uint32_t channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct serial_s {
|
struct serial_s {
|
||||||
|
@ -99,6 +101,8 @@ struct pwmout_s {
|
||||||
PinName pin;
|
PinName pin;
|
||||||
uint32_t period;
|
uint32_t period;
|
||||||
uint32_t pulse;
|
uint32_t pulse;
|
||||||
|
uint32_t channel;
|
||||||
|
uint32_t inverted;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "gpio_object.h"
|
#include "gpio_object.h"
|
||||||
|
|
|
@ -1,233 +0,0 @@
|
||||||
/* mbed Microcontroller Library
|
|
||||||
*******************************************************************************
|
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
|
||||||
* may be used to endorse or promote products derived from this software
|
|
||||||
* without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*******************************************************************************
|
|
||||||
*/
|
|
||||||
#include "pwmout_api.h"
|
|
||||||
|
|
||||||
#if DEVICE_PWMOUT
|
|
||||||
|
|
||||||
#include "cmsis.h"
|
|
||||||
#include "pinmap.h"
|
|
||||||
#include "mbed_error.h"
|
|
||||||
#include "PeripheralPins.h"
|
|
||||||
|
|
||||||
static TIM_HandleTypeDef TimHandle;
|
|
||||||
|
|
||||||
void pwmout_init(pwmout_t* obj, PinName pin)
|
|
||||||
{
|
|
||||||
// Get the peripheral name from the pin and assign it to the object
|
|
||||||
obj->pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM);
|
|
||||||
|
|
||||||
if (obj->pwm == (PWMName)NC) {
|
|
||||||
error("PWM error: pinout mapping failed.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enable TIM clock
|
|
||||||
if (obj->pwm == PWM_1) __TIM1_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_2) __TIM2_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_15) __TIM15_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_16) __TIM16_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_17) __TIM17_CLK_ENABLE();
|
|
||||||
|
|
||||||
// Configure GPIO
|
|
||||||
pinmap_pinout(pin, PinMap_PWM);
|
|
||||||
|
|
||||||
obj->pin = pin;
|
|
||||||
obj->period = 0;
|
|
||||||
obj->pulse = 0;
|
|
||||||
|
|
||||||
pwmout_period_us(obj, 20000); // 20 ms per default
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_free(pwmout_t* obj)
|
|
||||||
{
|
|
||||||
// Configure GPIO
|
|
||||||
pin_function(obj->pin, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_write(pwmout_t* obj, float value)
|
|
||||||
{
|
|
||||||
TIM_OC_InitTypeDef sConfig;
|
|
||||||
int channel = 0;
|
|
||||||
int complementary_channel = 0;
|
|
||||||
|
|
||||||
TimHandle.Instance = (TIM_TypeDef *)(obj->pwm);
|
|
||||||
|
|
||||||
if (value < (float)0.0) {
|
|
||||||
value = 0.0;
|
|
||||||
} else if (value > (float)1.0) {
|
|
||||||
value = 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
obj->pulse = (uint32_t)((float)obj->period * value);
|
|
||||||
|
|
||||||
// Configure channels
|
|
||||||
sConfig.OCMode = TIM_OCMODE_PWM1;
|
|
||||||
sConfig.Pulse = obj->pulse;
|
|
||||||
sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
|
|
||||||
sConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH;
|
|
||||||
sConfig.OCFastMode = TIM_OCFAST_DISABLE;
|
|
||||||
sConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
|
|
||||||
sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
|
||||||
|
|
||||||
switch (obj->pin) {
|
|
||||||
|
|
||||||
// Channels 1
|
|
||||||
case PA_2:
|
|
||||||
case PA_6:
|
|
||||||
case PA_7:
|
|
||||||
case PA_8:
|
|
||||||
case PA_12:
|
|
||||||
case PB_4:
|
|
||||||
case PB_5:
|
|
||||||
case PB_8:
|
|
||||||
case PB_9:
|
|
||||||
case PB_14:
|
|
||||||
case PC_0:
|
|
||||||
channel = TIM_CHANNEL_1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 1N
|
|
||||||
case PA_1:
|
|
||||||
case PA_13:
|
|
||||||
case PB_6:
|
|
||||||
case PB_7:
|
|
||||||
case PB_13:
|
|
||||||
case PC_13:
|
|
||||||
channel = TIM_CHANNEL_1;
|
|
||||||
complementary_channel = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 2
|
|
||||||
case PA_3:
|
|
||||||
case PA_9:
|
|
||||||
case PB_15:
|
|
||||||
case PC_1:
|
|
||||||
channel = TIM_CHANNEL_2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 2N
|
|
||||||
case PB_0:
|
|
||||||
channel = TIM_CHANNEL_2;
|
|
||||||
complementary_channel = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 3
|
|
||||||
case PA_10:
|
|
||||||
case PC_2:
|
|
||||||
channel = TIM_CHANNEL_3;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 3N
|
|
||||||
case PB_1:
|
|
||||||
case PF_0:
|
|
||||||
channel = TIM_CHANNEL_3;
|
|
||||||
complementary_channel = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 4
|
|
||||||
case PA_11:
|
|
||||||
case PC_3:
|
|
||||||
channel = TIM_CHANNEL_4;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, channel);
|
|
||||||
|
|
||||||
if (complementary_channel) {
|
|
||||||
HAL_TIMEx_PWMN_Start(&TimHandle, channel);
|
|
||||||
} else {
|
|
||||||
HAL_TIM_PWM_Start(&TimHandle, channel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
float pwmout_read(pwmout_t* obj)
|
|
||||||
{
|
|
||||||
float value = 0;
|
|
||||||
if (obj->period > 0) {
|
|
||||||
value = (float)(obj->pulse) / (float)(obj->period);
|
|
||||||
}
|
|
||||||
return ((value > (float)1.0) ? (float)(1.0) : (value));
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_period(pwmout_t* obj, float seconds)
|
|
||||||
{
|
|
||||||
pwmout_period_us(obj, seconds * 1000000.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_period_ms(pwmout_t* obj, int ms)
|
|
||||||
{
|
|
||||||
pwmout_period_us(obj, ms * 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_period_us(pwmout_t* obj, int us)
|
|
||||||
{
|
|
||||||
TimHandle.Instance = (TIM_TypeDef *)(obj->pwm);
|
|
||||||
|
|
||||||
float dc = pwmout_read(obj);
|
|
||||||
|
|
||||||
__HAL_TIM_DISABLE(&TimHandle);
|
|
||||||
|
|
||||||
// Update the SystemCoreClock variable
|
|
||||||
SystemCoreClockUpdate();
|
|
||||||
|
|
||||||
TimHandle.Init.Period = us - 1;
|
|
||||||
TimHandle.Init.Prescaler = (uint16_t)(SystemCoreClock / 1000000) - 1; // 1 µs tick
|
|
||||||
TimHandle.Init.ClockDivision = 0;
|
|
||||||
TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
||||||
HAL_TIM_PWM_Init(&TimHandle);
|
|
||||||
|
|
||||||
// Set duty cycle again
|
|
||||||
pwmout_write(obj, dc);
|
|
||||||
|
|
||||||
// Save for future use
|
|
||||||
obj->period = us;
|
|
||||||
|
|
||||||
__HAL_TIM_ENABLE(&TimHandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_pulsewidth(pwmout_t* obj, float seconds)
|
|
||||||
{
|
|
||||||
pwmout_pulsewidth_us(obj, seconds * 1000000.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_pulsewidth_ms(pwmout_t* obj, int ms)
|
|
||||||
{
|
|
||||||
pwmout_pulsewidth_us(obj, ms * 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_pulsewidth_us(pwmout_t* obj, int us)
|
|
||||||
{
|
|
||||||
float value = (float)us / (float)obj->period;
|
|
||||||
pwmout_write(obj, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -39,38 +39,32 @@
|
||||||
//*** ADC ***
|
//*** ADC ***
|
||||||
|
|
||||||
const PinMap PinMap_ADC[] = {
|
const PinMap PinMap_ADC[] = {
|
||||||
{PA_0, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN1 - ARDUINO
|
{PA_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1
|
||||||
{PA_1, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN2 - ARDUINO
|
{PA_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2
|
||||||
{PA_2, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN3
|
{PA_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3
|
||||||
{PA_3, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN4
|
{PA_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_IN4
|
||||||
{PA_4, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN1 - ARDUINO
|
{PA_4, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC2_IN1
|
||||||
{PA_5, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN2
|
{PA_5, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC2_IN2
|
||||||
{PA_6, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN3
|
{PA_6, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC2_IN3
|
||||||
{PA_7, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN4
|
{PA_7, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC2_IN4
|
||||||
|
|
||||||
{PB_0, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN11 - ARDUINO
|
{PB_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11
|
||||||
{PB_1, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN12
|
{PB_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12
|
||||||
{PB_2, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN12
|
{PB_2, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC2_IN12
|
||||||
{PB_12, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN13
|
{PB_12, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC2_IN13
|
||||||
{PB_13, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN13
|
{PB_13, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_IN13
|
||||||
{PB_14, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN14
|
{PB_14, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC2_IN14
|
||||||
{PB_15, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN15
|
{PB_15, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC2_IN15
|
||||||
|
|
||||||
{PC_0, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN6 - ARDUINO
|
|
||||||
{PC_1, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN7 - ARDUINO
|
|
||||||
{PC_2, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN8
|
|
||||||
{PC_3, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN9
|
|
||||||
{PC_4, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN5
|
|
||||||
{PC_5, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN11
|
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
//*** DAC ***
|
//*** DAC ***
|
||||||
|
|
||||||
const PinMap PinMap_DAC[] = {
|
const PinMap PinMap_DAC[] = {
|
||||||
{PA_4, DAC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // DAC1_OUT1
|
{PA_4, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC1_OUT1
|
||||||
{PA_5, DAC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // DAC1_OUT2 (Warning: LED1 is also on this pin)
|
{PA_5, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC1_OUT2
|
||||||
{PA_6, DAC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // DAC2_OUT1
|
{PA_6, DAC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC2_OUT1
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -94,66 +88,58 @@ const PinMap PinMap_I2C_SCL[] = {
|
||||||
|
|
||||||
// TIM2 cannot be used because already used by the us_ticker
|
// TIM2 cannot be used because already used by the us_ticker
|
||||||
const PinMap PinMap_PWM[] = {
|
const PinMap PinMap_PWM[] = {
|
||||||
// {PA_0, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH1
|
// {PA_0, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
|
||||||
// {PA_1, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH2
|
// {PA_1, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2
|
||||||
{PA_1, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15)}, // TIM15_CH1N
|
{PA_1, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15, 1, 1)}, // TIM15_CH1N
|
||||||
// {PA_2, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH3
|
// {PA_2, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3
|
||||||
{PA_2, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15)}, // TIM15_CH1
|
{PA_2, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15, 1, 0)}, // TIM15_CH1
|
||||||
// {PA_3, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH4
|
// {PA_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
|
||||||
{PA_3, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15)}, // TIM15_CH2
|
{PA_3, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15, 2, 0)}, // TIM15_CH2
|
||||||
{PA_4, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2
|
{PA_4, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
// {PA_5, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH1
|
// {PA_5, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
|
||||||
{PA_6, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PA_6, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
// {PA_6, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH1
|
// {PA_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
|
||||||
{PA_7, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17)}, // TIM17_CH1 - ARDUINO
|
{PA_7, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17, 1, 0)}, // TIM17_CH1
|
||||||
// {PA_7, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2 - ARDUINO
|
// {PA_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
// {PA_7, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1N - ARDUINO
|
// {PA_7, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
{PA_8, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1
|
{PA_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 0)}, // TIM1_CH1
|
||||||
{PA_9, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2
|
{PA_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 0)}, // TIM1_CH2
|
||||||
// {PA_9, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2)}, // TIM2_CH3
|
// {PA_9, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2, 3, 0)}, // TIM2_CH3
|
||||||
{PA_10, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH3
|
{PA_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 3, 0)}, // TIM1_CH3
|
||||||
// {PA_10, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2)}, // TIM2_CH4
|
// {PA_10, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2, 4, 0)}, // TIM2_CH4
|
||||||
// {PA_11, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1N
|
// {PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
{PA_11, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_TIM1)}, // TIM1_CH4
|
{PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_TIM1, 4, 0)}, // TIM1_CH4
|
||||||
{PA_12, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PA_12, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
// {PA_12, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
// {PA_12, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
{PA_13, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1N
|
{PA_13, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 1)}, // TIM16_CH1N
|
||||||
// {PA_15, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH1
|
// {PA_15, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
|
||||||
|
|
||||||
{PB_0, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH3
|
{PB_0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3
|
||||||
// {PB_0, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
// {PB_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
{PB_1, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH4
|
{PB_1, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
|
||||||
// {PB_1, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH3N
|
// {PB_1, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
// {PB_3, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH2 - ARDUINO --> USED BY TIMER
|
// {PB_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 --> USED BY TIMER
|
||||||
{PB_4, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1 - ARDUINO
|
{PB_4, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
// {PB_4, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH1 - ARDUINO
|
// {PB_4, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
|
||||||
// {PB_5, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2
|
// {PB_5, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
{PB_5, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM17)}, // TIM17_CH1
|
{PB_5, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM17, 1, 0)}, // TIM17_CH1
|
||||||
{PB_6, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1N - ARDUINO
|
{PB_6, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 1)}, // TIM16_CH1N
|
||||||
// {PB_7, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17)}, // TIM17_CH1N
|
// {PB_7, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17, 1, 1)}, // TIM17_CH1N
|
||||||
{PB_7, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM3)}, // TIM3_CH4
|
{PB_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM3, 4, 0)}, // TIM3_CH4
|
||||||
{PB_8, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PB_8, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
{PB_9, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17)}, // TIM17_CH1
|
{PB_9, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17, 1, 0)}, // TIM17_CH1
|
||||||
// {PB_10, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH3 - ARDUINO --> USED BY TIMER
|
// {PB_10, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 --> USED BY TIMER
|
||||||
// {PB_11, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH4
|
// {PB_11, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
|
||||||
{PB_13, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1N
|
{PB_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
{PB_14, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15)}, // TIM15_CH1
|
{PB_14, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15, 1, 0)}, // TIM15_CH1
|
||||||
// {PB_14, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
// {PB_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
{PB_15, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15)}, // TIM15_CH2
|
{PB_15, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15, 2, 0)}, // TIM15_CH2
|
||||||
// {PB_15, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM15)}, // TIM15_CH1N
|
// {PB_15, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM15, 1, 1)}, // TIM15_CH1N
|
||||||
// {PB_15, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1)}, // TIM1_CH3N
|
// {PB_15, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
|
|
||||||
{PC_0, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH1
|
{PC_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
{PC_1, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH2
|
|
||||||
{PC_2, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH3
|
|
||||||
{PC_3, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH4
|
|
||||||
{PC_6, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH1
|
|
||||||
{PC_7, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2 - ARDUINO
|
|
||||||
{PC_8, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH3
|
|
||||||
{PC_9, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH4
|
|
||||||
{PC_13, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1)}, // TIM1_CH1N
|
|
||||||
|
|
||||||
{PF_0, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH3N
|
{PF_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -167,8 +153,6 @@ const PinMap PinMap_UART_TX[] = {
|
||||||
{PB_6, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
|
{PB_6, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
|
||||||
{PB_9, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
|
{PB_9, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
|
||||||
{PB_10, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
|
{PB_10, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
|
||||||
{PC_4, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
|
|
||||||
{PC_10, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
|
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -180,8 +164,6 @@ const PinMap PinMap_UART_RX[] = {
|
||||||
{PB_7, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
|
{PB_7, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
|
||||||
{PB_8, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
|
{PB_8, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
|
||||||
{PB_11, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
|
{PB_11, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
|
||||||
{PC_5, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
|
|
||||||
{PC_11, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
|
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -36,11 +36,22 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// See stm32f3xx_hal_gpio.h and stm32f3xx_hal_gpio_ex.h for values of MODE, PUPD and AFNUM
|
#define STM_PIN_DATA(MODE, PUPD, AFNUM) ((int)(((MODE & 0x0F) << 0) |\
|
||||||
#define STM_PIN_DATA(MODE, PUPD, AFNUM) ((int)(((AFNUM) << 7) | ((PUPD) << 4) | ((MODE) << 0)))
|
((PUPD & 0x07) << 4) |\
|
||||||
#define STM_PIN_MODE(X) (((X) >> 0) & 0x0F)
|
((AFNUM & 0x0F) << 7)))
|
||||||
#define STM_PIN_PUPD(X) (((X) >> 4) & 0x07)
|
|
||||||
#define STM_PIN_AFNUM(X) (((X) >> 7) & 0x0F)
|
#define STM_PIN_DATA_EXT(MODE, PUPD, AFNUM, CHANNEL, INVERTED) ((int)(((MODE & 0x0F) << 0) |\
|
||||||
|
((PUPD & 0x07) << 4) |\
|
||||||
|
((AFNUM & 0x0F) << 7) |\
|
||||||
|
((CHANNEL & 0x0F) << 11) |\
|
||||||
|
((INVERTED & 0x01) << 15)))
|
||||||
|
|
||||||
|
#define STM_PIN_MODE(X) (((X) >> 0) & 0x0F)
|
||||||
|
#define STM_PIN_PUPD(X) (((X) >> 4) & 0x07)
|
||||||
|
#define STM_PIN_AFNUM(X) (((X) >> 7) & 0x0F)
|
||||||
|
#define STM_PIN_CHANNEL(X) (((X) >> 11) & 0x0F)
|
||||||
|
#define STM_PIN_INVERTED(X) (((X) >> 15) & 0x01)
|
||||||
|
|
||||||
#define STM_MODE_INPUT (0)
|
#define STM_MODE_INPUT (0)
|
||||||
#define STM_MODE_OUTPUT_PP (1)
|
#define STM_MODE_OUTPUT_PP (1)
|
||||||
#define STM_MODE_OUTPUT_OD (2)
|
#define STM_MODE_OUTPUT_OD (2)
|
||||||
|
@ -100,29 +111,16 @@ typedef enum {
|
||||||
PB_14 = 0x1E,
|
PB_14 = 0x1E,
|
||||||
PB_15 = 0x1F,
|
PB_15 = 0x1F,
|
||||||
|
|
||||||
PC_0 = 0x20,
|
|
||||||
PC_1 = 0x21,
|
|
||||||
PC_2 = 0x22,
|
|
||||||
PC_3 = 0x23,
|
|
||||||
PC_4 = 0x24,
|
|
||||||
PC_5 = 0x25,
|
|
||||||
PC_6 = 0x26,
|
|
||||||
PC_7 = 0x27,
|
|
||||||
PC_8 = 0x28,
|
|
||||||
PC_9 = 0x29,
|
|
||||||
PC_10 = 0x2A,
|
|
||||||
PC_11 = 0x2B,
|
|
||||||
PC_12 = 0x2C,
|
|
||||||
PC_13 = 0x2D,
|
PC_13 = 0x2D,
|
||||||
PC_14 = 0x2E,
|
PC_14 = 0x2E,
|
||||||
PC_15 = 0x2F,
|
PC_15 = 0x2F,
|
||||||
|
|
||||||
PD_2 = 0x32,
|
|
||||||
|
|
||||||
PF_0 = 0x50,
|
PF_0 = 0x50,
|
||||||
PF_1 = 0x51,
|
PF_1 = 0x51,
|
||||||
|
|
||||||
// Arduino connector namings
|
// Arduino connector namings
|
||||||
|
// Note: The Arduino connector is not present on this board.
|
||||||
|
// We keep these definitions for compatibility with Nucleo code examples.
|
||||||
// A0 = PA_0,
|
// A0 = PA_0,
|
||||||
// A1 = PA_1,
|
// A1 = PA_1,
|
||||||
// A2 = PA_4,
|
// A2 = PA_4,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,187 +0,0 @@
|
||||||
/* mbed Microcontroller Library
|
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
|
||||||
* may be used to endorse or promote products derived from this software
|
|
||||||
* without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
#include "mbed_assert.h"
|
|
||||||
#include "analogin_api.h"
|
|
||||||
|
|
||||||
#if DEVICE_ANALOGIN
|
|
||||||
|
|
||||||
#include "wait_api.h"
|
|
||||||
#include "cmsis.h"
|
|
||||||
#include "pinmap.h"
|
|
||||||
#include "PeripheralPins.h"
|
|
||||||
|
|
||||||
ADC_HandleTypeDef AdcHandle;
|
|
||||||
|
|
||||||
int adc_inited = 0;
|
|
||||||
|
|
||||||
void analogin_init(analogin_t *obj, PinName pin)
|
|
||||||
{
|
|
||||||
// Get the peripheral name from the pin and assign it to the object
|
|
||||||
obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC);
|
|
||||||
MBED_ASSERT(obj->adc != (ADCName)NC);
|
|
||||||
|
|
||||||
// Configure GPIO
|
|
||||||
pinmap_pinout(pin, PinMap_ADC);
|
|
||||||
|
|
||||||
// Save pin number for the read function
|
|
||||||
obj->pin = pin;
|
|
||||||
|
|
||||||
// The ADC initialization is done once
|
|
||||||
if (adc_inited == 0) {
|
|
||||||
adc_inited = 1;
|
|
||||||
|
|
||||||
// Enable ADC clock
|
|
||||||
if (obj->adc == ADC_1) __ADC1_CLK_ENABLE();
|
|
||||||
if (obj->adc == ADC_2) __ADC2_CLK_ENABLE();
|
|
||||||
|
|
||||||
// Configure ADC
|
|
||||||
AdcHandle.Instance = (ADC_TypeDef *)(obj->adc);
|
|
||||||
AdcHandle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
|
|
||||||
AdcHandle.Init.Resolution = ADC_RESOLUTION12b;
|
|
||||||
AdcHandle.Init.ScanConvMode = DISABLE;
|
|
||||||
AdcHandle.Init.ContinuousConvMode = DISABLE;
|
|
||||||
AdcHandle.Init.DiscontinuousConvMode = DISABLE;
|
|
||||||
AdcHandle.Init.NbrOfDiscConversion = 0;
|
|
||||||
AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
|
|
||||||
AdcHandle.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
|
|
||||||
AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
|
||||||
AdcHandle.Init.NbrOfConversion = 1;
|
|
||||||
AdcHandle.Init.DMAContinuousRequests = DISABLE;
|
|
||||||
AdcHandle.Init.EOCSelection = DISABLE;
|
|
||||||
HAL_ADC_Init(&AdcHandle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline uint16_t adc_read(analogin_t *obj)
|
|
||||||
{
|
|
||||||
ADC_ChannelConfTypeDef sConfig;
|
|
||||||
|
|
||||||
AdcHandle.Instance = (ADC_TypeDef *)(obj->adc);
|
|
||||||
|
|
||||||
// Configure ADC channel
|
|
||||||
sConfig.Rank = ADC_REGULAR_RANK_1;
|
|
||||||
sConfig.SamplingTime = ADC_SAMPLETIME_19CYCLES_5;
|
|
||||||
sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
|
||||||
sConfig.OffsetNumber = ADC_OFFSET_NONE;
|
|
||||||
sConfig.Offset = 0;
|
|
||||||
|
|
||||||
switch (obj->pin) {
|
|
||||||
case PA_0:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_1;
|
|
||||||
break;
|
|
||||||
case PA_1:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_2;
|
|
||||||
break;
|
|
||||||
case PA_2:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_3;
|
|
||||||
break;
|
|
||||||
case PA_3:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_4;
|
|
||||||
break;
|
|
||||||
case PA_4:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_1;
|
|
||||||
break;
|
|
||||||
case PA_5:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_2;
|
|
||||||
break;
|
|
||||||
case PA_6:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_3;
|
|
||||||
break;
|
|
||||||
case PA_7:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_4;
|
|
||||||
break;
|
|
||||||
case PB_0:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_11;
|
|
||||||
break;
|
|
||||||
case PB_1:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_12;
|
|
||||||
break;
|
|
||||||
case PB_2:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_12;
|
|
||||||
break;
|
|
||||||
case PB_12:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_13;
|
|
||||||
break;
|
|
||||||
case PB_13:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_13;
|
|
||||||
break;
|
|
||||||
case PB_14:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_14;
|
|
||||||
break;
|
|
||||||
case PB_15:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_15;
|
|
||||||
break;
|
|
||||||
case PC_0:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_6;
|
|
||||||
break;
|
|
||||||
case PC_1:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_7;
|
|
||||||
break;
|
|
||||||
case PC_2:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_8;
|
|
||||||
break;
|
|
||||||
case PC_3:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_9;
|
|
||||||
break;
|
|
||||||
case PC_4:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_5;
|
|
||||||
break;
|
|
||||||
case PC_5:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_11;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
|
|
||||||
|
|
||||||
HAL_ADC_Start(&AdcHandle); // Start conversion
|
|
||||||
|
|
||||||
// Wait end of conversion and get value
|
|
||||||
if (HAL_ADC_PollForConversion(&AdcHandle, 10) == HAL_OK) {
|
|
||||||
return (HAL_ADC_GetValue(&AdcHandle));
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t analogin_read_u16(analogin_t *obj)
|
|
||||||
{
|
|
||||||
uint16_t value = adc_read(obj);
|
|
||||||
// 12-bit to 16-bit conversion
|
|
||||||
value = ((value << 4) & (uint16_t)0xFFF0) | ((value >> 8) & (uint16_t)0x000F);
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
float analogin_read(analogin_t *obj)
|
|
||||||
{
|
|
||||||
uint16_t value = adc_read(obj);
|
|
||||||
return (float)value * (1.0f / (float)0xFFF); // 12 bits range
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -57,11 +57,13 @@ struct port_s {
|
||||||
struct analogin_s {
|
struct analogin_s {
|
||||||
ADCName adc;
|
ADCName adc;
|
||||||
PinName pin;
|
PinName pin;
|
||||||
|
uint32_t channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct dac_s {
|
struct dac_s {
|
||||||
DACName dac;
|
DACName dac;
|
||||||
PinName pin;
|
PinName pin;
|
||||||
|
uint32_t channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct serial_s {
|
struct serial_s {
|
||||||
|
@ -99,6 +101,8 @@ struct pwmout_s {
|
||||||
PinName pin;
|
PinName pin;
|
||||||
uint32_t period;
|
uint32_t period;
|
||||||
uint32_t pulse;
|
uint32_t pulse;
|
||||||
|
uint32_t channel;
|
||||||
|
uint32_t inverted;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "gpio_object.h"
|
#include "gpio_object.h"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -39,30 +39,30 @@
|
||||||
//*** ADC ***
|
//*** ADC ***
|
||||||
|
|
||||||
const PinMap PinMap_ADC[] = {
|
const PinMap PinMap_ADC[] = {
|
||||||
{PA_0, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN1 - ARDUINO A0
|
{PA_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1 - ARDUINO A0
|
||||||
{PA_1, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN2 - ARDUINO A1
|
{PA_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2 - ARDUINO A1
|
||||||
{PA_2, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN3
|
{PA_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3
|
||||||
{PA_3, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN4
|
{PA_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_IN4
|
||||||
{PA_4, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN5 - ARDUINO A2
|
{PA_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_IN5 - ARDUINO A2
|
||||||
{PA_6, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN10
|
{PA_6, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10
|
||||||
{PA_7, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN15
|
{PA_7, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_IN15
|
||||||
|
|
||||||
{PB_0, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN11 - ARDUINO A3
|
{PB_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11 - ARDUINO A3
|
||||||
{PB_1, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN12
|
{PB_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12
|
||||||
{PB_11, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN14
|
{PB_11, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC1_IN14
|
||||||
{PB_13, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN13
|
{PB_13, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_IN13
|
||||||
|
|
||||||
{PC_0, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN6 - ARDUINO A5
|
{PC_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_IN6 - ARDUINO A5
|
||||||
{PC_1, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN7 - ARDUINO A4
|
{PC_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_IN7 - ARDUINO A4
|
||||||
{PC_2, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN8
|
{PC_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8
|
||||||
{PC_3, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN9
|
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
//*** DAC ***
|
//*** DAC ***
|
||||||
|
|
||||||
const PinMap PinMap_DAC[] = {
|
const PinMap PinMap_DAC[] = {
|
||||||
{PA_4, DAC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // DAC_OUT1
|
{PA_4, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC_OUT1
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -93,52 +93,52 @@ const PinMap PinMap_I2C_SCL[] = {
|
||||||
|
|
||||||
// TIM2 cannot be used because already used by the us_ticker
|
// TIM2 cannot be used because already used by the us_ticker
|
||||||
const PinMap PinMap_PWM[] = {
|
const PinMap PinMap_PWM[] = {
|
||||||
// {PA_0, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH1
|
// {PA_0, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
|
||||||
// {PA_1, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH2
|
// {PA_1, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2
|
||||||
{PA_1, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15)}, // TIM15_CH1N
|
{PA_1, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15, 1, 1)}, // TIM15_CH1N
|
||||||
{PA_2, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15)}, // TIM15_CH1
|
{PA_2, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15, 1, 0)}, // TIM15_CH1
|
||||||
{PA_3, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15)}, // TIM15_CH2
|
{PA_3, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15, 2, 0)}, // TIM15_CH2
|
||||||
// {PA_5, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH1
|
// {PA_5, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
|
||||||
{PA_6, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PA_6, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
{PA_7, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17)}, // TIM17_CH1 - ARDUINO
|
{PA_7, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17, 1, 0)}, // TIM17_CH1 - ARDUINO
|
||||||
// {PA_7, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1N - ARDUINO
|
// {PA_7, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 1)}, // TIM1_CH1N - ARDUINO
|
||||||
{PA_8, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1
|
{PA_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 0)}, // TIM1_CH1
|
||||||
{PA_9, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2
|
{PA_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 0)}, // TIM1_CH2
|
||||||
// {PA_9, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2)}, // TIM2_CH3
|
// {PA_9, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2, 3, 0)}, // TIM2_CH3
|
||||||
{PA_10, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH3
|
{PA_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 3, 0)}, // TIM1_CH3
|
||||||
// {PA_10, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2)}, // TIM2_CH4
|
// {PA_10, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2, 4, 0)}, // TIM2_CH4
|
||||||
{PA_11, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_TIM1)}, // TIM1_CH4
|
{PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_TIM1, 4, 0)}, // TIM1_CH4
|
||||||
// {PA_11, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1N
|
// {PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
{PA_12, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PA_12, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
// {PA_12, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
// {PA_12, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
{PA_13, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1N
|
{PA_13, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 1)}, // TIM16_CH1N
|
||||||
// {PA_15, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH1
|
// {PA_15, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
|
||||||
|
|
||||||
{PB_0, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
{PB_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
{PB_1, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH3N
|
{PB_1, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
// {PB_3, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH2 - ARDUINO --> USED BY TIMER
|
// {PB_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 - ARDUINO --> USED BY TIMER
|
||||||
{PB_4, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1 - ARDUINO
|
{PB_4, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1 - ARDUINO
|
||||||
{PB_5, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM17)},// TIM17_CH1
|
{PB_5, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM17, 1, 0)},// TIM17_CH1
|
||||||
{PB_6, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1N - ARDUINO
|
{PB_6, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 1)}, // TIM16_CH1N - ARDUINO
|
||||||
{PB_7, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17)}, // TIM17_CH1N
|
{PB_7, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17, 1, 1)}, // TIM17_CH1N
|
||||||
{PB_8, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PB_8, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
{PB_9, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17)}, // TIM17_CH1
|
{PB_9, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17, 1, 0)}, // TIM17_CH1
|
||||||
// {PB_10, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH3 - ARDUINO --> USED BY TIMER
|
// {PB_10, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 - ARDUINO --> USED BY TIMER
|
||||||
// {PB_11, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH4
|
// {PB_11, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
|
||||||
{PB_13, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1N
|
{PB_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
{PB_14, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15)}, // TIM15_CH1
|
{PB_14, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15, 1, 0)}, // TIM15_CH1
|
||||||
// {PB_14, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
// {PB_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
{PB_15, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15)}, // TIM15_CH2
|
{PB_15, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15, 2, 0)}, // TIM15_CH2
|
||||||
// {PB_15, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM15)}, // TIM15_CH1N
|
// {PB_15, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM15, 1, 1)}, // TIM15_CH1N
|
||||||
// {PB_15, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1)}, // TIM1_CH3N
|
// {PB_15, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
|
|
||||||
{PC_0, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH1
|
{PC_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 1, 0)}, // TIM1_CH1
|
||||||
{PC_1, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH2
|
{PC_1, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 2, 0)}, // TIM1_CH2
|
||||||
{PC_2, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH3
|
{PC_2, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 3, 0)}, // TIM1_CH3
|
||||||
{PC_3, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH4
|
{PC_3, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 4, 0)}, // TIM1_CH4
|
||||||
{PC_13, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1)}, // TIM1_CH1N
|
{PC_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
|
|
||||||
{PF_0, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH3N
|
{PF_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
|
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -36,11 +36,22 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// See stm32f3xx_hal_gpio.h and stm32f3xx_hal_gpio_ex.h for values of MODE, PUPD and AFNUM
|
#define STM_PIN_DATA(MODE, PUPD, AFNUM) ((int)(((MODE & 0x0F) << 0) |\
|
||||||
#define STM_PIN_DATA(MODE, PUPD, AFNUM) ((int)(((AFNUM) << 7) | ((PUPD) << 4) | ((MODE) << 0)))
|
((PUPD & 0x07) << 4) |\
|
||||||
#define STM_PIN_MODE(X) (((X) >> 0) & 0x0F)
|
((AFNUM & 0x0F) << 7)))
|
||||||
#define STM_PIN_PUPD(X) (((X) >> 4) & 0x07)
|
|
||||||
#define STM_PIN_AFNUM(X) (((X) >> 7) & 0x0F)
|
#define STM_PIN_DATA_EXT(MODE, PUPD, AFNUM, CHANNEL, INVERTED) ((int)(((MODE & 0x0F) << 0) |\
|
||||||
|
((PUPD & 0x07) << 4) |\
|
||||||
|
((AFNUM & 0x0F) << 7) |\
|
||||||
|
((CHANNEL & 0x0F) << 11) |\
|
||||||
|
((INVERTED & 0x01) << 15)))
|
||||||
|
|
||||||
|
#define STM_PIN_MODE(X) (((X) >> 0) & 0x0F)
|
||||||
|
#define STM_PIN_PUPD(X) (((X) >> 4) & 0x07)
|
||||||
|
#define STM_PIN_AFNUM(X) (((X) >> 7) & 0x0F)
|
||||||
|
#define STM_PIN_CHANNEL(X) (((X) >> 11) & 0x0F)
|
||||||
|
#define STM_PIN_INVERTED(X) (((X) >> 15) & 0x01)
|
||||||
|
|
||||||
#define STM_MODE_INPUT (0)
|
#define STM_MODE_INPUT (0)
|
||||||
#define STM_MODE_OUTPUT_PP (1)
|
#define STM_MODE_OUTPUT_PP (1)
|
||||||
#define STM_MODE_OUTPUT_OD (2)
|
#define STM_MODE_OUTPUT_OD (2)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,168 +0,0 @@
|
||||||
/* mbed Microcontroller Library
|
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
|
||||||
* may be used to endorse or promote products derived from this software
|
|
||||||
* without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
#include "mbed_assert.h"
|
|
||||||
#include "analogin_api.h"
|
|
||||||
|
|
||||||
#if DEVICE_ANALOGIN
|
|
||||||
|
|
||||||
#include "wait_api.h"
|
|
||||||
#include "cmsis.h"
|
|
||||||
#include "pinmap.h"
|
|
||||||
#include "PeripheralPins.h"
|
|
||||||
|
|
||||||
ADC_HandleTypeDef AdcHandle;
|
|
||||||
|
|
||||||
int adc_inited = 0;
|
|
||||||
|
|
||||||
void analogin_init(analogin_t *obj, PinName pin)
|
|
||||||
{
|
|
||||||
// Get the peripheral name from the pin and assign it to the object
|
|
||||||
obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC);
|
|
||||||
MBED_ASSERT(obj->adc != (ADCName)NC);
|
|
||||||
|
|
||||||
// Configure GPIO
|
|
||||||
pinmap_pinout(pin, PinMap_ADC);
|
|
||||||
|
|
||||||
// Save pin number for the read function
|
|
||||||
obj->pin = pin;
|
|
||||||
|
|
||||||
// The ADC initialization is done once
|
|
||||||
if (adc_inited == 0) {
|
|
||||||
adc_inited = 1;
|
|
||||||
|
|
||||||
// Enable ADC clock
|
|
||||||
__ADC1_CLK_ENABLE();
|
|
||||||
|
|
||||||
// Configure ADC
|
|
||||||
AdcHandle.Instance = (ADC_TypeDef *)(obj->adc);
|
|
||||||
AdcHandle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
|
|
||||||
AdcHandle.Init.Resolution = ADC_RESOLUTION12b;
|
|
||||||
AdcHandle.Init.ScanConvMode = DISABLE;
|
|
||||||
AdcHandle.Init.ContinuousConvMode = DISABLE;
|
|
||||||
AdcHandle.Init.DiscontinuousConvMode = DISABLE;
|
|
||||||
AdcHandle.Init.NbrOfDiscConversion = 0;
|
|
||||||
AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
|
|
||||||
AdcHandle.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
|
|
||||||
AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
|
||||||
AdcHandle.Init.NbrOfConversion = 1;
|
|
||||||
AdcHandle.Init.DMAContinuousRequests = DISABLE;
|
|
||||||
AdcHandle.Init.EOCSelection = DISABLE;
|
|
||||||
HAL_ADC_Init(&AdcHandle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline uint16_t adc_read(analogin_t *obj)
|
|
||||||
{
|
|
||||||
ADC_ChannelConfTypeDef sConfig;
|
|
||||||
|
|
||||||
AdcHandle.Instance = (ADC_TypeDef *)(obj->adc);
|
|
||||||
|
|
||||||
// Configure ADC channel
|
|
||||||
sConfig.Rank = ADC_REGULAR_RANK_1;
|
|
||||||
sConfig.SamplingTime = ADC_SAMPLETIME_19CYCLES_5;
|
|
||||||
sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
|
||||||
sConfig.OffsetNumber = ADC_OFFSET_NONE;
|
|
||||||
sConfig.Offset = 0;
|
|
||||||
|
|
||||||
switch (obj->pin) {
|
|
||||||
case PA_0:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_1;
|
|
||||||
break;
|
|
||||||
case PA_1:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_2;
|
|
||||||
break;
|
|
||||||
case PA_2:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_3;
|
|
||||||
break;
|
|
||||||
case PA_3:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_4;
|
|
||||||
break;
|
|
||||||
case PA_4:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_5;
|
|
||||||
break;
|
|
||||||
case PA_6:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_10;
|
|
||||||
break;
|
|
||||||
case PA_7:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_15;
|
|
||||||
break;
|
|
||||||
case PB_0:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_11;
|
|
||||||
break;
|
|
||||||
case PB_1:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_12;
|
|
||||||
break;
|
|
||||||
case PB_11:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_14;
|
|
||||||
break;
|
|
||||||
case PB_13:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_13;
|
|
||||||
break;
|
|
||||||
case PC_0:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_6;
|
|
||||||
break;
|
|
||||||
case PC_1:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_7;
|
|
||||||
break;
|
|
||||||
case PC_2:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_8;
|
|
||||||
break;
|
|
||||||
case PC_3:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_9;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
|
|
||||||
|
|
||||||
HAL_ADC_Start(&AdcHandle); // Start conversion
|
|
||||||
|
|
||||||
// Wait end of conversion and get value
|
|
||||||
if (HAL_ADC_PollForConversion(&AdcHandle, 10) == HAL_OK) {
|
|
||||||
return (HAL_ADC_GetValue(&AdcHandle));
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t analogin_read_u16(analogin_t *obj)
|
|
||||||
{
|
|
||||||
uint16_t value = adc_read(obj);
|
|
||||||
// 12-bit to 16-bit conversion
|
|
||||||
value = ((value << 4) & (uint16_t)0xFFF0) | ((value >> 8) & (uint16_t)0x000F);
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
float analogin_read(analogin_t *obj)
|
|
||||||
{
|
|
||||||
uint16_t value = adc_read(obj);
|
|
||||||
return (float)value * (1.0f / (float)0xFFF); // 12 bits range
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -57,11 +57,13 @@ struct port_s {
|
||||||
struct analogin_s {
|
struct analogin_s {
|
||||||
ADCName adc;
|
ADCName adc;
|
||||||
PinName pin;
|
PinName pin;
|
||||||
|
uint32_t channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct dac_s {
|
struct dac_s {
|
||||||
DACName dac;
|
DACName dac;
|
||||||
PinName pin;
|
PinName pin;
|
||||||
|
uint32_t channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct serial_s {
|
struct serial_s {
|
||||||
|
@ -99,6 +101,8 @@ struct pwmout_s {
|
||||||
PinName pin;
|
PinName pin;
|
||||||
uint32_t period;
|
uint32_t period;
|
||||||
uint32_t pulse;
|
uint32_t pulse;
|
||||||
|
uint32_t channel;
|
||||||
|
uint32_t inverted;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "gpio_object.h"
|
#include "gpio_object.h"
|
||||||
|
|
|
@ -1,233 +0,0 @@
|
||||||
/* mbed Microcontroller Library
|
|
||||||
*******************************************************************************
|
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
|
||||||
* may be used to endorse or promote products derived from this software
|
|
||||||
* without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*******************************************************************************
|
|
||||||
*/
|
|
||||||
#include "pwmout_api.h"
|
|
||||||
|
|
||||||
#if DEVICE_PWMOUT
|
|
||||||
|
|
||||||
#include "cmsis.h"
|
|
||||||
#include "pinmap.h"
|
|
||||||
#include "mbed_error.h"
|
|
||||||
#include "PeripheralPins.h"
|
|
||||||
|
|
||||||
static TIM_HandleTypeDef TimHandle;
|
|
||||||
|
|
||||||
void pwmout_init(pwmout_t* obj, PinName pin)
|
|
||||||
{
|
|
||||||
// Get the peripheral name from the pin and assign it to the object
|
|
||||||
obj->pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM);
|
|
||||||
|
|
||||||
if (obj->pwm == (PWMName)NC) {
|
|
||||||
error("PWM error: pinout mapping failed.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enable TIM clock
|
|
||||||
if (obj->pwm == PWM_1) __TIM1_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_2) __TIM2_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_15) __TIM15_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_16) __TIM16_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_17) __TIM17_CLK_ENABLE();
|
|
||||||
|
|
||||||
// Configure GPIO
|
|
||||||
pinmap_pinout(pin, PinMap_PWM);
|
|
||||||
|
|
||||||
obj->pin = pin;
|
|
||||||
obj->period = 0;
|
|
||||||
obj->pulse = 0;
|
|
||||||
|
|
||||||
pwmout_period_us(obj, 20000); // 20 ms per default
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_free(pwmout_t* obj)
|
|
||||||
{
|
|
||||||
// Configure GPIO
|
|
||||||
pin_function(obj->pin, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_write(pwmout_t* obj, float value)
|
|
||||||
{
|
|
||||||
TIM_OC_InitTypeDef sConfig;
|
|
||||||
int channel = 0;
|
|
||||||
int complementary_channel = 0;
|
|
||||||
|
|
||||||
TimHandle.Instance = (TIM_TypeDef *)(obj->pwm);
|
|
||||||
|
|
||||||
if (value < (float)0.0) {
|
|
||||||
value = 0.0;
|
|
||||||
} else if (value > (float)1.0) {
|
|
||||||
value = 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
obj->pulse = (uint32_t)((float)obj->period * value);
|
|
||||||
|
|
||||||
// Configure channels
|
|
||||||
sConfig.OCMode = TIM_OCMODE_PWM1;
|
|
||||||
sConfig.Pulse = obj->pulse;
|
|
||||||
sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
|
|
||||||
sConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH;
|
|
||||||
sConfig.OCFastMode = TIM_OCFAST_DISABLE;
|
|
||||||
sConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
|
|
||||||
sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
|
||||||
|
|
||||||
switch (obj->pin) {
|
|
||||||
|
|
||||||
// Channels 1
|
|
||||||
case PA_2:
|
|
||||||
case PA_6:
|
|
||||||
case PA_7:
|
|
||||||
case PA_8:
|
|
||||||
case PA_12:
|
|
||||||
case PB_4:
|
|
||||||
case PB_5:
|
|
||||||
case PB_8:
|
|
||||||
case PB_9:
|
|
||||||
case PB_14:
|
|
||||||
case PC_0:
|
|
||||||
channel = TIM_CHANNEL_1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 1N
|
|
||||||
case PA_1:
|
|
||||||
case PA_13:
|
|
||||||
case PB_6:
|
|
||||||
case PB_7:
|
|
||||||
case PB_13:
|
|
||||||
case PC_13:
|
|
||||||
channel = TIM_CHANNEL_1;
|
|
||||||
complementary_channel = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 2
|
|
||||||
case PA_3:
|
|
||||||
case PA_9:
|
|
||||||
case PB_15:
|
|
||||||
case PC_1:
|
|
||||||
channel = TIM_CHANNEL_2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 2N
|
|
||||||
case PB_0:
|
|
||||||
channel = TIM_CHANNEL_2;
|
|
||||||
complementary_channel = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 3
|
|
||||||
case PA_10:
|
|
||||||
case PC_2:
|
|
||||||
channel = TIM_CHANNEL_3;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 3N
|
|
||||||
case PB_1:
|
|
||||||
case PF_0:
|
|
||||||
channel = TIM_CHANNEL_3;
|
|
||||||
complementary_channel = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 4
|
|
||||||
case PA_11:
|
|
||||||
case PC_3:
|
|
||||||
channel = TIM_CHANNEL_4;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, channel);
|
|
||||||
|
|
||||||
if (complementary_channel) {
|
|
||||||
HAL_TIMEx_PWMN_Start(&TimHandle, channel);
|
|
||||||
} else {
|
|
||||||
HAL_TIM_PWM_Start(&TimHandle, channel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
float pwmout_read(pwmout_t* obj)
|
|
||||||
{
|
|
||||||
float value = 0;
|
|
||||||
if (obj->period > 0) {
|
|
||||||
value = (float)(obj->pulse) / (float)(obj->period);
|
|
||||||
}
|
|
||||||
return ((value > (float)1.0) ? (float)(1.0) : (value));
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_period(pwmout_t* obj, float seconds)
|
|
||||||
{
|
|
||||||
pwmout_period_us(obj, seconds * 1000000.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_period_ms(pwmout_t* obj, int ms)
|
|
||||||
{
|
|
||||||
pwmout_period_us(obj, ms * 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_period_us(pwmout_t* obj, int us)
|
|
||||||
{
|
|
||||||
TimHandle.Instance = (TIM_TypeDef *)(obj->pwm);
|
|
||||||
|
|
||||||
float dc = pwmout_read(obj);
|
|
||||||
|
|
||||||
__HAL_TIM_DISABLE(&TimHandle);
|
|
||||||
|
|
||||||
// Update the SystemCoreClock variable
|
|
||||||
SystemCoreClockUpdate();
|
|
||||||
|
|
||||||
TimHandle.Init.Period = us - 1;
|
|
||||||
TimHandle.Init.Prescaler = (uint16_t)(SystemCoreClock / 1000000) - 1; // 1 µs tick
|
|
||||||
TimHandle.Init.ClockDivision = 0;
|
|
||||||
TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
||||||
HAL_TIM_PWM_Init(&TimHandle);
|
|
||||||
|
|
||||||
// Set duty cycle again
|
|
||||||
pwmout_write(obj, dc);
|
|
||||||
|
|
||||||
// Save for future use
|
|
||||||
obj->period = us;
|
|
||||||
|
|
||||||
__HAL_TIM_ENABLE(&TimHandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_pulsewidth(pwmout_t* obj, float seconds)
|
|
||||||
{
|
|
||||||
pwmout_pulsewidth_us(obj, seconds * 1000000.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_pulsewidth_ms(pwmout_t* obj, int ms)
|
|
||||||
{
|
|
||||||
pwmout_pulsewidth_us(obj, ms * 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_pulsewidth_us(pwmout_t* obj, int us)
|
|
||||||
{
|
|
||||||
float value = (float)us / (float)obj->period;
|
|
||||||
pwmout_write(obj, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -38,7 +38,9 @@ extern "C" {
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ADC_1 = (int)ADC1_BASE,
|
ADC_1 = (int)ADC1_BASE,
|
||||||
ADC_2 = (int)ADC2_BASE
|
ADC_2 = (int)ADC2_BASE,
|
||||||
|
ADC_3 = (int)ADC3_BASE,
|
||||||
|
ADC_4 = (int)ADC4_BASE
|
||||||
} ADCName;
|
} ADCName;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -39,32 +39,32 @@
|
||||||
//*** ADC ***
|
//*** ADC ***
|
||||||
|
|
||||||
const PinMap PinMap_ADC[] = {
|
const PinMap PinMap_ADC[] = {
|
||||||
{PA_0, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN1 - ARDUINO A0
|
{PA_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1 - ARDUINO A0
|
||||||
{PA_1, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN2 - ARDUINO A1
|
{PA_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2 - ARDUINO A1
|
||||||
{PA_2, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN3
|
{PA_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3
|
||||||
{PA_3, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN4
|
{PA_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_IN4
|
||||||
{PA_4, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN1 - ARDUINO A2
|
{PA_4, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC2_IN1 - ARDUINO A2
|
||||||
{PA_5, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN2 - Warning: LED1 is also connected to this pin
|
{PA_5, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC2_IN2 - Warning: LED1 is also connected to this pin
|
||||||
{PA_6, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN3
|
{PA_6, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC2_IN3
|
||||||
{PA_7, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN4
|
{PA_7, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC2_IN4
|
||||||
|
|
||||||
{PB_2, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN12
|
{PB_2, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC2_IN12
|
||||||
{PB_11, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC12_IN14
|
{PB_11, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC12_IN14
|
||||||
|
|
||||||
{PC_0, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC12_IN6 - ARDUINO A5
|
{PC_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC12_IN6 - ARDUINO A5
|
||||||
{PC_1, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC12_IN7 - ARDUINO A4
|
{PC_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC12_IN7 - ARDUINO A4
|
||||||
{PC_2, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC12_IN8
|
{PC_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC12_IN8
|
||||||
{PC_3, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC12_IN9
|
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC12_IN9
|
||||||
{PC_4, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN5
|
{PC_4, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC2_IN5
|
||||||
{PC_5, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN11
|
{PC_5, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC2_IN11
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
//*** DAC ***
|
//*** DAC ***
|
||||||
|
|
||||||
const PinMap PinMap_DAC[] = {
|
const PinMap PinMap_DAC[] = {
|
||||||
{PA_4, DAC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // DAC_OUT1
|
{PA_4, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC_OUT1
|
||||||
{PA_5, DAC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // DAC_OUT2 - Warning: LED1 is connected on this pin
|
{PA_5, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC_OUT2 - Warning: LED1 is connected on this pin
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -95,89 +95,89 @@ const PinMap PinMap_I2C_SCL[] = {
|
||||||
|
|
||||||
// TIM2 cannot be used because already used by the us_ticker
|
// TIM2 cannot be used because already used by the us_ticker
|
||||||
const PinMap PinMap_PWM[] = {
|
const PinMap PinMap_PWM[] = {
|
||||||
// {PA_0, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH1
|
// {PA_0, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
|
||||||
// {PA_1, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH2
|
// {PA_1, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2
|
||||||
{PA_1, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15)}, // TIM15_CH1N
|
{PA_1, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15, 1, 1)}, // TIM15_CH1N
|
||||||
{PA_2, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15)}, // TIM15_CH1
|
{PA_2, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15, 1, 0)}, // TIM15_CH1
|
||||||
{PA_3, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15)}, // TIM15_CH2
|
{PA_3, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15, 2, 0)}, // TIM15_CH2
|
||||||
{PA_4, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2
|
{PA_4, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
// {PA_5, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH1 - Warning: LED1 is connected on this pin
|
// {PA_5, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 - Warning: LED1 is connected on this pin
|
||||||
{PA_6, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PA_6, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
// {PA_6, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH1
|
// {PA_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
|
||||||
{PA_7, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17)}, // TIM17_CH1 - ARDUINO
|
{PA_7, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17, 1, 0)}, // TIM17_CH1 - ARDUINO
|
||||||
// {PA_7, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2
|
// {PA_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
// {PA_7, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH1N
|
// {PA_7, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 1, 1)}, // TIM8_CH1N
|
||||||
// {PA_7, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1N - ARDUINO
|
// {PA_7, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 1)}, // TIM1_CH1N - ARDUINO
|
||||||
{PA_8, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1
|
{PA_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 0)}, // TIM1_CH1
|
||||||
{PA_9, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2
|
{PA_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 0)}, // TIM1_CH2
|
||||||
// {PA_9, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2)}, // TIM2_CH3
|
// {PA_9, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2, 3, 0)}, // TIM2_CH3
|
||||||
{PA_10, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH3
|
{PA_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 3, 0)}, // TIM1_CH3
|
||||||
// {PA_10, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2)}, // TIM2_CH4
|
// {PA_10, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2, 4, 0)}, // TIM2_CH4
|
||||||
{PA_11, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_TIM1)}, // TIM1_CH4
|
{PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_TIM1, 4, 0)}, // TIM1_CH4
|
||||||
// {PA_11, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1N
|
// {PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
// {PA_11, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM4)}, // TIM4_CH1
|
// {PA_11, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM4, 1, 0)}, // TIM4_CH1
|
||||||
{PA_12, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PA_12, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
// {PA_12, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
// {PA_12, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
// {PA_12, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM4)}, // TIM4_CH2
|
// {PA_12, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM4, 2, 0)}, // TIM4_CH2
|
||||||
{PA_13, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1N
|
{PA_13, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 1)}, // TIM16_CH1N
|
||||||
// {PA_13, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM4)}, // TIM4_CH3
|
// {PA_13, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM4, 3, 0)}, // TIM4_CH3
|
||||||
{PA_14, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM8)}, // TIM8_CH2
|
{PA_14, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM8, 2, 0)}, // TIM8_CH2
|
||||||
// {PA_15, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH1
|
// {PA_15, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
|
||||||
{PA_15, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM8)}, // TIM8_CH1
|
{PA_15, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM8, 1, 0)}, // TIM8_CH1
|
||||||
|
|
||||||
// {PB_0, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH3
|
// {PB_0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3
|
||||||
// {PB_0, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH2N
|
// {PB_0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 2, 1)}, // TIM8_CH2N
|
||||||
{PB_0, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
{PB_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
// {PB_1, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH4
|
// {PB_1, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
|
||||||
// {PB_1, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH3N
|
// {PB_1, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 3, 1)}, // TIM8_CH3N
|
||||||
{PB_1, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH3N
|
{PB_1, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
// {PB_3, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH2 - ARDUINO --> USED BY TIMER
|
// {PB_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 - ARDUINO --> USED BY TIMER
|
||||||
{PB_3, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH1N - ARDUINO
|
{PB_3, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 1, 1)}, // TIM8_CH1N - ARDUINO
|
||||||
{PB_4, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1 - ARDUINO
|
{PB_4, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1 - ARDUINO
|
||||||
// {PB_4, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH1
|
// {PB_4, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
|
||||||
// {PB_4, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH2N
|
// {PB_4, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 2, 1)}, // TIM8_CH2N
|
||||||
// {PB_5, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2
|
// {PB_5, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
// {PB_5, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8)}, // TIM8_CH3N
|
// {PB_5, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N
|
||||||
{PB_5, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM17)},// TIM17_CH1
|
{PB_5, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM17, 1, 0)},// TIM17_CH1
|
||||||
{PB_6, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1N - ARDUINO
|
{PB_6, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 1)}, // TIM16_CH1N - ARDUINO
|
||||||
// {PB_6, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH1
|
// {PB_6, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1
|
||||||
// {PB_6, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM8)}, // TIM8_CH1
|
// {PB_6, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM8, 1, 0)}, // TIM8_CH1
|
||||||
{PB_7, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17)}, // TIM17_CH1N
|
{PB_7, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17, 1, 1)}, // TIM17_CH1N
|
||||||
// {PB_7, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH2
|
// {PB_7, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2
|
||||||
// {PB_7, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM3)}, // TIM3_CH4
|
// {PB_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM3, 4, 0)}, // TIM3_CH4
|
||||||
{PB_8, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PB_8, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
// {PB_8, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH3
|
// {PB_8, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3
|
||||||
// {PB_8, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM8)}, // TIM8_CH2
|
// {PB_8, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM8, 2, 0)}, // TIM8_CH2
|
||||||
{PB_9, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17)}, // TIM17_CH1
|
{PB_9, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17, 1, 0)}, // TIM17_CH1
|
||||||
// {PB_9, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH4
|
// {PB_9, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
|
||||||
// {PB_9, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM8)}, // TIM8_CH3
|
// {PB_9, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM8, 3, 0)}, // TIM8_CH3
|
||||||
// {PB_10, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH3 - ARDUINO --> USED BY TIMER
|
// {PB_10, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 - ARDUINO --> USED BY TIMER
|
||||||
// {PB_11, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH4
|
// {PB_11, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
|
||||||
{PB_13, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1N
|
{PB_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
{PB_14, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15)}, // TIM15_CH1
|
{PB_14, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15, 1, 0)}, // TIM15_CH1
|
||||||
// {PB_14, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
// {PB_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
{PB_15, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15)}, // TIM15_CH2
|
{PB_15, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15, 2, 0)}, // TIM15_CH2
|
||||||
// {PB_15, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM15)}, // TIM15_CH1N
|
// {PB_15, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM15, 1, 1)}, // TIM15_CH1N
|
||||||
// {PB_15, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1)}, // TIM1_CH3N
|
// {PB_15, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
|
|
||||||
{PC_0, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH1
|
{PC_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 1, 0)}, // TIM1_CH1
|
||||||
{PC_1, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH2
|
{PC_1, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 2, 0)}, // TIM1_CH2
|
||||||
{PC_2, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH3
|
{PC_2, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 3, 0)}, // TIM1_CH3
|
||||||
{PC_3, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH4
|
{PC_3, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 4, 0)}, // TIM1_CH4
|
||||||
{PC_6, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH1
|
{PC_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
|
||||||
// {PC_6, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH1
|
// {PC_6, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 1, 0)}, // TIM8_CH1
|
||||||
{PC_7, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2
|
{PC_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
// {PC_7, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH2
|
// {PC_7, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 2, 0)}, // TIM8_CH2
|
||||||
{PC_8, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH3
|
{PC_8, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3
|
||||||
// {PC_8, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH3
|
// {PC_8, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 3, 0)}, // TIM8_CH3
|
||||||
{PC_9, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH4
|
{PC_9, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
|
||||||
// {PC_9, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH4
|
// {PC_9, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 4, 0)}, // TIM8_CH4
|
||||||
{PC_10, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH1N
|
{PC_10, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 1, 1)}, // TIM8_CH1N
|
||||||
{PC_11, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH2N
|
{PC_11, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 2, 1)}, // TIM8_CH2N
|
||||||
{PC_12, PWM_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8)}, // TIM8_CH3N
|
{PC_12, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM8, 3, 1)}, // TIM8_CH3N
|
||||||
{PC_13, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1)}, // TIM1_CH1N
|
{PC_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
|
|
||||||
{PF_0, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH3N
|
{PF_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
|
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -36,11 +36,22 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// See stm32f3xx_hal_gpio.h and stm32f3xx_hal_gpio_ex.h for values of MODE, PUPD and AFNUM
|
#define STM_PIN_DATA(MODE, PUPD, AFNUM) ((int)(((MODE & 0x0F) << 0) |\
|
||||||
#define STM_PIN_DATA(MODE, PUPD, AFNUM) ((int)(((AFNUM) << 7) | ((PUPD) << 4) | ((MODE) << 0)))
|
((PUPD & 0x07) << 4) |\
|
||||||
#define STM_PIN_MODE(X) (((X) >> 0) & 0x0F)
|
((AFNUM & 0x0F) << 7)))
|
||||||
#define STM_PIN_PUPD(X) (((X) >> 4) & 0x07)
|
|
||||||
#define STM_PIN_AFNUM(X) (((X) >> 7) & 0x0F)
|
#define STM_PIN_DATA_EXT(MODE, PUPD, AFNUM, CHANNEL, INVERTED) ((int)(((MODE & 0x0F) << 0) |\
|
||||||
|
((PUPD & 0x07) << 4) |\
|
||||||
|
((AFNUM & 0x0F) << 7) |\
|
||||||
|
((CHANNEL & 0x0F) << 11) |\
|
||||||
|
((INVERTED & 0x01) << 15)))
|
||||||
|
|
||||||
|
#define STM_PIN_MODE(X) (((X) >> 0) & 0x0F)
|
||||||
|
#define STM_PIN_PUPD(X) (((X) >> 4) & 0x07)
|
||||||
|
#define STM_PIN_AFNUM(X) (((X) >> 7) & 0x0F)
|
||||||
|
#define STM_PIN_CHANNEL(X) (((X) >> 11) & 0x0F)
|
||||||
|
#define STM_PIN_INVERTED(X) (((X) >> 15) & 0x01)
|
||||||
|
|
||||||
#define STM_MODE_INPUT (0)
|
#define STM_MODE_INPUT (0)
|
||||||
#define STM_MODE_OUTPUT_PP (1)
|
#define STM_MODE_OUTPUT_PP (1)
|
||||||
#define STM_MODE_OUTPUT_OD (2)
|
#define STM_MODE_OUTPUT_OD (2)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -57,11 +57,13 @@ struct port_s {
|
||||||
struct analogin_s {
|
struct analogin_s {
|
||||||
ADCName adc;
|
ADCName adc;
|
||||||
PinName pin;
|
PinName pin;
|
||||||
|
uint32_t channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct dac_s {
|
struct dac_s {
|
||||||
DACName dac;
|
DACName dac;
|
||||||
PinName pin;
|
PinName pin;
|
||||||
|
uint32_t channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct serial_s {
|
struct serial_s {
|
||||||
|
@ -99,6 +101,8 @@ struct pwmout_s {
|
||||||
PinName pin;
|
PinName pin;
|
||||||
uint32_t period;
|
uint32_t period;
|
||||||
uint32_t pulse;
|
uint32_t pulse;
|
||||||
|
uint32_t channel;
|
||||||
|
uint32_t inverted;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "gpio_object.h"
|
#include "gpio_object.h"
|
||||||
|
|
|
@ -1,246 +0,0 @@
|
||||||
/* mbed Microcontroller Library
|
|
||||||
*******************************************************************************
|
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
|
||||||
* may be used to endorse or promote products derived from this software
|
|
||||||
* without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*******************************************************************************
|
|
||||||
*/
|
|
||||||
#include "pwmout_api.h"
|
|
||||||
|
|
||||||
#if DEVICE_PWMOUT
|
|
||||||
|
|
||||||
#include "cmsis.h"
|
|
||||||
#include "pinmap.h"
|
|
||||||
#include "mbed_error.h"
|
|
||||||
#include "PeripheralPins.h"
|
|
||||||
|
|
||||||
static TIM_HandleTypeDef TimHandle;
|
|
||||||
|
|
||||||
void pwmout_init(pwmout_t* obj, PinName pin)
|
|
||||||
{
|
|
||||||
// Get the peripheral name from the pin and assign it to the object
|
|
||||||
obj->pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM);
|
|
||||||
|
|
||||||
if (obj->pwm == (PWMName)NC) {
|
|
||||||
error("PWM error: pinout mapping failed.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enable TIM clock
|
|
||||||
if (obj->pwm == PWM_1) __TIM1_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_2) __TIM2_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_3) __TIM3_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_8) __TIM8_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_15) __TIM15_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_16) __TIM16_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_17) __TIM17_CLK_ENABLE();
|
|
||||||
|
|
||||||
// Configure GPIO
|
|
||||||
pinmap_pinout(pin, PinMap_PWM);
|
|
||||||
|
|
||||||
obj->pin = pin;
|
|
||||||
obj->period = 0;
|
|
||||||
obj->pulse = 0;
|
|
||||||
|
|
||||||
pwmout_period_us(obj, 20000); // 20 ms per default
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_free(pwmout_t* obj)
|
|
||||||
{
|
|
||||||
// Configure GPIO
|
|
||||||
pin_function(obj->pin, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_write(pwmout_t* obj, float value)
|
|
||||||
{
|
|
||||||
TIM_OC_InitTypeDef sConfig;
|
|
||||||
int channel = 0;
|
|
||||||
int complementary_channel = 0;
|
|
||||||
|
|
||||||
TimHandle.Instance = (TIM_TypeDef *)(obj->pwm);
|
|
||||||
|
|
||||||
if (value < (float)0.0) {
|
|
||||||
value = 0.0;
|
|
||||||
} else if (value > (float)1.0) {
|
|
||||||
value = 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
obj->pulse = (uint32_t)((float)obj->period * value);
|
|
||||||
|
|
||||||
// Configure channels
|
|
||||||
sConfig.OCMode = TIM_OCMODE_PWM1;
|
|
||||||
sConfig.Pulse = obj->pulse;
|
|
||||||
sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
|
|
||||||
sConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH;
|
|
||||||
sConfig.OCFastMode = TIM_OCFAST_DISABLE;
|
|
||||||
sConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
|
|
||||||
sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
|
||||||
|
|
||||||
switch (obj->pin) {
|
|
||||||
|
|
||||||
// Channels 1
|
|
||||||
case PA_2:
|
|
||||||
case PA_6:
|
|
||||||
case PA_7:
|
|
||||||
case PA_8:
|
|
||||||
case PA_12:
|
|
||||||
case PA_15:
|
|
||||||
case PB_4:
|
|
||||||
case PB_5:
|
|
||||||
case PB_8:
|
|
||||||
case PB_9:
|
|
||||||
case PB_14:
|
|
||||||
case PC_0:
|
|
||||||
case PC_6:
|
|
||||||
channel = TIM_CHANNEL_1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 1N
|
|
||||||
case PA_1:
|
|
||||||
case PA_13:
|
|
||||||
case PB_3:
|
|
||||||
case PB_6:
|
|
||||||
case PB_7:
|
|
||||||
case PB_13:
|
|
||||||
case PC_10:
|
|
||||||
case PC_13:
|
|
||||||
channel = TIM_CHANNEL_1;
|
|
||||||
complementary_channel = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 2
|
|
||||||
case PA_3:
|
|
||||||
case PA_4:
|
|
||||||
case PA_9:
|
|
||||||
case PA_14:
|
|
||||||
case PB_15:
|
|
||||||
case PC_1:
|
|
||||||
case PC_7:
|
|
||||||
channel = TIM_CHANNEL_2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 2N
|
|
||||||
case PB_0:
|
|
||||||
case PC_11:
|
|
||||||
channel = TIM_CHANNEL_2;
|
|
||||||
complementary_channel = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 3
|
|
||||||
case PA_10:
|
|
||||||
case PC_2:
|
|
||||||
case PC_8:
|
|
||||||
channel = TIM_CHANNEL_3;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 3N
|
|
||||||
case PB_1:
|
|
||||||
case PC_12:
|
|
||||||
case PF_0:
|
|
||||||
channel = TIM_CHANNEL_3;
|
|
||||||
complementary_channel = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 4
|
|
||||||
case PA_11:
|
|
||||||
case PC_3:
|
|
||||||
case PC_9:
|
|
||||||
channel = TIM_CHANNEL_4;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, channel);
|
|
||||||
|
|
||||||
if (complementary_channel) {
|
|
||||||
HAL_TIMEx_PWMN_Start(&TimHandle, channel);
|
|
||||||
} else {
|
|
||||||
HAL_TIM_PWM_Start(&TimHandle, channel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
float pwmout_read(pwmout_t* obj)
|
|
||||||
{
|
|
||||||
float value = 0;
|
|
||||||
if (obj->period > 0) {
|
|
||||||
value = (float)(obj->pulse) / (float)(obj->period);
|
|
||||||
}
|
|
||||||
return ((value > (float)1.0) ? (float)(1.0) : (value));
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_period(pwmout_t* obj, float seconds)
|
|
||||||
{
|
|
||||||
pwmout_period_us(obj, seconds * 1000000.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_period_ms(pwmout_t* obj, int ms)
|
|
||||||
{
|
|
||||||
pwmout_period_us(obj, ms * 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_period_us(pwmout_t* obj, int us)
|
|
||||||
{
|
|
||||||
TimHandle.Instance = (TIM_TypeDef *)(obj->pwm);
|
|
||||||
|
|
||||||
float dc = pwmout_read(obj);
|
|
||||||
|
|
||||||
__HAL_TIM_DISABLE(&TimHandle);
|
|
||||||
|
|
||||||
// Update the SystemCoreClock variable
|
|
||||||
SystemCoreClockUpdate();
|
|
||||||
|
|
||||||
TimHandle.Init.Period = us - 1;
|
|
||||||
TimHandle.Init.Prescaler = (uint16_t)(SystemCoreClock / 1000000) - 1; // 1 µs tick
|
|
||||||
TimHandle.Init.ClockDivision = 0;
|
|
||||||
TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
||||||
HAL_TIM_PWM_Init(&TimHandle);
|
|
||||||
|
|
||||||
// Set duty cycle again
|
|
||||||
pwmout_write(obj, dc);
|
|
||||||
|
|
||||||
// Save for future use
|
|
||||||
obj->period = us;
|
|
||||||
|
|
||||||
__HAL_TIM_ENABLE(&TimHandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_pulsewidth(pwmout_t* obj, float seconds)
|
|
||||||
{
|
|
||||||
pwmout_pulsewidth_us(obj, seconds * 1000000.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_pulsewidth_ms(pwmout_t* obj, int ms)
|
|
||||||
{
|
|
||||||
pwmout_pulsewidth_us(obj, ms * 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_pulsewidth_us(pwmout_t* obj, int us)
|
|
||||||
{
|
|
||||||
float value = (float)us / (float)obj->period;
|
|
||||||
pwmout_write(obj, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -39,38 +39,38 @@
|
||||||
//*** ADC ***
|
//*** ADC ***
|
||||||
|
|
||||||
const PinMap PinMap_ADC[] = {
|
const PinMap PinMap_ADC[] = {
|
||||||
{PA_0, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN1 - ARDUINO A0
|
{PA_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1 - ARDUINO A0
|
||||||
{PA_1, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN2 - ARDUINO A1
|
{PA_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2 - ARDUINO A1
|
||||||
{PA_2, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN3
|
{PA_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3
|
||||||
{PA_3, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN4
|
{PA_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_IN4
|
||||||
{PA_4, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN1 - ARDUINO A2
|
{PA_4, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC2_IN1 - ARDUINO A2
|
||||||
{PA_5, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN2
|
{PA_5, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC2_IN2
|
||||||
{PA_6, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN3
|
{PA_6, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC2_IN3
|
||||||
{PA_7, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN4
|
{PA_7, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC2_IN4
|
||||||
|
|
||||||
{PB_0, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN11 - ARDUINO A3
|
{PB_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11 - ARDUINO A3
|
||||||
{PB_1, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN12
|
{PB_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12
|
||||||
{PB_2, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN12
|
{PB_2, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC2_IN12
|
||||||
{PB_12, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN13
|
{PB_12, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC2_IN13
|
||||||
{PB_13, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN13
|
{PB_13, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_IN13
|
||||||
{PB_14, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN14
|
{PB_14, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC2_IN14
|
||||||
{PB_15, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN15
|
{PB_15, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC2_IN15
|
||||||
|
|
||||||
{PC_0, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN6 - ARDUINO A5
|
{PC_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_IN6 - ARDUINO A5
|
||||||
{PC_1, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN7 - ARDUINO A4
|
{PC_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_IN7 - ARDUINO A4
|
||||||
{PC_2, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN8
|
{PC_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8
|
||||||
{PC_3, ADC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC1_IN9
|
{PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9
|
||||||
{PC_4, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN5
|
{PC_4, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC2_IN5
|
||||||
{PC_5, ADC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // ADC2_IN11
|
{PC_5, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC2_IN11
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
//*** DAC ***
|
//*** DAC ***
|
||||||
|
|
||||||
const PinMap PinMap_DAC[] = {
|
const PinMap PinMap_DAC[] = {
|
||||||
{PA_4, DAC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // DAC1_OUT1
|
{PA_4, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC1_OUT1
|
||||||
{PA_5, DAC_1, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // DAC1_OUT2 (Warning: LED1 is also on this pin)
|
{PA_5, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC1_OUT2 (Warning: LED1 is also on this pin)
|
||||||
{PA_6, DAC_2, STM_PIN_DATA(STM_MODE_ANALOG, GPIO_NOPULL, 0)}, // DAC2_OUT1
|
{PA_6, DAC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC2_OUT1
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -94,66 +94,66 @@ const PinMap PinMap_I2C_SCL[] = {
|
||||||
|
|
||||||
// TIM2 cannot be used because already used by the us_ticker
|
// TIM2 cannot be used because already used by the us_ticker
|
||||||
const PinMap PinMap_PWM[] = {
|
const PinMap PinMap_PWM[] = {
|
||||||
// {PA_0, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH1
|
// {PA_0, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
|
||||||
// {PA_1, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH2
|
// {PA_1, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2
|
||||||
{PA_1, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15)}, // TIM15_CH1N
|
{PA_1, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15, 1, 1)}, // TIM15_CH1N
|
||||||
// {PA_2, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH3
|
// {PA_2, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3
|
||||||
{PA_2, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15)}, // TIM15_CH1
|
{PA_2, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15, 1, 0)}, // TIM15_CH1
|
||||||
// {PA_3, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH4
|
// {PA_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
|
||||||
{PA_3, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15)}, // TIM15_CH2
|
{PA_3, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM15, 2, 0)}, // TIM15_CH2
|
||||||
{PA_4, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2
|
{PA_4, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
// {PA_5, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH1
|
// {PA_5, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
|
||||||
{PA_6, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PA_6, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
// {PA_6, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH1
|
// {PA_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
|
||||||
{PA_7, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17)}, // TIM17_CH1 - ARDUINO
|
{PA_7, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17, 1, 0)}, // TIM17_CH1 - ARDUINO
|
||||||
// {PA_7, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2 - ARDUINO
|
// {PA_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 - ARDUINO
|
||||||
// {PA_7, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1N - ARDUINO
|
// {PA_7, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 1)}, // TIM1_CH1N - ARDUINO
|
||||||
{PA_8, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1
|
{PA_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 0)}, // TIM1_CH1
|
||||||
{PA_9, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2
|
{PA_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 0)}, // TIM1_CH2
|
||||||
// {PA_9, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2)}, // TIM2_CH3
|
// {PA_9, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2, 3, 0)}, // TIM2_CH3
|
||||||
{PA_10, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH3
|
{PA_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 3, 0)}, // TIM1_CH3
|
||||||
// {PA_10, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2)}, // TIM2_CH4
|
// {PA_10, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM2, 4, 0)}, // TIM2_CH4
|
||||||
// {PA_11, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1N
|
// {PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
{PA_11, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_TIM1)}, // TIM1_CH4
|
{PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_TIM1, 4, 0)}, // TIM1_CH4
|
||||||
{PA_12, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PA_12, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
// {PA_12, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
// {PA_12, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
{PA_13, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1N
|
{PA_13, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 1)}, // TIM16_CH1N
|
||||||
// {PA_15, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH1
|
// {PA_15, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
|
||||||
|
|
||||||
{PB_0, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH3
|
{PB_0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3
|
||||||
// {PB_0, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
// {PB_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
{PB_1, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH4
|
{PB_1, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
|
||||||
// {PB_1, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH3N
|
// {PB_1, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
// {PB_3, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH2 - ARDUINO --> USED BY TIMER
|
// {PB_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 - ARDUINO --> USED BY TIMER
|
||||||
{PB_4, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1 - ARDUINO
|
{PB_4, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1 - ARDUINO
|
||||||
// {PB_4, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH1 - ARDUINO
|
// {PB_4, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 - ARDUINO
|
||||||
// {PB_5, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2
|
// {PB_5, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
|
||||||
{PB_5, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM17)}, // TIM17_CH1
|
{PB_5, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM17, 1, 0)}, // TIM17_CH1
|
||||||
{PB_6, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1N - ARDUINO
|
{PB_6, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 1)}, // TIM16_CH1N - ARDUINO
|
||||||
// {PB_7, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17)}, // TIM17_CH1N
|
// {PB_7, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17, 1, 1)}, // TIM17_CH1N
|
||||||
{PB_7, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM3)}, // TIM3_CH4
|
{PB_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_TIM3, 4, 0)}, // TIM3_CH4
|
||||||
{PB_8, PWM_16, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16)}, // TIM16_CH1
|
{PB_8, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1
|
||||||
{PB_9, PWM_17, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17)}, // TIM17_CH1
|
{PB_9, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM17, 1, 0)}, // TIM17_CH1
|
||||||
// {PB_10, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH3 - ARDUINO --> USED BY TIMER
|
// {PB_10, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 - ARDUINO --> USED BY TIMER
|
||||||
// {PB_11, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH4
|
// {PB_11, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
|
||||||
{PB_13, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH1N
|
{PB_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
{PB_14, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15)}, // TIM15_CH1
|
{PB_14, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15, 1, 0)}, // TIM15_CH1
|
||||||
// {PB_14, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH2N
|
// {PB_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 2, 1)}, // TIM1_CH2N
|
||||||
{PB_15, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15)}, // TIM15_CH2
|
{PB_15, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM15, 2, 0)}, // TIM15_CH2
|
||||||
// {PB_15, PWM_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM15)}, // TIM15_CH1N
|
// {PB_15, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM15, 1, 1)}, // TIM15_CH1N
|
||||||
// {PB_15, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1)}, // TIM1_CH3N
|
// {PB_15, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
|
|
||||||
{PC_0, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH1
|
{PC_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 1, 0)}, // TIM1_CH1
|
||||||
{PC_1, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH2
|
{PC_1, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 2, 0)}, // TIM1_CH2
|
||||||
{PC_2, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH3
|
{PC_2, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 3, 0)}, // TIM1_CH3
|
||||||
{PC_3, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1)}, // TIM1_CH4
|
{PC_3, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 4, 0)}, // TIM1_CH4
|
||||||
{PC_6, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH1
|
{PC_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
|
||||||
{PC_7, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2 - ARDUINO
|
{PC_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 - ARDUINO
|
||||||
{PC_8, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH3
|
{PC_8, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3
|
||||||
{PC_9, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH4
|
{PC_9, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
|
||||||
{PC_13, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1)}, // TIM1_CH1N
|
{PC_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM1, 1, 1)}, // TIM1_CH1N
|
||||||
|
|
||||||
{PF_0, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1)}, // TIM1_CH3N
|
{PF_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_TIM1, 3, 1)}, // TIM1_CH3N
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -36,11 +36,22 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// See stm32f3xx_hal_gpio.h and stm32f3xx_hal_gpio_ex.h for values of MODE, PUPD and AFNUM
|
#define STM_PIN_DATA(MODE, PUPD, AFNUM) ((int)(((MODE & 0x0F) << 0) |\
|
||||||
#define STM_PIN_DATA(MODE, PUPD, AFNUM) ((int)(((AFNUM) << 7) | ((PUPD) << 4) | ((MODE) << 0)))
|
((PUPD & 0x07) << 4) |\
|
||||||
#define STM_PIN_MODE(X) (((X) >> 0) & 0x0F)
|
((AFNUM & 0x0F) << 7)))
|
||||||
#define STM_PIN_PUPD(X) (((X) >> 4) & 0x07)
|
|
||||||
#define STM_PIN_AFNUM(X) (((X) >> 7) & 0x0F)
|
#define STM_PIN_DATA_EXT(MODE, PUPD, AFNUM, CHANNEL, INVERTED) ((int)(((MODE & 0x0F) << 0) |\
|
||||||
|
((PUPD & 0x07) << 4) |\
|
||||||
|
((AFNUM & 0x0F) << 7) |\
|
||||||
|
((CHANNEL & 0x0F) << 11) |\
|
||||||
|
((INVERTED & 0x01) << 15)))
|
||||||
|
|
||||||
|
#define STM_PIN_MODE(X) (((X) >> 0) & 0x0F)
|
||||||
|
#define STM_PIN_PUPD(X) (((X) >> 4) & 0x07)
|
||||||
|
#define STM_PIN_AFNUM(X) (((X) >> 7) & 0x0F)
|
||||||
|
#define STM_PIN_CHANNEL(X) (((X) >> 11) & 0x0F)
|
||||||
|
#define STM_PIN_INVERTED(X) (((X) >> 15) & 0x01)
|
||||||
|
|
||||||
#define STM_MODE_INPUT (0)
|
#define STM_MODE_INPUT (0)
|
||||||
#define STM_MODE_OUTPUT_PP (1)
|
#define STM_MODE_OUTPUT_PP (1)
|
||||||
#define STM_MODE_OUTPUT_OD (2)
|
#define STM_MODE_OUTPUT_OD (2)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,188 +0,0 @@
|
||||||
/* mbed Microcontroller Library
|
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
|
||||||
* may be used to endorse or promote products derived from this software
|
|
||||||
* without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
#include "mbed_assert.h"
|
|
||||||
#include "analogin_api.h"
|
|
||||||
|
|
||||||
#if DEVICE_ANALOGIN
|
|
||||||
|
|
||||||
#include "wait_api.h"
|
|
||||||
#include "cmsis.h"
|
|
||||||
#include "pinmap.h"
|
|
||||||
#include "PeripheralPins.h"
|
|
||||||
|
|
||||||
ADC_HandleTypeDef AdcHandle;
|
|
||||||
|
|
||||||
void analogin_init(analogin_t *obj, PinName pin)
|
|
||||||
{
|
|
||||||
static int adc1_inited = 0;
|
|
||||||
static int adc2_inited = 0;
|
|
||||||
|
|
||||||
// Get the peripheral name from the pin and assign it to the object
|
|
||||||
obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC);
|
|
||||||
MBED_ASSERT(obj->adc != (ADCName)NC);
|
|
||||||
|
|
||||||
// Configure GPIO
|
|
||||||
pinmap_pinout(pin, PinMap_ADC);
|
|
||||||
|
|
||||||
// Save pin number for the read function
|
|
||||||
obj->pin = pin;
|
|
||||||
|
|
||||||
// Check if ADC is already initialized
|
|
||||||
if ((obj->adc == ADC_1) && adc1_inited) return;
|
|
||||||
if ((obj->adc == ADC_2) && adc2_inited) return;
|
|
||||||
if (obj->adc == ADC_1) adc1_inited = 1;
|
|
||||||
if (obj->adc == ADC_2) adc2_inited = 1;
|
|
||||||
|
|
||||||
// Enable ADC clock
|
|
||||||
__ADC12_CLK_ENABLE();
|
|
||||||
|
|
||||||
// Configure ADC
|
|
||||||
AdcHandle.Instance = (ADC_TypeDef *)(obj->adc);
|
|
||||||
AdcHandle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
|
|
||||||
AdcHandle.Init.Resolution = ADC_RESOLUTION12b;
|
|
||||||
AdcHandle.Init.ScanConvMode = DISABLE;
|
|
||||||
AdcHandle.Init.ContinuousConvMode = DISABLE;
|
|
||||||
AdcHandle.Init.DiscontinuousConvMode = DISABLE;
|
|
||||||
AdcHandle.Init.NbrOfDiscConversion = 0;
|
|
||||||
AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
|
|
||||||
AdcHandle.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
|
|
||||||
AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
|
||||||
AdcHandle.Init.NbrOfConversion = 1;
|
|
||||||
AdcHandle.Init.DMAContinuousRequests = DISABLE;
|
|
||||||
AdcHandle.Init.EOCSelection = DISABLE;
|
|
||||||
HAL_ADC_Init(&AdcHandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline uint16_t adc_read(analogin_t *obj)
|
|
||||||
{
|
|
||||||
ADC_ChannelConfTypeDef sConfig;
|
|
||||||
|
|
||||||
AdcHandle.Instance = (ADC_TypeDef *)(obj->adc);
|
|
||||||
|
|
||||||
// Configure ADC channel
|
|
||||||
sConfig.Rank = ADC_REGULAR_RANK_1;
|
|
||||||
sConfig.SamplingTime = ADC_SAMPLETIME_19CYCLES_5;
|
|
||||||
sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
|
||||||
sConfig.OffsetNumber = ADC_OFFSET_NONE;
|
|
||||||
sConfig.Offset = 0;
|
|
||||||
|
|
||||||
switch (obj->pin) {
|
|
||||||
case PA_0:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_1;
|
|
||||||
break;
|
|
||||||
case PA_1:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_2;
|
|
||||||
break;
|
|
||||||
case PA_2:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_3;
|
|
||||||
break;
|
|
||||||
case PA_3:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_4;
|
|
||||||
break;
|
|
||||||
case PA_4:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_1;
|
|
||||||
break;
|
|
||||||
case PA_5:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_2;
|
|
||||||
break;
|
|
||||||
case PA_6:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_3;
|
|
||||||
break;
|
|
||||||
case PA_7:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_4;
|
|
||||||
break;
|
|
||||||
case PB_0:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_11;
|
|
||||||
break;
|
|
||||||
case PB_1:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_12;
|
|
||||||
break;
|
|
||||||
case PB_2:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_12;
|
|
||||||
break;
|
|
||||||
case PB_12:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_13;
|
|
||||||
break;
|
|
||||||
case PB_13:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_13;
|
|
||||||
break;
|
|
||||||
case PB_14:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_14;
|
|
||||||
break;
|
|
||||||
case PB_15:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_15;
|
|
||||||
break;
|
|
||||||
case PC_0:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_6;
|
|
||||||
break;
|
|
||||||
case PC_1:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_7;
|
|
||||||
break;
|
|
||||||
case PC_2:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_8;
|
|
||||||
break;
|
|
||||||
case PC_3:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_9;
|
|
||||||
break;
|
|
||||||
case PC_4:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_5;
|
|
||||||
break;
|
|
||||||
case PC_5:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_11;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
|
|
||||||
|
|
||||||
HAL_ADC_Start(&AdcHandle); // Start conversion
|
|
||||||
|
|
||||||
// Wait end of conversion and get value
|
|
||||||
if (HAL_ADC_PollForConversion(&AdcHandle, 10) == HAL_OK) {
|
|
||||||
return (HAL_ADC_GetValue(&AdcHandle));
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t analogin_read_u16(analogin_t *obj)
|
|
||||||
{
|
|
||||||
uint16_t value = adc_read(obj);
|
|
||||||
// 12-bit to 16-bit conversion
|
|
||||||
value = ((value << 4) & (uint16_t)0xFFF0) | ((value >> 8) & (uint16_t)0x000F);
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
float analogin_read(analogin_t *obj)
|
|
||||||
{
|
|
||||||
uint16_t value = adc_read(obj);
|
|
||||||
return (float)value * (1.0f / (float)0xFFF); // 12 bits range
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -57,11 +57,13 @@ struct port_s {
|
||||||
struct analogin_s {
|
struct analogin_s {
|
||||||
ADCName adc;
|
ADCName adc;
|
||||||
PinName pin;
|
PinName pin;
|
||||||
|
uint32_t channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct dac_s {
|
struct dac_s {
|
||||||
DACName dac;
|
DACName dac;
|
||||||
PinName pin;
|
PinName pin;
|
||||||
|
uint32_t channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct serial_s {
|
struct serial_s {
|
||||||
|
@ -99,6 +101,8 @@ struct pwmout_s {
|
||||||
PinName pin;
|
PinName pin;
|
||||||
uint32_t period;
|
uint32_t period;
|
||||||
uint32_t pulse;
|
uint32_t pulse;
|
||||||
|
uint32_t channel;
|
||||||
|
uint32_t inverted;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "gpio_object.h"
|
#include "gpio_object.h"
|
||||||
|
|
|
@ -1,234 +0,0 @@
|
||||||
/* mbed Microcontroller Library
|
|
||||||
*******************************************************************************
|
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
|
||||||
* may be used to endorse or promote products derived from this software
|
|
||||||
* without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*******************************************************************************
|
|
||||||
*/
|
|
||||||
#include "pwmout_api.h"
|
|
||||||
|
|
||||||
#if DEVICE_PWMOUT
|
|
||||||
|
|
||||||
#include "cmsis.h"
|
|
||||||
#include "pinmap.h"
|
|
||||||
#include "mbed_error.h"
|
|
||||||
#include "PeripheralPins.h"
|
|
||||||
|
|
||||||
static TIM_HandleTypeDef TimHandle;
|
|
||||||
|
|
||||||
void pwmout_init(pwmout_t* obj, PinName pin)
|
|
||||||
{
|
|
||||||
// Get the peripheral name from the pin and assign it to the object
|
|
||||||
obj->pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM);
|
|
||||||
|
|
||||||
if (obj->pwm == (PWMName)NC) {
|
|
||||||
error("PWM error: pinout mapping failed.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enable TIM clock
|
|
||||||
if (obj->pwm == PWM_1) __TIM1_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_2) __TIM2_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_3) __TIM3_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_15) __TIM15_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_16) __TIM16_CLK_ENABLE();
|
|
||||||
if (obj->pwm == PWM_17) __TIM17_CLK_ENABLE();
|
|
||||||
|
|
||||||
// Configure GPIO
|
|
||||||
pinmap_pinout(pin, PinMap_PWM);
|
|
||||||
|
|
||||||
obj->pin = pin;
|
|
||||||
obj->period = 0;
|
|
||||||
obj->pulse = 0;
|
|
||||||
|
|
||||||
pwmout_period_us(obj, 20000); // 20 ms per default
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_free(pwmout_t* obj)
|
|
||||||
{
|
|
||||||
// Configure GPIO
|
|
||||||
pin_function(obj->pin, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_write(pwmout_t* obj, float value)
|
|
||||||
{
|
|
||||||
TIM_OC_InitTypeDef sConfig;
|
|
||||||
int channel = 0;
|
|
||||||
int complementary_channel = 0;
|
|
||||||
|
|
||||||
TimHandle.Instance = (TIM_TypeDef *)(obj->pwm);
|
|
||||||
|
|
||||||
if (value < (float)0.0) {
|
|
||||||
value = 0.0;
|
|
||||||
} else if (value > (float)1.0) {
|
|
||||||
value = 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
obj->pulse = (uint32_t)((float)obj->period * value);
|
|
||||||
|
|
||||||
// Configure channels
|
|
||||||
sConfig.OCMode = TIM_OCMODE_PWM1;
|
|
||||||
sConfig.Pulse = obj->pulse;
|
|
||||||
sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
|
|
||||||
sConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH;
|
|
||||||
sConfig.OCFastMode = TIM_OCFAST_DISABLE;
|
|
||||||
sConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
|
|
||||||
sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
|
||||||
|
|
||||||
switch (obj->pin) {
|
|
||||||
|
|
||||||
// Channels 1
|
|
||||||
case PA_2:
|
|
||||||
case PA_6:
|
|
||||||
case PA_7:
|
|
||||||
case PA_8:
|
|
||||||
case PA_12:
|
|
||||||
case PB_4:
|
|
||||||
case PB_5:
|
|
||||||
case PB_8:
|
|
||||||
case PB_9:
|
|
||||||
case PB_14:
|
|
||||||
case PC_0:
|
|
||||||
case PC_6:
|
|
||||||
channel = TIM_CHANNEL_1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 1N
|
|
||||||
case PA_1:
|
|
||||||
case PA_13:
|
|
||||||
case PB_6:
|
|
||||||
case PB_13:
|
|
||||||
case PC_13:
|
|
||||||
channel = TIM_CHANNEL_1;
|
|
||||||
complementary_channel = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 2
|
|
||||||
case PA_3:
|
|
||||||
case PA_4:
|
|
||||||
case PA_9:
|
|
||||||
case PB_15:
|
|
||||||
case PC_1:
|
|
||||||
case PC_7:
|
|
||||||
channel = TIM_CHANNEL_2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 3
|
|
||||||
case PA_10:
|
|
||||||
case PB_0:
|
|
||||||
case PC_2:
|
|
||||||
case PC_8:
|
|
||||||
channel = TIM_CHANNEL_3;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 3N
|
|
||||||
case PF_0:
|
|
||||||
channel = TIM_CHANNEL_3;
|
|
||||||
complementary_channel = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 4
|
|
||||||
case PA_11:
|
|
||||||
case PB_1:
|
|
||||||
case PB_7:
|
|
||||||
case PC_3:
|
|
||||||
case PC_9:
|
|
||||||
channel = TIM_CHANNEL_4;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, channel);
|
|
||||||
|
|
||||||
if (complementary_channel) {
|
|
||||||
HAL_TIMEx_PWMN_Start(&TimHandle, channel);
|
|
||||||
} else {
|
|
||||||
HAL_TIM_PWM_Start(&TimHandle, channel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
float pwmout_read(pwmout_t* obj)
|
|
||||||
{
|
|
||||||
float value = 0;
|
|
||||||
if (obj->period > 0) {
|
|
||||||
value = (float)(obj->pulse) / (float)(obj->period);
|
|
||||||
}
|
|
||||||
return ((value > (float)1.0) ? (float)(1.0) : (value));
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_period(pwmout_t* obj, float seconds)
|
|
||||||
{
|
|
||||||
pwmout_period_us(obj, seconds * 1000000.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_period_ms(pwmout_t* obj, int ms)
|
|
||||||
{
|
|
||||||
pwmout_period_us(obj, ms * 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_period_us(pwmout_t* obj, int us)
|
|
||||||
{
|
|
||||||
TimHandle.Instance = (TIM_TypeDef *)(obj->pwm);
|
|
||||||
|
|
||||||
float dc = pwmout_read(obj);
|
|
||||||
|
|
||||||
__HAL_TIM_DISABLE(&TimHandle);
|
|
||||||
|
|
||||||
// Update the SystemCoreClock variable
|
|
||||||
SystemCoreClockUpdate();
|
|
||||||
|
|
||||||
TimHandle.Init.Period = us - 1;
|
|
||||||
TimHandle.Init.Prescaler = (uint16_t)(SystemCoreClock / 1000000) - 1; // 1 µs tick
|
|
||||||
TimHandle.Init.ClockDivision = 0;
|
|
||||||
TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
||||||
HAL_TIM_PWM_Init(&TimHandle);
|
|
||||||
|
|
||||||
// Set duty cycle again
|
|
||||||
pwmout_write(obj, dc);
|
|
||||||
|
|
||||||
// Save for future use
|
|
||||||
obj->period = us;
|
|
||||||
|
|
||||||
__HAL_TIM_ENABLE(&TimHandle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_pulsewidth(pwmout_t* obj, float seconds)
|
|
||||||
{
|
|
||||||
pwmout_pulsewidth_us(obj, seconds * 1000000.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_pulsewidth_ms(pwmout_t* obj, int ms)
|
|
||||||
{
|
|
||||||
pwmout_pulsewidth_us(obj, ms * 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pwmout_pulsewidth_us(pwmout_t* obj, int us)
|
|
||||||
{
|
|
||||||
float value = (float)us / (float)obj->period;
|
|
||||||
pwmout_write(obj, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -33,19 +33,35 @@
|
||||||
#include "wait_api.h"
|
#include "wait_api.h"
|
||||||
#include "cmsis.h"
|
#include "cmsis.h"
|
||||||
#include "pinmap.h"
|
#include "pinmap.h"
|
||||||
|
#include "mbed_error.h"
|
||||||
#include "PeripheralPins.h"
|
#include "PeripheralPins.h"
|
||||||
|
|
||||||
ADC_HandleTypeDef AdcHandle;
|
ADC_HandleTypeDef AdcHandle;
|
||||||
|
|
||||||
void analogin_init(analogin_t *obj, PinName pin)
|
void analogin_init(analogin_t *obj, PinName pin)
|
||||||
{
|
{
|
||||||
|
#if defined(ADC1)
|
||||||
static int adc1_inited = 0;
|
static int adc1_inited = 0;
|
||||||
|
#endif
|
||||||
|
#if defined(ADC2)
|
||||||
static int adc2_inited = 0;
|
static int adc2_inited = 0;
|
||||||
|
#endif
|
||||||
|
#if defined(ADC3)
|
||||||
|
static int adc3_inited = 0;
|
||||||
|
#endif
|
||||||
|
#if defined(ADC4)
|
||||||
|
static int adc4_inited = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Get the peripheral name from the pin and assign it to the object
|
// Get the peripheral name from the pin and assign it to the object
|
||||||
obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC);
|
obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC);
|
||||||
MBED_ASSERT(obj->adc != (ADCName)NC);
|
MBED_ASSERT(obj->adc != (ADCName)NC);
|
||||||
|
|
||||||
|
// Get the pin function and assign the used channel to the object
|
||||||
|
uint32_t function = pinmap_function(pin, PinMap_ADC);
|
||||||
|
MBED_ASSERT(function != (uint32_t)NC);
|
||||||
|
obj->channel = STM_PIN_CHANNEL(function);
|
||||||
|
|
||||||
// Configure GPIO
|
// Configure GPIO
|
||||||
pinmap_pinout(pin, PinMap_ADC);
|
pinmap_pinout(pin, PinMap_ADC);
|
||||||
|
|
||||||
|
@ -53,18 +69,35 @@ void analogin_init(analogin_t *obj, PinName pin)
|
||||||
obj->pin = pin;
|
obj->pin = pin;
|
||||||
|
|
||||||
// Check if ADC is already initialized
|
// Check if ADC is already initialized
|
||||||
|
// Enable ADC clock
|
||||||
|
#if defined(ADC1)
|
||||||
if ((obj->adc == ADC_1) && adc1_inited) return;
|
if ((obj->adc == ADC_1) && adc1_inited) return;
|
||||||
if ((obj->adc == ADC_2) && adc2_inited) return;
|
|
||||||
|
|
||||||
if (obj->adc == ADC_1) {
|
if (obj->adc == ADC_1) {
|
||||||
__ADC12_CLK_ENABLE();
|
__ADC1_CLK_ENABLE();
|
||||||
adc1_inited = 1;
|
adc1_inited = 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(ADC2)
|
||||||
|
if ((obj->adc == ADC_2) && adc2_inited) return;
|
||||||
if (obj->adc == ADC_2) {
|
if (obj->adc == ADC_2) {
|
||||||
__ADC12_CLK_ENABLE();
|
__ADC2_CLK_ENABLE();
|
||||||
adc2_inited = 1;
|
adc2_inited = 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(ADC3)
|
||||||
|
if ((obj->adc == ADC_3) && adc3_inited) return;
|
||||||
|
if (obj->adc == ADC_3) {
|
||||||
|
__ADC34_CLK_ENABLE();
|
||||||
|
adc3_inited = 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(ADC4)
|
||||||
|
if ((obj->adc == ADC_4) && adc4_inited) return;
|
||||||
|
if (obj->adc == ADC_4) {
|
||||||
|
__ADC34_CLK_ENABLE();
|
||||||
|
adc4_inited = 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Configure ADC
|
// Configure ADC
|
||||||
AdcHandle.Instance = (ADC_TypeDef *)(obj->adc);
|
AdcHandle.Instance = (ADC_TypeDef *)(obj->adc);
|
||||||
|
@ -82,12 +115,15 @@ void analogin_init(analogin_t *obj, PinName pin)
|
||||||
AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
|
AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
|
||||||
AdcHandle.Init.DMAContinuousRequests = DISABLE;
|
AdcHandle.Init.DMAContinuousRequests = DISABLE;
|
||||||
AdcHandle.Init.Overrun = OVR_DATA_OVERWRITTEN;
|
AdcHandle.Init.Overrun = OVR_DATA_OVERWRITTEN;
|
||||||
HAL_ADC_Init(&AdcHandle);
|
|
||||||
|
if (HAL_ADC_Init(&AdcHandle) != HAL_OK) {
|
||||||
|
error("Cannot initialize ADC");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint16_t adc_read(analogin_t *obj)
|
static inline uint16_t adc_read(analogin_t *obj)
|
||||||
{
|
{
|
||||||
ADC_ChannelConfTypeDef sConfig;
|
ADC_ChannelConfTypeDef sConfig = {0};
|
||||||
|
|
||||||
AdcHandle.Instance = (ADC_TypeDef *)(obj->adc);
|
AdcHandle.Instance = (ADC_TypeDef *)(obj->adc);
|
||||||
|
|
||||||
|
@ -98,47 +134,61 @@ static inline uint16_t adc_read(analogin_t *obj)
|
||||||
sConfig.OffsetNumber = ADC_OFFSET_NONE;
|
sConfig.OffsetNumber = ADC_OFFSET_NONE;
|
||||||
sConfig.Offset = 0;
|
sConfig.Offset = 0;
|
||||||
|
|
||||||
switch (obj->pin) {
|
switch (obj->channel) {
|
||||||
case PA_0:
|
case 1:
|
||||||
case PA_4:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_1;
|
sConfig.Channel = ADC_CHANNEL_1;
|
||||||
break;
|
break;
|
||||||
case PA_1:
|
case 2:
|
||||||
case PA_5:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_2;
|
sConfig.Channel = ADC_CHANNEL_2;
|
||||||
break;
|
break;
|
||||||
case PA_2:
|
case 3:
|
||||||
case PA_6:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_3;
|
sConfig.Channel = ADC_CHANNEL_3;
|
||||||
break;
|
break;
|
||||||
case PA_3:
|
case 4:
|
||||||
case PA_7:
|
|
||||||
sConfig.Channel = ADC_CHANNEL_4;
|
sConfig.Channel = ADC_CHANNEL_4;
|
||||||
break;
|
break;
|
||||||
case PC_4:
|
case 5:
|
||||||
sConfig.Channel = ADC_CHANNEL_5;
|
sConfig.Channel = ADC_CHANNEL_5;
|
||||||
break;
|
break;
|
||||||
case PC_0:
|
case 6:
|
||||||
sConfig.Channel = ADC_CHANNEL_6;
|
sConfig.Channel = ADC_CHANNEL_6;
|
||||||
break;
|
break;
|
||||||
case PC_1:
|
case 7:
|
||||||
sConfig.Channel = ADC_CHANNEL_7;
|
sConfig.Channel = ADC_CHANNEL_7;
|
||||||
break;
|
break;
|
||||||
case PC_2:
|
case 8:
|
||||||
sConfig.Channel = ADC_CHANNEL_8;
|
sConfig.Channel = ADC_CHANNEL_8;
|
||||||
break;
|
break;
|
||||||
case PC_3:
|
case 9:
|
||||||
sConfig.Channel = ADC_CHANNEL_9;
|
sConfig.Channel = ADC_CHANNEL_9;
|
||||||
break;
|
break;
|
||||||
case PC_5:
|
case 10:
|
||||||
|
sConfig.Channel = ADC_CHANNEL_10;
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
sConfig.Channel = ADC_CHANNEL_11;
|
sConfig.Channel = ADC_CHANNEL_11;
|
||||||
break;
|
break;
|
||||||
case PB_2:
|
case 12:
|
||||||
sConfig.Channel = ADC_CHANNEL_12;
|
sConfig.Channel = ADC_CHANNEL_12;
|
||||||
break;
|
break;
|
||||||
case PB_11:
|
case 13:
|
||||||
|
sConfig.Channel = ADC_CHANNEL_13;
|
||||||
|
break;
|
||||||
|
case 14:
|
||||||
sConfig.Channel = ADC_CHANNEL_14;
|
sConfig.Channel = ADC_CHANNEL_14;
|
||||||
break;
|
break;
|
||||||
|
case 15:
|
||||||
|
sConfig.Channel = ADC_CHANNEL_15;
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
sConfig.Channel = ADC_CHANNEL_16;
|
||||||
|
break;
|
||||||
|
case 17:
|
||||||
|
sConfig.Channel = ADC_CHANNEL_17;
|
||||||
|
break;
|
||||||
|
case 18:
|
||||||
|
sConfig.Channel = ADC_CHANNEL_18;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -51,6 +51,11 @@ void analogout_init(dac_t *obj, PinName pin)
|
||||||
obj->dac = (DACName)pinmap_peripheral(pin, PinMap_DAC);
|
obj->dac = (DACName)pinmap_peripheral(pin, PinMap_DAC);
|
||||||
MBED_ASSERT(obj->dac != (DACName)NC);
|
MBED_ASSERT(obj->dac != (DACName)NC);
|
||||||
|
|
||||||
|
// Get the pin function and assign the used channel to the object
|
||||||
|
uint32_t function = pinmap_function(pin, PinMap_DAC);
|
||||||
|
MBED_ASSERT(function != (uint32_t)NC);
|
||||||
|
obj->channel = STM_PIN_CHANNEL(function);
|
||||||
|
|
||||||
// Configure GPIO
|
// Configure GPIO
|
||||||
pinmap_pinout(pin, PinMap_DAC);
|
pinmap_pinout(pin, PinMap_DAC);
|
||||||
|
|
||||||
|
@ -61,7 +66,7 @@ void analogout_init(dac_t *obj, PinName pin)
|
||||||
if (obj->dac == DAC_1) {
|
if (obj->dac == DAC_1) {
|
||||||
__DAC1_CLK_ENABLE();
|
__DAC1_CLK_ENABLE();
|
||||||
}
|
}
|
||||||
#if defined(__DAC2_FORCE_RESET)
|
#if defined(DAC2)
|
||||||
if (obj->dac == DAC_2) {
|
if (obj->dac == DAC_2) {
|
||||||
__DAC2_CLK_ENABLE();
|
__DAC2_CLK_ENABLE();
|
||||||
}
|
}
|
||||||
|
@ -104,7 +109,7 @@ void analogout_free(dac_t *obj)
|
||||||
__DAC1_CLK_DISABLE();
|
__DAC1_CLK_DISABLE();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__DAC2_FORCE_RESET)
|
#if defined(DAC2)
|
||||||
if (obj->pin == PA_6) {
|
if (obj->pin == PA_6) {
|
||||||
__DAC2_FORCE_RESET();
|
__DAC2_FORCE_RESET();
|
||||||
__DAC2_RELEASE_RESET();
|
__DAC2_RELEASE_RESET();
|
||||||
|
@ -118,13 +123,12 @@ void analogout_free(dac_t *obj)
|
||||||
|
|
||||||
static inline void dac_write(dac_t *obj, uint16_t value)
|
static inline void dac_write(dac_t *obj, uint16_t value)
|
||||||
{
|
{
|
||||||
if ((obj->pin == PA_4) || (obj->pin == PA_6)) {
|
if (obj->channel == 1) {
|
||||||
HAL_DAC_SetValue(&DacHandle, DAC_CHANNEL_1, DAC_ALIGN_12B_R, value);
|
HAL_DAC_SetValue(&DacHandle, DAC_CHANNEL_1, DAC_ALIGN_12B_R, value);
|
||||||
HAL_DAC_Start(&DacHandle, DAC_CHANNEL_1);
|
HAL_DAC_Start(&DacHandle, DAC_CHANNEL_1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(DAC_CHANNEL_2)
|
#if defined(DAC_CHANNEL_2)
|
||||||
if (obj->pin == PA_5) {
|
if (obj->channel == 2) {
|
||||||
HAL_DAC_SetValue(&DacHandle, DAC_CHANNEL_2, DAC_ALIGN_12B_R, value);
|
HAL_DAC_SetValue(&DacHandle, DAC_CHANNEL_2, DAC_ALIGN_12B_R, value);
|
||||||
HAL_DAC_Start(&DacHandle, DAC_CHANNEL_2);
|
HAL_DAC_Start(&DacHandle, DAC_CHANNEL_2);
|
||||||
}
|
}
|
||||||
|
@ -133,15 +137,15 @@ static inline void dac_write(dac_t *obj, uint16_t value)
|
||||||
|
|
||||||
static inline int dac_read(dac_t *obj)
|
static inline int dac_read(dac_t *obj)
|
||||||
{
|
{
|
||||||
if ((obj->pin == PA_4) || (obj->pin == PA_6)) {
|
if (obj->channel == 1) {
|
||||||
return (int)HAL_DAC_GetValue(&DacHandle, DAC_CHANNEL_1);
|
return (int)HAL_DAC_GetValue(&DacHandle, DAC_CHANNEL_1);
|
||||||
#if defined(DAC_CHANNEL_2)
|
|
||||||
} else if (obj->pin == PA_5) {
|
|
||||||
return (int)HAL_DAC_GetValue(&DacHandle, DAC_CHANNEL_2);
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
#if defined(DAC_CHANNEL_2)
|
||||||
|
if (obj->channel == 2) {
|
||||||
|
return (int)HAL_DAC_GetValue(&DacHandle, DAC_CHANNEL_2);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void analogout_write(dac_t *obj, float value)
|
void analogout_write(dac_t *obj, float value)
|
||||||
|
|
|
@ -64,7 +64,8 @@ static inline int gpio_read(gpio_t *obj)
|
||||||
return ((*obj->reg_in & obj->mask) ? 1 : 0);
|
return ((*obj->reg_in & obj->mask) ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int gpio_is_connected(const gpio_t *obj) {
|
static inline int gpio_is_connected(const gpio_t *obj)
|
||||||
|
{
|
||||||
return obj->pin != (PinName)NC;
|
return obj->pin != (PinName)NC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* mbed Microcontroller Library
|
/* mbed Microcontroller Library
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* Copyright (c) 2014, STMicroelectronics
|
* Copyright (c) 2015, STMicroelectronics
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -42,15 +42,23 @@ void pwmout_init(pwmout_t* obj, PinName pin)
|
||||||
{
|
{
|
||||||
// Get the peripheral name from the pin and assign it to the object
|
// Get the peripheral name from the pin and assign it to the object
|
||||||
obj->pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM);
|
obj->pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM);
|
||||||
|
MBED_ASSERT(obj->pwm != (PWMName)NC);
|
||||||
|
|
||||||
if (obj->pwm == (PWMName)NC) {
|
// Get the pin function and assign the used channel to the object
|
||||||
error("PWM error: pinout mapping failed.");
|
uint32_t function = pinmap_function(pin, PinMap_PWM);
|
||||||
}
|
MBED_ASSERT(function != (uint32_t)NC);
|
||||||
|
obj->channel = STM_PIN_CHANNEL(function);
|
||||||
|
obj->inverted = STM_PIN_INVERTED(function);
|
||||||
|
|
||||||
// Enable TIM clock
|
// Enable TIM clock
|
||||||
if (obj->pwm == PWM_1) __TIM1_CLK_ENABLE();
|
if (obj->pwm == PWM_1) __TIM1_CLK_ENABLE();
|
||||||
if (obj->pwm == PWM_2) __TIM2_CLK_ENABLE();
|
if (obj->pwm == PWM_2) __TIM2_CLK_ENABLE();
|
||||||
|
#if defined(TIM3)
|
||||||
if (obj->pwm == PWM_3) __TIM3_CLK_ENABLE();
|
if (obj->pwm == PWM_3) __TIM3_CLK_ENABLE();
|
||||||
|
#endif
|
||||||
|
#if defined(TIM8)
|
||||||
|
if (obj->pwm == PWM_8) __TIM8_CLK_ENABLE();
|
||||||
|
#endif
|
||||||
if (obj->pwm == PWM_15) __TIM15_CLK_ENABLE();
|
if (obj->pwm == PWM_15) __TIM15_CLK_ENABLE();
|
||||||
if (obj->pwm == PWM_16) __TIM16_CLK_ENABLE();
|
if (obj->pwm == PWM_16) __TIM16_CLK_ENABLE();
|
||||||
if (obj->pwm == PWM_17) __TIM17_CLK_ENABLE();
|
if (obj->pwm == PWM_17) __TIM17_CLK_ENABLE();
|
||||||
|
@ -75,7 +83,6 @@ void pwmout_write(pwmout_t* obj, float value)
|
||||||
{
|
{
|
||||||
TIM_OC_InitTypeDef sConfig;
|
TIM_OC_InitTypeDef sConfig;
|
||||||
int channel = 0;
|
int channel = 0;
|
||||||
int complementary_channel = 0;
|
|
||||||
|
|
||||||
TimHandle.Instance = (TIM_TypeDef *)(obj->pwm);
|
TimHandle.Instance = (TIM_TypeDef *)(obj->pwm);
|
||||||
|
|
||||||
|
@ -96,74 +103,28 @@ void pwmout_write(pwmout_t* obj, float value)
|
||||||
sConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
|
sConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
|
||||||
sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
||||||
|
|
||||||
switch (obj->pin) {
|
switch (obj->channel) {
|
||||||
|
case 1:
|
||||||
// Channels 1
|
|
||||||
case PA_2:
|
|
||||||
case PA_6:
|
|
||||||
case PA_7:
|
|
||||||
case PA_8:
|
|
||||||
case PA_12:
|
|
||||||
case PB_4:
|
|
||||||
case PB_5:
|
|
||||||
case PB_8:
|
|
||||||
case PB_9:
|
|
||||||
case PB_14:
|
|
||||||
case PC_0:
|
|
||||||
case PC_6:
|
|
||||||
channel = TIM_CHANNEL_1;
|
channel = TIM_CHANNEL_1;
|
||||||
break;
|
break;
|
||||||
|
case 2:
|
||||||
// Channels 1N
|
|
||||||
case PA_1:
|
|
||||||
case PA_13:
|
|
||||||
case PB_6:
|
|
||||||
case PB_13:
|
|
||||||
case PC_13:
|
|
||||||
channel = TIM_CHANNEL_1;
|
|
||||||
complementary_channel = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 2
|
|
||||||
case PA_3:
|
|
||||||
case PA_4:
|
|
||||||
case PA_9:
|
|
||||||
case PB_15:
|
|
||||||
case PC_1:
|
|
||||||
case PC_7:
|
|
||||||
channel = TIM_CHANNEL_2;
|
channel = TIM_CHANNEL_2;
|
||||||
break;
|
break;
|
||||||
|
case 3:
|
||||||
// Channels 3
|
|
||||||
case PA_10:
|
|
||||||
case PB_0:
|
|
||||||
case PC_2:
|
|
||||||
case PC_8:
|
|
||||||
channel = TIM_CHANNEL_3;
|
channel = TIM_CHANNEL_3;
|
||||||
break;
|
break;
|
||||||
|
case 4:
|
||||||
// Channels 3N
|
|
||||||
case PF_0:
|
|
||||||
channel = TIM_CHANNEL_3;
|
|
||||||
complementary_channel = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Channels 4
|
|
||||||
case PA_11:
|
|
||||||
case PB_1:
|
|
||||||
case PB_7:
|
|
||||||
case PC_3:
|
|
||||||
case PC_9:
|
|
||||||
channel = TIM_CHANNEL_4;
|
channel = TIM_CHANNEL_4;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, channel);
|
if (HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, channel) != HAL_OK) {
|
||||||
|
error("Cannot initialize PWM");
|
||||||
|
}
|
||||||
|
|
||||||
if (complementary_channel) {
|
if (obj->inverted) {
|
||||||
HAL_TIMEx_PWMN_Start(&TimHandle, channel);
|
HAL_TIMEx_PWMN_Start(&TimHandle, channel);
|
||||||
} else {
|
} else {
|
||||||
HAL_TIM_PWM_Start(&TimHandle, channel);
|
HAL_TIM_PWM_Start(&TimHandle, channel);
|
||||||
|
@ -201,10 +162,13 @@ void pwmout_period_us(pwmout_t* obj, int us)
|
||||||
SystemCoreClockUpdate();
|
SystemCoreClockUpdate();
|
||||||
|
|
||||||
TimHandle.Init.Period = us - 1;
|
TimHandle.Init.Period = us - 1;
|
||||||
TimHandle.Init.Prescaler = (uint16_t)(SystemCoreClock / 1000000) - 1; // 1 µs tick
|
TimHandle.Init.Prescaler = (uint16_t)(SystemCoreClock / 1000000) - 1; // 1 us tick
|
||||||
TimHandle.Init.ClockDivision = 0;
|
TimHandle.Init.ClockDivision = 0;
|
||||||
TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
HAL_TIM_PWM_Init(&TimHandle);
|
|
||||||
|
if (HAL_TIM_PWM_Init(&TimHandle) != HAL_OK) {
|
||||||
|
error("Cannot initialize PWM");
|
||||||
|
}
|
||||||
|
|
||||||
// Set duty cycle again
|
// Set duty cycle again
|
||||||
pwmout_write(obj, dc);
|
pwmout_write(obj, dc);
|
|
@ -222,7 +222,7 @@ void spi_frequency(spi_t *obj, int hz)
|
||||||
obj->br_presc = SPI_BAUDRATEPRESCALER_2; // 32 MHz - 36 MHz
|
obj->br_presc = SPI_BAUDRATEPRESCALER_2; // 32 MHz - 36 MHz
|
||||||
}
|
}
|
||||||
#elif defined(TARGET_STM32F302R8)
|
#elif defined(TARGET_STM32F302R8)
|
||||||
if (hz < 250000) {
|
if (hz < 250000) {
|
||||||
obj->br_presc = SPI_BAUDRATEPRESCALER_256; // 125 kHz - 141 kHz
|
obj->br_presc = SPI_BAUDRATEPRESCALER_256; // 125 kHz - 141 kHz
|
||||||
} else if ((hz >= 250000) && (hz < 500000)) {
|
} else if ((hz >= 250000) && (hz < 500000)) {
|
||||||
obj->br_presc = SPI_BAUDRATEPRESCALER_128; // 250 kHz - 280 kHz
|
obj->br_presc = SPI_BAUDRATEPRESCALER_128; // 250 kHz - 280 kHz
|
||||||
|
|
Loading…
Reference in New Issue