mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Tue Jul 29 19:00:07 2014 +0100
Revision:
268:402bcc0c870b
Parent:
251:de9a1e4ffd79
Child:
285:31249416b6f9
Synchronized with git revision 490d1a6606b3138f165c5edf2f2370ca616587c0

Full URL: https://github.com/mbedmicro/mbed/commit/490d1a6606b3138f165c5edf2f2370ca616587c0/

[LPC1114] Sleep fix + some device.h settings

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 235:685d5f11838f 1 /* mbed Microcontroller Library
mbed_official 235:685d5f11838f 2 *******************************************************************************
mbed_official 235:685d5f11838f 3 * Copyright (c) 2014, STMicroelectronics
mbed_official 235:685d5f11838f 4 * All rights reserved.
mbed_official 235:685d5f11838f 5 *
mbed_official 235:685d5f11838f 6 * Redistribution and use in source and binary forms, with or without
mbed_official 235:685d5f11838f 7 * modification, are permitted provided that the following conditions are met:
mbed_official 235:685d5f11838f 8 *
mbed_official 235:685d5f11838f 9 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 235:685d5f11838f 10 * this list of conditions and the following disclaimer.
mbed_official 235:685d5f11838f 11 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 235:685d5f11838f 12 * this list of conditions and the following disclaimer in the documentation
mbed_official 235:685d5f11838f 13 * and/or other materials provided with the distribution.
mbed_official 235:685d5f11838f 14 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 235:685d5f11838f 15 * may be used to endorse or promote products derived from this software
mbed_official 235:685d5f11838f 16 * without specific prior written permission.
mbed_official 235:685d5f11838f 17 *
mbed_official 235:685d5f11838f 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 235:685d5f11838f 19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 235:685d5f11838f 20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 235:685d5f11838f 21 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 235:685d5f11838f 22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 235:685d5f11838f 23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 235:685d5f11838f 24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 235:685d5f11838f 25 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 235:685d5f11838f 26 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 235:685d5f11838f 27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 235:685d5f11838f 28 *******************************************************************************
mbed_official 235:685d5f11838f 29 */
mbed_official 235:685d5f11838f 30 #include "pwmout_api.h"
mbed_official 235:685d5f11838f 31
mbed_official 235:685d5f11838f 32 #if DEVICE_PWMOUT
mbed_official 235:685d5f11838f 33
mbed_official 235:685d5f11838f 34 #include "cmsis.h"
mbed_official 235:685d5f11838f 35 #include "pinmap.h"
mbed_official 251:de9a1e4ffd79 36 #include "error.h"
mbed_official 235:685d5f11838f 37
mbed_official 235:685d5f11838f 38 // TIM5 cannot be used because already used by the us_ticker
mbed_official 235:685d5f11838f 39 static const PinMap PinMap_PWM[] = {
mbed_official 235:685d5f11838f 40 {PA_0, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH1
mbed_official 235:685d5f11838f 41 // {PA_0, PWM_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5)}, // TIM5_CH1
mbed_official 235:685d5f11838f 42 {PA_1, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH2
mbed_official 235:685d5f11838f 43 // {PA_1, PWM_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5)}, // TIM5_CH2
mbed_official 235:685d5f11838f 44 {PA_2, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH3
mbed_official 235:685d5f11838f 45 // {PA_2, PWM_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5)}, // TIM5_CH3
mbed_official 235:685d5f11838f 46 // {PA_2, PWM_9, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9)}, // TIM9_CH1
mbed_official 235:685d5f11838f 47 {PA_3, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH4
mbed_official 235:685d5f11838f 48 // {PA_3, PWM_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5)}, // TIM5_CH4
mbed_official 235:685d5f11838f 49 // {PA_3, PWM_9, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9)}, // TIM9_CH2
mbed_official 235:685d5f11838f 50 {PA_5, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH1
mbed_official 235:685d5f11838f 51 {PA_6, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH1
mbed_official 235:685d5f11838f 52 {PA_7, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1)}, // TIM1_CH1N - ARDUINO
mbed_official 235:685d5f11838f 53 // {PA_7, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2 - ARDUINO
mbed_official 235:685d5f11838f 54 {PA_8, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1)}, // TIM1_CH1
mbed_official 235:685d5f11838f 55 {PA_9, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1)}, // TIM1_CH2
mbed_official 235:685d5f11838f 56 {PA_10, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1)}, // TIM1_CH3
mbed_official 235:685d5f11838f 57 {PA_11, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1)}, // TIM1_CH4
mbed_official 235:685d5f11838f 58 {PA_15, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH1
mbed_official 235:685d5f11838f 59
mbed_official 235:685d5f11838f 60 {PB_0, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1)}, // TIM1_CH2N
mbed_official 235:685d5f11838f 61 // {PB_0, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH3
mbed_official 235:685d5f11838f 62 {PB_1, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1)}, // TIM1_CH3N
mbed_official 235:685d5f11838f 63 // {PB_1, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH4
mbed_official 235:685d5f11838f 64 {PB_3, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH2 - ARDUINO
mbed_official 235:685d5f11838f 65 {PB_4, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH1 - ARDUINO
mbed_official 235:685d5f11838f 66 {PB_5, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2
mbed_official 235:685d5f11838f 67 {PB_6, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH1 - ARDUINO
mbed_official 235:685d5f11838f 68 {PB_7, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH2
mbed_official 235:685d5f11838f 69 {PB_8, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH3
mbed_official 235:685d5f11838f 70 // {PB_8, PWM_10,STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10)}, // TIM10_CH1
mbed_official 235:685d5f11838f 71 {PB_9, PWM_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4)}, // TIM4_CH4
mbed_official 235:685d5f11838f 72 // {PB_9, PWM_11,STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11)}, // TIM11_CH1
mbed_official 235:685d5f11838f 73 {PB_10, PWM_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2)}, // TIM2_CH3 - ARDUINO
mbed_official 235:685d5f11838f 74 {PB_13, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1)}, // TIM1_CH1N
mbed_official 235:685d5f11838f 75 {PB_14, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1)}, // TIM1_CH2N
mbed_official 235:685d5f11838f 76 {PB_15, PWM_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1)}, // TIM1_CH3N
mbed_official 235:685d5f11838f 77
mbed_official 235:685d5f11838f 78 {PC_6, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH1
mbed_official 235:685d5f11838f 79 {PC_7, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH2 - ARDUINO
mbed_official 235:685d5f11838f 80 {PC_8, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH3
mbed_official 235:685d5f11838f 81 {PC_9, PWM_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3)}, // TIM3_CH4
mbed_official 235:685d5f11838f 82
mbed_official 235:685d5f11838f 83 {NC, NC, 0}
mbed_official 235:685d5f11838f 84 };
mbed_official 235:685d5f11838f 85
mbed_official 235:685d5f11838f 86 static TIM_HandleTypeDef TimHandle;
mbed_official 235:685d5f11838f 87
mbed_official 235:685d5f11838f 88 void pwmout_init(pwmout_t* obj, PinName pin)
mbed_official 235:685d5f11838f 89 {
mbed_official 235:685d5f11838f 90 // Get the peripheral name from the pin and assign it to the object
mbed_official 235:685d5f11838f 91 obj->pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM);
mbed_official 235:685d5f11838f 92
mbed_official 235:685d5f11838f 93 if (obj->pwm == (PWMName)NC) {
mbed_official 235:685d5f11838f 94 error("PWM error: pinout mapping failed.");
mbed_official 235:685d5f11838f 95 }
mbed_official 235:685d5f11838f 96
mbed_official 235:685d5f11838f 97 // Enable TIM clock
mbed_official 235:685d5f11838f 98 if (obj->pwm == PWM_1) __TIM1_CLK_ENABLE();
mbed_official 235:685d5f11838f 99 if (obj->pwm == PWM_2) __TIM2_CLK_ENABLE();
mbed_official 235:685d5f11838f 100 if (obj->pwm == PWM_3) __TIM3_CLK_ENABLE();
mbed_official 235:685d5f11838f 101 if (obj->pwm == PWM_4) __TIM4_CLK_ENABLE();
mbed_official 235:685d5f11838f 102 if (obj->pwm == PWM_9) __TIM9_CLK_ENABLE();
mbed_official 235:685d5f11838f 103 if (obj->pwm == PWM_10) __TIM10_CLK_ENABLE();
mbed_official 235:685d5f11838f 104 if (obj->pwm == PWM_11) __TIM11_CLK_ENABLE();
mbed_official 235:685d5f11838f 105
mbed_official 235:685d5f11838f 106 // Configure GPIO
mbed_official 235:685d5f11838f 107 pinmap_pinout(pin, PinMap_PWM);
mbed_official 235:685d5f11838f 108
mbed_official 235:685d5f11838f 109 obj->pin = pin;
mbed_official 235:685d5f11838f 110 obj->period = 0;
mbed_official 235:685d5f11838f 111 obj->pulse = 0;
mbed_official 235:685d5f11838f 112
mbed_official 235:685d5f11838f 113 pwmout_period_us(obj, 20000); // 20 ms per default
mbed_official 235:685d5f11838f 114 }
mbed_official 235:685d5f11838f 115
mbed_official 235:685d5f11838f 116 void pwmout_free(pwmout_t* obj)
mbed_official 235:685d5f11838f 117 {
mbed_official 235:685d5f11838f 118 // Configure GPIO
mbed_official 235:685d5f11838f 119 pin_function(obj->pin, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
mbed_official 235:685d5f11838f 120 }
mbed_official 235:685d5f11838f 121
mbed_official 235:685d5f11838f 122 void pwmout_write(pwmout_t* obj, float value)
mbed_official 235:685d5f11838f 123 {
mbed_official 235:685d5f11838f 124 TIM_OC_InitTypeDef sConfig;
mbed_official 235:685d5f11838f 125 int channel = 0;
mbed_official 235:685d5f11838f 126 int complementary_channel = 0;
mbed_official 235:685d5f11838f 127
mbed_official 235:685d5f11838f 128 TimHandle.Instance = (TIM_TypeDef *)(obj->pwm);
mbed_official 235:685d5f11838f 129
mbed_official 235:685d5f11838f 130 if (value < (float)0.0) {
mbed_official 235:685d5f11838f 131 value = 0.0;
mbed_official 235:685d5f11838f 132 } else if (value > (float)1.0) {
mbed_official 235:685d5f11838f 133 value = 1.0;
mbed_official 235:685d5f11838f 134 }
mbed_official 235:685d5f11838f 135
mbed_official 235:685d5f11838f 136 obj->pulse = (uint32_t)((float)obj->period * value);
mbed_official 235:685d5f11838f 137
mbed_official 235:685d5f11838f 138 // Configure channels
mbed_official 235:685d5f11838f 139 sConfig.OCMode = TIM_OCMODE_PWM1;
mbed_official 235:685d5f11838f 140 sConfig.Pulse = obj->pulse;
mbed_official 235:685d5f11838f 141 sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
mbed_official 235:685d5f11838f 142 sConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH;
mbed_official 235:685d5f11838f 143 sConfig.OCFastMode = TIM_OCFAST_DISABLE;
mbed_official 235:685d5f11838f 144 sConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
mbed_official 235:685d5f11838f 145 sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
mbed_official 235:685d5f11838f 146
mbed_official 235:685d5f11838f 147 switch (obj->pin) {
mbed_official 235:685d5f11838f 148
mbed_official 235:685d5f11838f 149 // Channels 1
mbed_official 235:685d5f11838f 150 case PA_0:
mbed_official 235:685d5f11838f 151 case PA_5:
mbed_official 235:685d5f11838f 152 case PA_6:
mbed_official 235:685d5f11838f 153 case PA_8:
mbed_official 235:685d5f11838f 154 case PA_15:
mbed_official 235:685d5f11838f 155 case PB_4:
mbed_official 235:685d5f11838f 156 case PB_6:
mbed_official 235:685d5f11838f 157 case PC_6:
mbed_official 235:685d5f11838f 158 channel = TIM_CHANNEL_1;
mbed_official 235:685d5f11838f 159 break;
mbed_official 235:685d5f11838f 160
mbed_official 235:685d5f11838f 161 // Channels 1N
mbed_official 235:685d5f11838f 162 case PA_7:
mbed_official 235:685d5f11838f 163 case PB_13:
mbed_official 235:685d5f11838f 164 channel = TIM_CHANNEL_1;
mbed_official 235:685d5f11838f 165 complementary_channel = 1;
mbed_official 235:685d5f11838f 166 break;
mbed_official 235:685d5f11838f 167
mbed_official 235:685d5f11838f 168 // Channels 2
mbed_official 235:685d5f11838f 169 case PA_1:
mbed_official 235:685d5f11838f 170 case PA_9:
mbed_official 235:685d5f11838f 171 case PB_3:
mbed_official 235:685d5f11838f 172 case PB_5:
mbed_official 235:685d5f11838f 173 case PB_7:
mbed_official 235:685d5f11838f 174 case PC_7:
mbed_official 235:685d5f11838f 175 channel = TIM_CHANNEL_2;
mbed_official 235:685d5f11838f 176 break;
mbed_official 235:685d5f11838f 177
mbed_official 235:685d5f11838f 178 // Channels 2N
mbed_official 235:685d5f11838f 179 case PB_0:
mbed_official 235:685d5f11838f 180 case PB_14:
mbed_official 235:685d5f11838f 181 channel = TIM_CHANNEL_2;
mbed_official 235:685d5f11838f 182 complementary_channel = 1;
mbed_official 235:685d5f11838f 183 break;
mbed_official 235:685d5f11838f 184
mbed_official 235:685d5f11838f 185 // Channels 3
mbed_official 235:685d5f11838f 186 case PA_2:
mbed_official 235:685d5f11838f 187 case PA_10:
mbed_official 235:685d5f11838f 188 case PB_8:
mbed_official 235:685d5f11838f 189 case PB_10:
mbed_official 235:685d5f11838f 190 case PC_8:
mbed_official 235:685d5f11838f 191 channel = TIM_CHANNEL_3;
mbed_official 235:685d5f11838f 192 break;
mbed_official 235:685d5f11838f 193
mbed_official 235:685d5f11838f 194 // Channels 3N
mbed_official 235:685d5f11838f 195 case PB_1:
mbed_official 235:685d5f11838f 196 case PB_15:
mbed_official 235:685d5f11838f 197 channel = TIM_CHANNEL_3;
mbed_official 235:685d5f11838f 198 complementary_channel = 1;
mbed_official 235:685d5f11838f 199 break;
mbed_official 235:685d5f11838f 200
mbed_official 235:685d5f11838f 201 // Channels 4
mbed_official 235:685d5f11838f 202 case PA_3:
mbed_official 235:685d5f11838f 203 case PA_11:
mbed_official 235:685d5f11838f 204 case PB_9:
mbed_official 235:685d5f11838f 205 case PC_9:
mbed_official 235:685d5f11838f 206 channel = TIM_CHANNEL_4;
mbed_official 235:685d5f11838f 207 break;
mbed_official 235:685d5f11838f 208
mbed_official 235:685d5f11838f 209 default:
mbed_official 235:685d5f11838f 210 return;
mbed_official 235:685d5f11838f 211 }
mbed_official 235:685d5f11838f 212
mbed_official 235:685d5f11838f 213 HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, channel);
mbed_official 235:685d5f11838f 214 if (complementary_channel) {
mbed_official 235:685d5f11838f 215 HAL_TIMEx_PWMN_Start(&TimHandle, channel);
mbed_official 235:685d5f11838f 216 } else {
mbed_official 235:685d5f11838f 217 HAL_TIM_PWM_Start(&TimHandle, channel);
mbed_official 235:685d5f11838f 218 }
mbed_official 235:685d5f11838f 219 }
mbed_official 235:685d5f11838f 220
mbed_official 235:685d5f11838f 221 float pwmout_read(pwmout_t* obj)
mbed_official 235:685d5f11838f 222 {
mbed_official 235:685d5f11838f 223 float value = 0;
mbed_official 235:685d5f11838f 224 if (obj->period > 0) {
mbed_official 235:685d5f11838f 225 value = (float)(obj->pulse) / (float)(obj->period);
mbed_official 235:685d5f11838f 226 }
mbed_official 235:685d5f11838f 227 return ((value > (float)1.0) ? (float)(1.0) : (value));
mbed_official 235:685d5f11838f 228 }
mbed_official 235:685d5f11838f 229
mbed_official 235:685d5f11838f 230 void pwmout_period(pwmout_t* obj, float seconds)
mbed_official 235:685d5f11838f 231 {
mbed_official 235:685d5f11838f 232 pwmout_period_us(obj, seconds * 1000000.0f);
mbed_official 235:685d5f11838f 233 }
mbed_official 235:685d5f11838f 234
mbed_official 235:685d5f11838f 235 void pwmout_period_ms(pwmout_t* obj, int ms)
mbed_official 235:685d5f11838f 236 {
mbed_official 235:685d5f11838f 237 pwmout_period_us(obj, ms * 1000);
mbed_official 235:685d5f11838f 238 }
mbed_official 235:685d5f11838f 239
mbed_official 235:685d5f11838f 240 void pwmout_period_us(pwmout_t* obj, int us)
mbed_official 235:685d5f11838f 241 {
mbed_official 235:685d5f11838f 242 TimHandle.Instance = (TIM_TypeDef *)(obj->pwm);
mbed_official 235:685d5f11838f 243
mbed_official 235:685d5f11838f 244 float dc = pwmout_read(obj);
mbed_official 235:685d5f11838f 245
mbed_official 235:685d5f11838f 246 __HAL_TIM_DISABLE(&TimHandle);
mbed_official 235:685d5f11838f 247
mbed_official 235:685d5f11838f 248 // Update the SystemCoreClock variable
mbed_official 235:685d5f11838f 249 SystemCoreClockUpdate();
mbed_official 235:685d5f11838f 250
mbed_official 235:685d5f11838f 251 TimHandle.Init.Period = us - 1;
mbed_official 235:685d5f11838f 252 TimHandle.Init.Prescaler = (uint16_t)(SystemCoreClock / 1000000) - 1; // 1 µs tick
mbed_official 235:685d5f11838f 253 TimHandle.Init.ClockDivision = 0;
mbed_official 235:685d5f11838f 254 TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
mbed_official 235:685d5f11838f 255 HAL_TIM_PWM_Init(&TimHandle);
mbed_official 235:685d5f11838f 256
mbed_official 235:685d5f11838f 257 // Set duty cycle again
mbed_official 235:685d5f11838f 258 pwmout_write(obj, dc);
mbed_official 235:685d5f11838f 259
mbed_official 235:685d5f11838f 260 // Save for future use
mbed_official 235:685d5f11838f 261 obj->period = us;
mbed_official 235:685d5f11838f 262
mbed_official 235:685d5f11838f 263 __HAL_TIM_ENABLE(&TimHandle);
mbed_official 235:685d5f11838f 264 }
mbed_official 235:685d5f11838f 265
mbed_official 235:685d5f11838f 266 void pwmout_pulsewidth(pwmout_t* obj, float seconds)
mbed_official 235:685d5f11838f 267 {
mbed_official 235:685d5f11838f 268 pwmout_pulsewidth_us(obj, seconds * 1000000.0f);
mbed_official 235:685d5f11838f 269 }
mbed_official 235:685d5f11838f 270
mbed_official 235:685d5f11838f 271 void pwmout_pulsewidth_ms(pwmout_t* obj, int ms)
mbed_official 235:685d5f11838f 272 {
mbed_official 235:685d5f11838f 273 pwmout_pulsewidth_us(obj, ms * 1000);
mbed_official 235:685d5f11838f 274 }
mbed_official 235:685d5f11838f 275
mbed_official 235:685d5f11838f 276 void pwmout_pulsewidth_us(pwmout_t* obj, int us)
mbed_official 235:685d5f11838f 277 {
mbed_official 235:685d5f11838f 278 float value = (float)us / (float)obj->period;
mbed_official 235:685d5f11838f 279 pwmout_write(obj, value);
mbed_official 235:685d5f11838f 280 }
mbed_official 235:685d5f11838f 281
mbed_official 235:685d5f11838f 282 #endif