Gerald Ebmer / Mbed 2 deprecated HV_Pulsgenerator

Dependencies:   mbed

Committer:
geryyy
Date:
Wed Sep 05 17:31:20 2018 +0000
Revision:
3:a0ce23fb69d8
Parent:
2:7d25b12db2bc
author and date added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
geryyy 0:1df541c54e25 1 #include "mbed.h"
geryyy 0:1df541c54e25 2 #include "stm32f7xx_hal.h"
geryyy 0:1df541c54e25 3
geryyy 3:a0ce23fb69d8 4 /* author: Gerald Ebmer
geryyy 3:a0ce23fb69d8 5 * date: 26.06.2018
geryyy 3:a0ce23fb69d8 6 */
geryyy 3:a0ce23fb69d8 7
geryyy 2:7d25b12db2bc 8 DigitalOut myled(LED1);
geryyy 2:7d25b12db2bc 9 uint16_t uhPrescalerValue;
geryyy 2:7d25b12db2bc 10
geryyy 2:7d25b12db2bc 11 uint16_t TPeriod;
geryyy 2:7d25b12db2bc 12 uint16_t TPulse;
geryyy 2:7d25b12db2bc 13 uint16_t TPulseframe;
geryyy 0:1df541c54e25 14
geryyy 2:7d25b12db2bc 15 TIM_HandleTypeDef htim3;
geryyy 2:7d25b12db2bc 16 TIM_HandleTypeDef htim4;
geryyy 2:7d25b12db2bc 17 static void MX_GPIO_Init(void);
geryyy 2:7d25b12db2bc 18 static void MX_TIM3_Init(void);
geryyy 2:7d25b12db2bc 19 static void MX_TIM4_Init(void);
geryyy 2:7d25b12db2bc 20
geryyy 2:7d25b12db2bc 21 void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
geryyy 0:1df541c54e25 22
geryyy 2:7d25b12db2bc 23 void _Error_Handler(char *file, int line);
geryyy 0:1df541c54e25 24
geryyy 0:1df541c54e25 25 int main() {
geryyy 2:7d25b12db2bc 26 uint32_t TimerCLK = 10000000;
geryyy 2:7d25b12db2bc 27 uhPrescalerValue = (uint32_t)(((SystemCoreClock/ 2) / TimerCLK) - 1);
geryyy 0:1df541c54e25 28
geryyy 2:7d25b12db2bc 29 /* pulse parameter
geryyy 2:7d25b12db2bc 30 * __ __
geryyy 2:7d25b12db2bc 31 * TIM3 Ch1 (PB4): | |_______________________|
geryyy 2:7d25b12db2bc 32 * : : __ :
geryyy 2:7d25b12db2bc 33 * TIM4 Ch1 (PB6): :__:___________| |________:__
geryyy 3:a0ce23fb69d8 34 * :TPulse_s : :
geryyy 3:a0ce23fb69d8 35 * : TPulseframe_s :
geryyy 2:7d25b12db2bc 36 * : TPeriod_s :
geryyy 2:7d25b12db2bc 37 */
geryyy 2:7d25b12db2bc 38
geryyy 2:7d25b12db2bc 39 float Tclk_s = 1/ (float)TimerCLK;
geryyy 2:7d25b12db2bc 40 float TPulse_s = 0.000001; /* Tclk_s .. TPeriod_s 0.1 e.g. 1us */
geryyy 3:a0ce23fb69d8 41 float TPulseframe_s = 0.0005; /* TPulse_s .. TPeriod_s 0.1 e.g. 10us */
geryyy 3:a0ce23fb69d8 42 float TPeriod_s = 0.001; /* 0.0001 .. 0.0065 s */
geryyy 2:7d25b12db2bc 43
geryyy 2:7d25b12db2bc 44 /* timer register values */
geryyy 2:7d25b12db2bc 45 TPulse = (uint16_t)(TPulse_s / Tclk_s) + 1;
geryyy 2:7d25b12db2bc 46 TPulseframe = (uint16_t)(TPulseframe_s / Tclk_s + 1);
geryyy 2:7d25b12db2bc 47 TPeriod = (uint16_t)(TPeriod_s / Tclk_s) + 1;
geryyy 2:7d25b12db2bc 48
geryyy 2:7d25b12db2bc 49 printf("HV Pulsgenerator V0.1\nGerald Ebmer 2018\n\n");
geryyy 2:7d25b12db2bc 50 printf("TPulse: %d\nTPulseframe: %d\nTPeriod: %d\n\n",TPulse, TPulseframe, TPeriod);
geryyy 2:7d25b12db2bc 51
geryyy 0:1df541c54e25 52
geryyy 2:7d25b12db2bc 53
geryyy 2:7d25b12db2bc 54
geryyy 2:7d25b12db2bc 55 MX_GPIO_Init();
geryyy 2:7d25b12db2bc 56 MX_TIM3_Init();
geryyy 2:7d25b12db2bc 57 MX_TIM4_Init();
geryyy 2:7d25b12db2bc 58 HAL_TIM_Base_MspInit(&htim3);
geryyy 2:7d25b12db2bc 59 HAL_TIM_Base_MspInit(&htim4);
geryyy 2:7d25b12db2bc 60
geryyy 2:7d25b12db2bc 61 HAL_TIM_Base_Start(&htim4);
geryyy 2:7d25b12db2bc 62 HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);
geryyy 2:7d25b12db2bc 63 HAL_TIM_OnePulse_Start(&htim4, TIM_CHANNEL_1);
geryyy 2:7d25b12db2bc 64 // Master
geryyy 2:7d25b12db2bc 65 HAL_TIM_Base_Start(&htim3);
geryyy 2:7d25b12db2bc 66 HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
geryyy 2:7d25b12db2bc 67 /* TIM3 Channel 1: PB4
geryyy 2:7d25b12db2bc 68 TIM4 Channel 1: PB6
geryyy 2:7d25b12db2bc 69 */
geryyy 0:1df541c54e25 70 while(1) {
geryyy 0:1df541c54e25 71 myled = !myled;
geryyy 0:1df541c54e25 72 wait(1);
geryyy 0:1df541c54e25 73 }
geryyy 0:1df541c54e25 74 }
geryyy 0:1df541c54e25 75
geryyy 2:7d25b12db2bc 76 /* TIM3 init function */
geryyy 2:7d25b12db2bc 77 static void MX_TIM3_Init(void)
geryyy 0:1df541c54e25 78 {
geryyy 2:7d25b12db2bc 79
geryyy 2:7d25b12db2bc 80 TIM_ClockConfigTypeDef sClockSourceConfig;
geryyy 2:7d25b12db2bc 81 TIM_MasterConfigTypeDef sMasterConfig;
geryyy 2:7d25b12db2bc 82 TIM_OC_InitTypeDef sConfigOC;
geryyy 2:7d25b12db2bc 83
geryyy 2:7d25b12db2bc 84 htim3.Instance = TIM3;
geryyy 2:7d25b12db2bc 85 htim3.Init.Prescaler = uhPrescalerValue;
geryyy 2:7d25b12db2bc 86 htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
geryyy 2:7d25b12db2bc 87 htim3.Init.Period = TPeriod;
geryyy 2:7d25b12db2bc 88 htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
geryyy 2:7d25b12db2bc 89 htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
geryyy 2:7d25b12db2bc 90 if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
geryyy 2:7d25b12db2bc 91 {
geryyy 2:7d25b12db2bc 92 _Error_Handler(__FILE__, __LINE__);
geryyy 2:7d25b12db2bc 93 }
geryyy 2:7d25b12db2bc 94
geryyy 2:7d25b12db2bc 95 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
geryyy 2:7d25b12db2bc 96 if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
geryyy 2:7d25b12db2bc 97 {
geryyy 2:7d25b12db2bc 98 _Error_Handler(__FILE__, __LINE__);
geryyy 2:7d25b12db2bc 99 }
geryyy 2:7d25b12db2bc 100
geryyy 2:7d25b12db2bc 101 if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
geryyy 2:7d25b12db2bc 102 {
geryyy 2:7d25b12db2bc 103 _Error_Handler(__FILE__, __LINE__);
geryyy 2:7d25b12db2bc 104 }
geryyy 2:7d25b12db2bc 105
geryyy 2:7d25b12db2bc 106 sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
geryyy 2:7d25b12db2bc 107 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
geryyy 2:7d25b12db2bc 108 if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
geryyy 2:7d25b12db2bc 109 {
geryyy 2:7d25b12db2bc 110 _Error_Handler(__FILE__, __LINE__);
geryyy 2:7d25b12db2bc 111 }
geryyy 0:1df541c54e25 112
geryyy 2:7d25b12db2bc 113 sConfigOC.OCMode = TIM_OCMODE_PWM1;
geryyy 2:7d25b12db2bc 114 sConfigOC.Pulse = TPulse;
geryyy 2:7d25b12db2bc 115 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
geryyy 2:7d25b12db2bc 116 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
geryyy 2:7d25b12db2bc 117 if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
geryyy 2:7d25b12db2bc 118 {
geryyy 2:7d25b12db2bc 119 _Error_Handler(__FILE__, __LINE__);
geryyy 2:7d25b12db2bc 120 }
geryyy 2:7d25b12db2bc 121
geryyy 2:7d25b12db2bc 122 HAL_TIM_MspPostInit(&htim3);
geryyy 2:7d25b12db2bc 123
geryyy 2:7d25b12db2bc 124 }
geryyy 2:7d25b12db2bc 125
geryyy 2:7d25b12db2bc 126 /* TIM4 init function */
geryyy 2:7d25b12db2bc 127 static void MX_TIM4_Init(void)
geryyy 2:7d25b12db2bc 128 {
geryyy 2:7d25b12db2bc 129
geryyy 2:7d25b12db2bc 130 TIM_ClockConfigTypeDef sClockSourceConfig;
geryyy 2:7d25b12db2bc 131 TIM_SlaveConfigTypeDef sSlaveConfig;
geryyy 2:7d25b12db2bc 132 TIM_MasterConfigTypeDef sMasterConfig;
geryyy 2:7d25b12db2bc 133 TIM_OC_InitTypeDef sConfigOC;
geryyy 2:7d25b12db2bc 134
geryyy 2:7d25b12db2bc 135 htim4.Instance = TIM4;
geryyy 2:7d25b12db2bc 136 htim4.Init.Prescaler = uhPrescalerValue;
geryyy 2:7d25b12db2bc 137 htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
geryyy 2:7d25b12db2bc 138 htim4.Init.Period = TPulseframe;
geryyy 2:7d25b12db2bc 139 htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
geryyy 2:7d25b12db2bc 140 htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
geryyy 2:7d25b12db2bc 141 if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
geryyy 2:7d25b12db2bc 142 {
geryyy 2:7d25b12db2bc 143 _Error_Handler(__FILE__, __LINE__);
geryyy 2:7d25b12db2bc 144 }
geryyy 2:7d25b12db2bc 145
geryyy 2:7d25b12db2bc 146 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
geryyy 2:7d25b12db2bc 147 if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
geryyy 2:7d25b12db2bc 148 {
geryyy 2:7d25b12db2bc 149 _Error_Handler(__FILE__, __LINE__);
geryyy 2:7d25b12db2bc 150 }
geryyy 2:7d25b12db2bc 151
geryyy 2:7d25b12db2bc 152 if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
geryyy 2:7d25b12db2bc 153 {
geryyy 2:7d25b12db2bc 154 _Error_Handler(__FILE__, __LINE__);
geryyy 2:7d25b12db2bc 155 }
geryyy 2:7d25b12db2bc 156
geryyy 2:7d25b12db2bc 157 if (HAL_TIM_OnePulse_Init(&htim4, TIM_OPMODE_SINGLE) != HAL_OK)
geryyy 2:7d25b12db2bc 158 {
geryyy 2:7d25b12db2bc 159 _Error_Handler(__FILE__, __LINE__);
geryyy 2:7d25b12db2bc 160 }
geryyy 0:1df541c54e25 161
geryyy 2:7d25b12db2bc 162 sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
geryyy 2:7d25b12db2bc 163 sSlaveConfig.InputTrigger = TIM_TS_ITR2;
geryyy 2:7d25b12db2bc 164 if (HAL_TIM_SlaveConfigSynchronization(&htim4, &sSlaveConfig) != HAL_OK)
geryyy 2:7d25b12db2bc 165 {
geryyy 2:7d25b12db2bc 166 _Error_Handler(__FILE__, __LINE__);
geryyy 2:7d25b12db2bc 167 }
geryyy 2:7d25b12db2bc 168
geryyy 2:7d25b12db2bc 169 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
geryyy 2:7d25b12db2bc 170 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
geryyy 2:7d25b12db2bc 171 if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
geryyy 2:7d25b12db2bc 172 {
geryyy 2:7d25b12db2bc 173 _Error_Handler(__FILE__, __LINE__);
geryyy 2:7d25b12db2bc 174 }
geryyy 2:7d25b12db2bc 175
geryyy 2:7d25b12db2bc 176 sConfigOC.OCMode = TIM_OCMODE_PWM1;
geryyy 2:7d25b12db2bc 177 sConfigOC.Pulse = TPulseframe - TPulse;
geryyy 2:7d25b12db2bc 178 sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
geryyy 2:7d25b12db2bc 179 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
geryyy 2:7d25b12db2bc 180 if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
geryyy 2:7d25b12db2bc 181 {
geryyy 2:7d25b12db2bc 182 _Error_Handler(__FILE__, __LINE__);
geryyy 2:7d25b12db2bc 183 }
geryyy 2:7d25b12db2bc 184
geryyy 2:7d25b12db2bc 185 HAL_TIM_MspPostInit(&htim4);
geryyy 2:7d25b12db2bc 186
geryyy 2:7d25b12db2bc 187 }
geryyy 2:7d25b12db2bc 188
geryyy 2:7d25b12db2bc 189 /** Configure pins as
geryyy 2:7d25b12db2bc 190 * Analog
geryyy 2:7d25b12db2bc 191 * Input
geryyy 2:7d25b12db2bc 192 * Output
geryyy 2:7d25b12db2bc 193 * EVENT_OUT
geryyy 2:7d25b12db2bc 194 * EXTI
geryyy 2:7d25b12db2bc 195 */
geryyy 2:7d25b12db2bc 196 static void MX_GPIO_Init(void)
geryyy 2:7d25b12db2bc 197 {
geryyy 2:7d25b12db2bc 198 /* GPIO Ports Clock Enable */
geryyy 2:7d25b12db2bc 199 __HAL_RCC_GPIOH_CLK_ENABLE();
geryyy 2:7d25b12db2bc 200 __HAL_RCC_GPIOB_CLK_ENABLE();
geryyy 2:7d25b12db2bc 201 }
geryyy 2:7d25b12db2bc 202
geryyy 0:1df541c54e25 203
geryyy 2:7d25b12db2bc 204 void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
geryyy 2:7d25b12db2bc 205 {
geryyy 2:7d25b12db2bc 206
geryyy 2:7d25b12db2bc 207 if(htim_base->Instance==TIM3)
geryyy 2:7d25b12db2bc 208 {
geryyy 2:7d25b12db2bc 209 /* Peripheral clock enable */
geryyy 2:7d25b12db2bc 210 __HAL_RCC_TIM3_CLK_ENABLE();
geryyy 2:7d25b12db2bc 211 }
geryyy 2:7d25b12db2bc 212 else if(htim_base->Instance==TIM4)
geryyy 2:7d25b12db2bc 213 {
geryyy 2:7d25b12db2bc 214 /* Peripheral clock enable */
geryyy 2:7d25b12db2bc 215 __HAL_RCC_TIM4_CLK_ENABLE();
geryyy 2:7d25b12db2bc 216 }
geryyy 2:7d25b12db2bc 217 }
geryyy 0:1df541c54e25 218
geryyy 2:7d25b12db2bc 219 void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
geryyy 2:7d25b12db2bc 220 {
geryyy 2:7d25b12db2bc 221 GPIO_InitTypeDef GPIO_InitStruct;
geryyy 2:7d25b12db2bc 222 if(htim->Instance==TIM3)
geryyy 2:7d25b12db2bc 223 {
geryyy 2:7d25b12db2bc 224 /**TIM3 GPIO Configuration
geryyy 2:7d25b12db2bc 225 PB4 ------> TIM3_CH1
geryyy 2:7d25b12db2bc 226 */
geryyy 2:7d25b12db2bc 227 GPIO_InitStruct.Pin = GPIO_PIN_4;
geryyy 2:7d25b12db2bc 228 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
geryyy 2:7d25b12db2bc 229 GPIO_InitStruct.Pull = GPIO_NOPULL;
geryyy 3:a0ce23fb69d8 230 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
geryyy 2:7d25b12db2bc 231 GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
geryyy 2:7d25b12db2bc 232 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
geryyy 2:7d25b12db2bc 233
geryyy 2:7d25b12db2bc 234 }
geryyy 2:7d25b12db2bc 235 else if(htim->Instance==TIM4)
geryyy 2:7d25b12db2bc 236 {
geryyy 2:7d25b12db2bc 237 /**TIM4 GPIO Configuration
geryyy 2:7d25b12db2bc 238 PB6 ------> TIM4_CH1
geryyy 2:7d25b12db2bc 239 */
geryyy 2:7d25b12db2bc 240 GPIO_InitStruct.Pin = GPIO_PIN_6;
geryyy 2:7d25b12db2bc 241 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
geryyy 2:7d25b12db2bc 242 GPIO_InitStruct.Pull = GPIO_NOPULL;
geryyy 3:a0ce23fb69d8 243 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
geryyy 2:7d25b12db2bc 244 GPIO_InitStruct.Alternate = GPIO_AF2_TIM4;
geryyy 2:7d25b12db2bc 245 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
geryyy 2:7d25b12db2bc 246 }
geryyy 0:1df541c54e25 247 }
geryyy 0:1df541c54e25 248
geryyy 0:1df541c54e25 249
geryyy 0:1df541c54e25 250 /**
geryyy 0:1df541c54e25 251 * @brief This function is executed in case of error occurrence.
geryyy 0:1df541c54e25 252 * @param file: The file name as string.
geryyy 0:1df541c54e25 253 * @param line: The line in file as a number.
geryyy 0:1df541c54e25 254 * @retval None
geryyy 0:1df541c54e25 255 */
geryyy 2:7d25b12db2bc 256 void _Error_Handler(char *file, int line)
geryyy 0:1df541c54e25 257 {
geryyy 0:1df541c54e25 258 fprintf(stderr, "Error in file %s linenr %d!\n",file,line);
geryyy 0:1df541c54e25 259 /* USER CODE BEGIN Error_Handler_Debug */
geryyy 0:1df541c54e25 260 /* User can add his own implementation to report the HAL error return state */
geryyy 0:1df541c54e25 261 while(1)
geryyy 0:1df541c54e25 262 {
geryyy 0:1df541c54e25 263 }
geryyy 0:1df541c54e25 264 /* USER CODE END Error_Handler_Debug */
geryyy 0:1df541c54e25 265 }