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 ERROR_Pin GPIO_PIN_14
#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_GPIO_Port GPIOB
#define ROTARY_A_Pin GPIO_PIN_4

View File

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

View File

@ -42,6 +42,8 @@ ADC_HandleTypeDef hadc1;
SPI_HandleTypeDef hspi1;
TIM_HandleTypeDef htim1;
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
@ -53,6 +55,10 @@ void Error_Handler(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_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 */
/* Private function prototypes -----------------------------------------------*/
@ -82,6 +88,7 @@ int main(void)
MX_GPIO_Init();
MX_ADC1_Init();
MX_SPI1_Init();
MX_TIM1_Init();
/* 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
* Analog
* 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 END 1 */

View File

@ -22,28 +22,31 @@ Mcu.IP1=NVIC
Mcu.IP2=RCC
Mcu.IP3=SPI1
Mcu.IP4=SYS
Mcu.IPNb=5
Mcu.IP5=TIM1
Mcu.IPNb=6
Mcu.Name=STM32F103C(8-B)Tx
Mcu.Package=LQFP48
Mcu.Pin0=PC13-TAMPER-RTC
Mcu.Pin1=PC14-OSC32_IN
Mcu.Pin10=PB3
Mcu.Pin11=PB4
Mcu.Pin12=PB5
Mcu.Pin13=PB6
Mcu.Pin14=PB7
Mcu.Pin15=PB8
Mcu.Pin16=PB9
Mcu.Pin17=VP_SYS_VS_Systick
Mcu.Pin10=PA14
Mcu.Pin11=PB3
Mcu.Pin12=PB4
Mcu.Pin13=PB5
Mcu.Pin14=PB6
Mcu.Pin15=PB7
Mcu.Pin16=PB8
Mcu.Pin17=PB9
Mcu.Pin18=VP_SYS_VS_Systick
Mcu.Pin19=VP_TIM1_VS_ClockSourceINT
Mcu.Pin2=PD0-OSC_IN
Mcu.Pin3=PD1-OSC_OUT
Mcu.Pin4=PA0-WKUP
Mcu.Pin5=PA5
Mcu.Pin6=PA6
Mcu.Pin7=PA7
Mcu.Pin8=PA13
Mcu.Pin9=PA14
Mcu.PinsNb=18
Mcu.Pin8=PA8
Mcu.Pin9=PA13
Mcu.PinsNb=20
Mcu.UserConstants=
Mcu.UserName=STM32F103C8Tx
MxCube.Version=4.16.1
@ -72,6 +75,9 @@ PA6.Mode=Full_Duplex_Master
PA6.Signal=SPI1_MISO
PA7.Mode=Full_Duplex_Master
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.GPIO_Label=ROTARY_B
PB3.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
@ -152,7 +158,7 @@ ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=SW4STM32
ProjectManager.ToolChainLocation=/home/wn/workspace-stm32/ttt2/cube/output/ttt2
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.ADCPresc=RCC_ADCPCLK2_DIV6
RCC.AHBFreq_Value=72000000
@ -184,12 +190,21 @@ SH.GPXTI4.0=GPIO_EXTI4
SH.GPXTI4.ConfNb=1
SH.GPXTI5.0=GPIO_EXTI5
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.CLKPhase=SPI_PHASE_2EDGE
SPI1.CLKPolarity=SPI_POLARITY_HIGH
SPI1.CalculateBaudRate=4.5 MBits/s
SPI1.IPParameters=Mode,CalculateBaudRate,BaudRatePrescaler,CLKPolarity,CLKPhase
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.Signal=SYS_VS_Systick
VP_TIM1_VS_ClockSourceINT.Mode=Internal
VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
board=ttt2

View File

@ -45,6 +45,8 @@
#define LED_GPIO_Port GPIOC
#define ERROR_Pin GPIO_PIN_14
#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_GPIO_Port GPIOB
#define ROTARY_A_Pin GPIO_PIN_4

View File

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

View File

@ -7,6 +7,72 @@
#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) {
@ -14,11 +80,24 @@ void blink(void *handle) {
}
void enableAlarm() {
void enableAlarm(tAlarmType alarmType) {
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() {
schDel(blink, NULL);
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, RESET);
schDel(buzz, &buzzerHandle);
}

View File

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

View File

@ -82,7 +82,7 @@ void eepromWrite(uint16_t addr, uint8_t *buf, uint8_t len) {
eepromWren();
__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);
}
@ -98,7 +98,7 @@ void eepromRead(uint16_t addr, uint8_t *buf, uint8_t len) {
rxMsg;
__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);
memcpy(buf, rxMsg.data, len);

View File

@ -11,7 +11,7 @@
#include "stm32f1xx_hal.h"
#define STORAGE_ADDRESS 0x10
#define STORAGE_ADDRESS 0x20
void eepromWrite(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);
// h = i;
// c++;
// LED_P8x16Str(0, 6, buf);
LED_P8x16Str(0, 6, buf);
}
@ -76,13 +77,16 @@ void hmiInit() {
display.targetTime = storage.savedTime;
} else {
storage.magic = STORAGE_MAGIC;
storage.savedTemperature = 0;
storage.savedTime = 0;
storage.savedTemperature = 80;
storage.savedTime = 90;
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);
}
void clearSetMode(void *handle) {

View File

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

View File

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