buzzer is working

This commit is contained in:
Wolfgang Hottgenroth 2017-06-12 17:50:08 +02:00
parent 49a7f2592c
commit 7f54b22e6b
14 changed files with 271 additions and 29 deletions

View File

@ -45,6 +45,8 @@
#define LED_GPIO_Port GPIOC #define LED_GPIO_Port GPIOC
#define ERROR_Pin GPIO_PIN_14 #define ERROR_Pin GPIO_PIN_14
#define ERROR_GPIO_Port GPIOC #define ERROR_GPIO_Port GPIOC
#define BUZZER_Pin GPIO_PIN_8
#define BUZZER_GPIO_Port GPIOA
#define ROTARY_B_Pin GPIO_PIN_3 #define ROTARY_B_Pin GPIO_PIN_3
#define ROTARY_B_GPIO_Port GPIOB #define ROTARY_B_GPIO_Port GPIOB
#define ROTARY_A_Pin GPIO_PIN_4 #define ROTARY_A_Pin GPIO_PIN_4

View File

@ -77,7 +77,7 @@
/*#define HAL_SMARTCARD_MODULE_ENABLED */ /*#define HAL_SMARTCARD_MODULE_ENABLED */
#define HAL_SPI_MODULE_ENABLED #define HAL_SPI_MODULE_ENABLED
/*#define HAL_SRAM_MODULE_ENABLED */ /*#define HAL_SRAM_MODULE_ENABLED */
/*#define HAL_TIM_MODULE_ENABLED */ #define HAL_TIM_MODULE_ENABLED
/*#define HAL_UART_MODULE_ENABLED */ /*#define HAL_UART_MODULE_ENABLED */
/*#define HAL_USART_MODULE_ENABLED */ /*#define HAL_USART_MODULE_ENABLED */
/*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */

View File

