22 #include "sysconfig.h" 28 #include "stm32f4xx_hal.h" 30 TIM_HandleTypeDef htim3;
33 void MX_TIM3_Init(
void)
35 TIM_ClockConfigTypeDef sClockSourceConfig;
36 TIM_MasterConfigTypeDef sMasterConfig;
37 TIM_OC_InitTypeDef sConfigOC;
39 htim3.Instance = TIM3;
40 htim3.Init.Prescaler = 0;
41 htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
42 htim3.Init.Period = 0;
43 htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
44 HAL_TIM_Base_Init(&htim3);
46 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
47 HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig);
49 HAL_TIM_OC_Init(&htim3);
51 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
52 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
53 HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig);
55 sConfigOC.OCMode = TIM_OCMODE_TIMING;
57 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
58 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
59 HAL_TIM_OC_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4);
62 void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
64 GPIO_InitTypeDef GPIO_InitStruct;
65 if(htim_base->Instance==TIM3) {
68 GPIO_InitStruct.Pin = GPIO_PIN_1;
69 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
70 GPIO_InitStruct.Pull = GPIO_NOPULL;
71 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
72 GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
73 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
83 void on_buzzer(
long cycle)
85 TIM_OC_InitTypeDef sConfigOC;
86 htim3.Init.Period = cycle;
87 HAL_TIM_Base_Init(&htim3);
89 sConfigOC.OCMode = TIM_OCMODE_TOGGLE;
90 sConfigOC.Pulse = cycle/2;
91 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
92 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
93 HAL_TIM_OC_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4);
95 HAL_TIM_OC_Start(&htim3, TIM_CHANNEL_4);
100 HAL_TIM_OC_Stop(&htim3, TIM_CHANNEL_4);
103 static int buzzer_register(
struct st_device *dev,
char *param)
110 static int buzzer_unregister(
struct st_device *dev)
117 static int buzzer_open(
struct st_device *dev)
122 static int buzzer_close(
struct st_device *dev)
129 static int buzzer_ioctl(
struct st_device *dev,
unsigned int com,
unsigned int arg,
void *param)
138 long cycle = (GSC_CPU_CLOCK_HZ/4) / arg;
145 SYSERR_PRINT(
"Unknown ioctl(%08lX)\n", com);
152 static int buzzer_suspend(
struct st_device *dev)
159 static int buzzer_resume(
struct st_device *dev)
168 .explan =
"STM32F4 TIM3 buzzer",
169 .register_dev = buzzer_register,
170 .unregister_dev = buzzer_unregister,
172 .close = buzzer_close,
173 .ioctl = buzzer_ioctl,
174 .suspend = buzzer_suspend,
175 .resume = buzzer_resume,
#define IOCMD_BUZZER_OFF
ブザー音声出力停止
#define DEF_DEV_NAME_BUZZER
標準ブザーデバイス名
#define IOCMD_BUZZER_ON
ブザー音声出力開始
char name[MAX_DEVNAMELRN]
デバイス名文字列