Gerald Ebmer / Mbed 2 deprecated HV_Pulsgenerator

Dependencies:   mbed

Committer:
geryyy
Date:
Tue Jun 19 11:50:29 2018 +0000
Revision:
2:7d25b12db2bc
Parent:
1:5bceb51fde85
Child:
3:a0ce23fb69d8
complementary pulse output working

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