@ -42,6 +42,8 @@ ADC_HandleTypeDef hadc1;
SPI_HandleTypeDef hspi1; SPI_HandleTypeDef hspi1;
TIM_HandleTypeDef htim1;
/* USER CODE BEGIN PV */ /* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/
@ -53,6 +55,10 @@ void Error_Handler(void);
static void MX_GPIO_Init(void); static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void); static void MX_ADC1_Init(void);
static void MX_SPI1_Init(void); static void MX_SPI1_Init(void);
static void MX_TIM1_Init(void);
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
/* USER CODE BEGIN PFP */ /* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
@ -82,6 +88,7 @@ int main(void)
MX_GPIO_Init(); MX_GPIO_Init();
MX_ADC1_Init(); MX_ADC1_Init();
MX_SPI1_Init(); MX_SPI1_Init();
MX_TIM1_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
@ -201,6 +208,72 @@ static void MX_SPI1_Init(void)
} }
/* TIM1 init function */
static void MX_TIM1_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig;
TIM_MasterConfigTypeDef sMasterConfig;
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;
TIM_OC_InitTypeDef sConfigOC;
htim1.Instance = TIM1;
htim1.Init.Prescaler = 36;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 1000;
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim1.Init.RepetitionCounter = 0;
if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_OC_Init(&htim1) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
sBreakDeadTimeConfig.DeadTime = 0;
sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_TOGGLE;
sConfigOC.Pulse = 10000;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
HAL_TIM_MspPostInit(&htim1);
}
/** Configure pins as /** Configure pins as
* Analog * Analog
* Input * Input

View File

@ -185,6 +185,65 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi)
} }
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
{
if(htim_base->Instance==TIM1)
{
/* USER CODE BEGIN TIM1_MspInit 0 */
/* USER CODE END TIM1_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_TIM1_CLK_ENABLE();
/* USER CODE BEGIN TIM1_MspInit 1 */
/* USER CODE END TIM1_MspInit 1 */
}
}
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(htim->Instance==TIM1)
{
/* USER CODE BEGIN TIM1_MspPostInit 0 */
/* USER CODE END TIM1_MspPostInit 0 */
/**TIM1 GPIO Configuration
PA8 ------> TIM1_CH1
*/
GPIO_InitStruct.Pin = BUZZER_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(BUZZER_GPIO_Port, &GPIO_InitStruct);
/* USER CODE BEGIN TIM1_MspPostInit 1 */
/* USER CODE END TIM1_MspPostInit 1 */
}
}
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
{
if(htim_base->Instance==TIM1)
{
/* USER CODE BEGIN TIM1_MspDeInit 0 */
/* USER CODE END TIM1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM1_CLK_DISABLE();
}
/* USER CODE BEGIN TIM1_MspDeInit 1 */
/* USER CODE END TIM1_MspDeInit 1 */
}
/* USER CODE BEGIN 1 */ /* USER CODE BEGIN 1 */
/* USER CODE END 1 */ /* USER CODE END 1 */

View File

@ -22,28 +22,31 @@ Mcu.IP1=NVIC
Mcu.IP2=RCC Mcu.IP2=RCC
Mcu.IP3=SPI1 Mcu.IP3=SPI1
Mcu.IP4=SYS Mcu.IP4=SYS
Mcu.IPNb=5 Mcu.IP5=TIM1
Mcu.IPNb=6
Mcu.Name=STM32F103C(8-B)Tx Mcu.Name=STM32F103C(8-B)Tx
Mcu.Package=LQFP48 Mcu.Package=LQFP48
Mcu.Pin0=PC13-TAMPER-RTC Mcu.Pin0=PC13-TAMPER-RTC
Mcu.Pin1=PC14-OSC32_IN Mcu.Pin1=PC14-OSC32_IN
Mcu.Pin10=PB3 Mcu.Pin10=PA14
Mcu.Pin11=PB4 Mcu.Pin11=PB3
Mcu.Pin12=PB5 Mcu.Pin12=PB4
Mcu.Pin13=PB6 Mcu.Pin13=PB5
Mcu.Pin14=PB7 Mcu.Pin14=PB6
Mcu.Pin15=PB8 Mcu.Pin15=PB7
Mcu.Pin16=PB9 Mcu.Pin16=PB8
Mcu.Pin17=VP_SYS_VS_Systick Mcu.Pin17=PB9
Mcu.Pin18=VP_SYS_VS_Systick
Mcu.Pin19=VP_TIM1_VS_ClockSourceINT
Mcu.Pin2=PD0-OSC_IN Mcu.Pin2=PD0-OSC_IN
Mcu.Pin3=PD1-OSC_OUT Mcu.Pin3=PD1-OSC_OUT
Mcu.Pin4=PA0-WKUP Mcu.Pin4=PA0-WKUP
Mcu.Pin5=PA5 Mcu.Pin5=PA5
Mcu.Pin6=PA6 Mcu.Pin6=PA6
Mcu.Pin7=PA7 Mcu.Pin7=PA7
Mcu.Pin8=PA13 Mcu.Pin8=PA8
Mcu.Pin9=PA14 Mcu.Pin9=PA13
Mcu.PinsNb=18 Mcu.PinsNb=20
Mcu.UserConstants= Mcu.UserConstants=
Mcu.UserName=STM32F103C8Tx Mcu.UserName=STM32F103C8Tx
MxCube.Version=4.16.1 MxCube.Version=4.16.1
@ -72,6 +75,9 @@ PA6.Mode=Full_Duplex_Master
PA6.Signal=SPI1_MISO PA6.Signal=SPI1_MISO
PA7.Mode=Full_Duplex_Master PA7.Mode=Full_Duplex_Master
PA7.Signal=SPI1_MOSI PA7.Signal=SPI1_MOSI
PA8.GPIOParameters=GPIO_Label
PA8.GPIO_Label=BUZZER
PA8.Signal=S_TIM1_CH1
PB3.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI PB3.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
PB3.GPIO_Label=ROTARY_B PB3.GPIO_Label=ROTARY_B
PB3.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING PB3.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
@ -152,7 +158,7 @@ ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=SW4STM32 ProjectManager.TargetToolchain=SW4STM32
ProjectManager.ToolChainLocation=/home/wn/workspace-stm32/ttt2/cube/output/ttt2 ProjectManager.ToolChainLocation=/home/wn/workspace-stm32/ttt2/cube/output/ttt2
ProjectManager.UnderRoot=true ProjectManager.UnderRoot=true
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false,2-MX_ADC1_Init-ADC1-false,3-MX_SPI1_Init-SPI1-false ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false,2-MX_ADC1_Init-ADC1-false,3-MX_SPI1_Init-SPI1-false,4-MX_TIM1_Init-TIM1-false
RCC.ADCFreqValue=12000000 RCC.ADCFreqValue=12000000
RCC.ADCPresc=RCC_ADCPCLK2_DIV6 RCC.ADCPresc=RCC_ADCPCLK2_DIV6
RCC.AHBFreq_Value=72000000 RCC.AHBFreq_Value=72000000
@ -184,12 +190,21 @@ SH.GPXTI4.0=GPIO_EXTI4
SH.GPXTI4.ConfNb=1 SH.GPXTI4.ConfNb=1
SH.GPXTI5.0=GPIO_EXTI5 SH.GPXTI5.0=GPIO_EXTI5
SH.GPXTI5.ConfNb=1 SH.GPXTI5.ConfNb=1
SH.S_TIM1_CH1.0=TIM1_CH1,Output Compare1 CH1
SH.S_TIM1_CH1.ConfNb=1
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16 SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16
SPI1.CLKPhase=SPI_PHASE_2EDGE SPI1.CLKPhase=SPI_PHASE_2EDGE
SPI1.CLKPolarity=SPI_POLARITY_HIGH SPI1.CLKPolarity=SPI_POLARITY_HIGH
SPI1.CalculateBaudRate=4.5 MBits/s SPI1.CalculateBaudRate=4.5 MBits/s
SPI1.IPParameters=Mode,CalculateBaudRate,BaudRatePrescaler,CLKPolarity,CLKPhase SPI1.IPParameters=Mode,CalculateBaudRate,BaudRatePrescaler,CLKPolarity,CLKPhase
SPI1.Mode=SPI_MODE_MASTER SPI1.Mode=SPI_MODE_MASTER
TIM1.IPParameters=OCMode_1,Pulse-Output Compare1 CH1,Prescaler,Period
TIM1.OCMode_1=TIM_OCMODE_TOGGLE
TIM1.Period=1000
TIM1.Prescaler=36
TIM1.Pulse-Output\ Compare1\ CH1=10000
VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick VP_SYS_VS_Systick.Signal=SYS_VS_Systick
VP_TIM1_VS_ClockSourceINT.Mode=Internal
VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
board=ttt2 board=ttt2

View File

@ -45,6 +45,8 @@
#define LED_GPIO_Port GPIOC #define LED_GPIO_Port GPIOC
#define ERROR_Pin GPIO_PIN_14 #define ERROR_Pin GPIO_PIN_14
#define ERROR_GPIO_Port GPIOC #define ERROR_GPIO_Port GPIOC
#define BUZZER_Pin GPIO_PIN_8
#define BUZZER_GPIO_Port GPIOA
#define ROTARY_B_Pin GPIO_PIN_3 #define ROTARY_B_Pin GPIO_PIN_3
#define ROTARY_B_GPIO_Port GPIOB #define ROTARY_B_GPIO_Port GPIOB
#define ROTARY_A_Pin GPIO_PIN_4 #define ROTARY_A_Pin GPIO_PIN_4

View File

@ -77,7 +77,7 @@
/*#define HAL_SMARTCARD_MODULE_ENABLED */ /*#define HAL_SMARTCARD_MODULE_ENABLED */
#define HAL_SPI_MODULE_ENABLED #define HAL_SPI_MODULE_ENABLED
/*#define HAL_SRAM_MODULE_ENABLED */ /*#define HAL_SRAM_MODULE_ENABLED */
/*#define HAL_TIM_MODULE_ENABLED */ #define HAL_TIM_MODULE_ENABLED
/*#define HAL_UART_MODULE_ENABLED */ /*#define HAL_UART_MODULE_ENABLED */
/*#define HAL_USART_MODULE_ENABLED */ /*#define HAL_USART_MODULE_ENABLED */
/*#define HAL_WWDG_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */

View File

@ -7,6 +7,72 @@
#include "stm32f1xx_hal.h" #include "stm32f1xx_hal.h"
#include <PontCoopScheduler.h>
#include "alarm.h"
extern TIM_HandleTypeDef htim1;
typedef struct {
uint16_t f;
uint8_t inUse;
} tBuzzerHandle;
tBuzzerHandle buzzerHandle;
static void startBuzzer(uint16_t f) {
HAL_TIM_OC_Stop(&htim1, TIM_CHANNEL_1);
__HAL_TIM_SET_COUNTER(&htim1, 0);
__HAL_TIM_SET_AUTORELOAD(&htim1, f);
HAL_TIM_OC_Start(&htim1, TIM_CHANNEL_1);
}
static void stopBuzzer() {
HAL_TIM_OC_Stop(&htim1, TIM_CHANNEL_1);
}
void buzzerTest(void *handle) {
static enum {BUZZER_OFF, BUZZER_LOW, BUZZER_HIGH} state = BUZZER_OFF;
switch (state) {
case BUZZER_OFF:
HAL_TIM_OC_Stop(&htim1, TIM_CHANNEL_1);
state = BUZZER_LOW;
break;
case BUZZER_LOW:
HAL_TIM_OC_Stop(&htim1, TIM_CHANNEL_1);
__HAL_TIM_SET_COUNTER(&htim1, 0);
__HAL_TIM_SET_AUTORELOAD(&htim1, 2000);
HAL_TIM_OC_Start(&htim1, TIM_CHANNEL_1);
state = BUZZER_HIGH;
break;
case BUZZER_HIGH:
HAL_TIM_OC_Stop(&htim1, TIM_CHANNEL_1);
__HAL_TIM_SET_COUNTER(&htim1, 0);
__HAL_TIM_SET_AUTORELOAD(&htim1, 1000);
HAL_TIM_OC_Start(&htim1, TIM_CHANNEL_1);
state = BUZZER_OFF;
break;
}
}
void stopBuzzing(void *handle) {
stopBuzzer();
}
void buzz(void *handle) {
tBuzzerHandle *lBuzzerHandle = (tBuzzerHandle*) handle;
startBuzzer(lBuzzerHandle->f);
schAdd(stopBuzzing, NULL, 100, 0);
}
void alarmInit() {
// schAdd(buzzerTest, NULL, 0, 5000);
}
void blink(void *handle) { void blink(void *handle) {
@ -14,11 +80,24 @@ void blink(void *handle) {
} }
void enableAlarm() {
void enableAlarm(tAlarmType alarmType) {
schAdd(blink, NULL, 0, 100); schAdd(blink, NULL, 0, 100);
uint16_t f;
if (alarmType == TIME_ALARM) {
buzzerHandle.f = 4000;
} else {
buzzerHandle.f = 2000;
}
if (buzzerHandle.inUse == 0) {
buzzerHandle.inUse = 1;
schAdd(buzz, &buzzerHandle, 0, 10000);
}
} }
void disableAlarm() { void disableAlarm() {
schDel(blink, NULL); schDel(blink, NULL);
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, RESET); HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, RESET);
schDel(buzz, &buzzerHandle);
} }

View File

@ -9,7 +9,13 @@
#define ALARM_H_ #define ALARM_H_
void enableAlarm(); typedef enum {
TIME_ALARM,
TEMPERATURE_ALARM
} tAlarmType;
void alarmInit();
void enableAlarm(tAlarmType alarmType);
void disableAlarm(); void disableAlarm();

View File

@ -82,7 +82,7 @@ void eepromWrite(uint16_t addr, uint8_t *buf, uint8_t len) {
eepromWren(); eepromWren();
__EEPROM_CS(LOW); __EEPROM_CS(LOW);
HAL_SPI_Transmit(&hspi1, &msg, ((uint16_t)(len+3)), HAL_MAX_DELAY); HAL_SPI_Transmit(&hspi1, &msg, ((uint16_t)(len+3+1)), HAL_MAX_DELAY);
__EEPROM_CS(HIGH); __EEPROM_CS(HIGH);
} }
@ -98,7 +98,7 @@ void eepromRead(uint16_t addr, uint8_t *buf, uint8_t len) {
rxMsg; rxMsg;
__EEPROM_CS(LOW); __EEPROM_CS(LOW);
HAL_SPI_TransmitReceive(&hspi1, &txMsg, &rxMsg, ((uint16_t)(len+3)), HAL_MAX_DELAY); HAL_SPI_TransmitReceive(&hspi1, &txMsg, &rxMsg, ((uint16_t)(len+3+1)), HAL_MAX_DELAY);
__EEPROM_CS(HIGH); __EEPROM_CS(HIGH);
memcpy(buf, rxMsg.data, len); memcpy(buf, rxMsg.data, len);

View File

@ -11,7 +11,7 @@
#include "stm32f1xx_hal.h" #include "stm32f1xx_hal.h"
#define STORAGE_ADDRESS 0x10 #define STORAGE_ADDRESS 0x20
void eepromWrite(uint16_t addr, uint8_t *buf, uint8_t len); void eepromWrite(uint16_t addr, uint8_t *buf, uint8_t len);
void eepromRead(uint16_t addr, uint8_t *buf, uint8_t len); void eepromRead(uint16_t addr, uint8_t *buf, uint8_t len);

View File

@ -15,7 +15,8 @@
const uint32_t STORAGE_MAGIC = 0xaffe0002; const uint32_t STORAGE_MAGIC = 0xaffe000a;
@ -65,7 +66,7 @@ void updateDisplay(void *handle) {
// sprintf(buf, "%d %d %d", c, i, i-h); // sprintf(buf, "%d %d %d", c, i, i-h);
// h = i; // h = i;
// c++; // c++;
// LED_P8x16Str(0, 6, buf); LED_P8x16Str(0, 6, buf);
} }
@ -76,13 +77,16 @@ void hmiInit() {
display.targetTime = storage.savedTime; display.targetTime = storage.savedTime;
} else { } else {
storage.magic = STORAGE_MAGIC; storage.magic = STORAGE_MAGIC;
storage.savedTemperature = 0; storage.savedTemperature = 80;
storage.savedTime = 0; storage.savedTime = 90;
eepromWrite(STORAGE_ADDRESS, &storage, sizeof(storage)); eepromWrite(STORAGE_ADDRESS, &storage, sizeof(storage));
// eepromRead(STORAGE_ADDRESS, &storage, sizeof(storage));
display.targetTemperature = storage.savedTemperature;
display.targetTime = storage.savedTime;
} }
schAdd(updateDisplay, &display, 0, 250); schAdd(updateDisplay, &display, 0, 250);
} }
void clearSetMode(void *handle) { void clearSetMode(void *handle) {

View File

@ -23,7 +23,7 @@
#include "oled.h" #include "oled.h"
#include "timer.h" #include "timer.h"
#include "alarm.h"
void my_setup_1() { void my_setup_1() {
@ -47,7 +47,7 @@ void my_setup_2() {
hmiInit(); hmiInit();
timerInit(); timerInit();
oledInit(); oledInit();
alarmInit();
} }

View File

@ -5,9 +5,11 @@
* Author: wn * Author: wn
*/ */
#include <hmi.h> #include "hmi.h"
#include "timer.h" #include "timer.h"
#include "alarm.h" #include "alarm.h"
#include <PontCoopScheduler.h>
extern tDisplay display; extern tDisplay display;
@ -32,7 +34,7 @@ void secondTick(void *handle) {
case RUNNING: case RUNNING:
lDisplay->currentTime -= 1; lDisplay->currentTime -= 1;
if (lDisplay->currentTime == 0) { if (lDisplay->currentTime == 0) {
enableAlarm(); enableAlarm(TIME_ALARM);
lDisplay->timerState = OVERRUN; lDisplay->timerState = OVERRUN;
} }
break; break;