Vladimir N. Shilov 2 лет назад
Родитель
Сommit
0becacb988
3 измененных файлов с 51 добавлено и 5 удалено
  1. 5 2
      inc/board.h
  2. 43 3
      src/board.c
  3. 3 0
      src/main.c

+ 5 - 2
inc/board.h

@@ -13,9 +13,10 @@ typedef enum {
 
 
 /* Defines */
-#define FRAMEBUFFER_ROTATE
-
 /* Exported macros */
+#define BUZER_ON    TIM1->CR1 |= TIM_CR1_CEN
+#define BUZER_OFF   TIM1->CR1 &= ~TIM_CR1_CEN
+
 /* Constants */
 /* Variables */
 extern uint8_t display_Buffer[];
@@ -33,5 +34,7 @@ void EXTI4_15_IRQHandler(void);
 void DMA1_Channel2_3_IRQHandler(void);
 void I2C1_IRQHandler(void);
 void display_test(void);
+void buzer_On(void);
+void buzer_Off(void);
 
 #endif /* _BOARD_H_ */

+ 43 - 3
src/board.c

@@ -1,6 +1,7 @@
 #include "main.h"
 
 /* private defines */
+#define FRAMEBUFFER_ROTATE
 #define DISPLAY_COLUMNS   24
 
 /* private macros */
@@ -21,7 +22,7 @@ static void I2C1_Init(void);
 static void SPI1_Init(void);
 static void GPIO_SPI_SW(void);
 static void GPIO_SPI_HW(void);
-//static void TIM1_Init(void);
+static void TIM1_Init(void);
 //static void TIM3_Init(void);
 //static void TIM14_Init(void);
 //static void TIM16_Init(void);
@@ -43,7 +44,7 @@ void Board_Init(void)
   /* Main peripheral clock enable */
   RCC->AHBENR |= (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_DMAEN);
   RCC->APB1ENR = (RCC_APB1ENR_PWREN | RCC_APB1ENR_I2C1EN); // | RCC_APB1ENR_TIM14EN| RCC_APB1ENR_TIM3EN);
-  RCC->APB2ENR = (RCC_APB2ENR_SYSCFGEN | RCC_APB2ENR_SPI1EN); // | RCC_APB2ENR_TIM1EN | RCC_APB2ENR_TIM16EN | RCC_APB2ENR_TIM17EN);
+  RCC->APB2ENR = (RCC_APB2ENR_SYSCFGEN | RCC_APB2ENR_SPI1EN | RCC_APB2ENR_TIM1EN); // | RCC_APB2ENR_TIM16EN | RCC_APB2ENR_TIM17EN);
 
   /* Peripheral interrupt init*/
   /* RCC_IRQn interrupt configuration */
@@ -71,7 +72,7 @@ void Board_Init(void)
   SPI1->CR1 |= SPI_CR1_SPE;
 //  Flag.SPI_TX_End = 1;
 
-//  TIM1_Init();
+  TIM1_Init();
 //  TIM3_Init();
 //  TIM14_Init();
 //  TIM16_Init();
@@ -160,6 +161,8 @@ static void GPIO_Init(void)
                   |GPIO_OSPEEDR_OSPEEDR6|GPIO_OSPEEDR_OSPEEDR7);
   // Open Drain
   GPIOB->OTYPER = (GPIO_OTYPER_OT_6|GPIO_OTYPER_OT_7);
+  // AF2 for PA8
+  GPIOA->AFR[1] = 0x2;
   // AF1 for PB6 & PB7
   GPIOB->AFR[0] = (0x1<<24) | (0x1<<28);
 
@@ -261,6 +264,29 @@ void display_Init(void) {
   display_Fill(0x0);
 }
 
+/**
+  * @brief TIM1 Initialization Function
+  * @param None
+  * @retval None
+  */
+static void TIM1_Init(void)
+{
+  /* target clock */
+  TIM1->PSC = 47; // 1 MHz counter
+  TIM1->ARR = 1000; // 1 KHz, auto reload value
+  TIM1->CR1 = TIM_CR1_ARPE;
+  // initial pwm value
+  TIM1->CCR1 = 500; // PWM 50% - max volume
+  // pwm mode 1 for 4 chanels
+  TIM1->CCMR1 = (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE);
+  // reset int flag - not needed, int unused
+  //TIM1->SR |= TIM_SR_UIF;
+  TIM1->BDTR = TIM_BDTR_MOE; // enable main output
+  TIM1->EGR = TIM_EGR_UG; // force timer update
+  /* TIM1 CC_EnableChannel */
+  TIM1->CCER = TIM_CCER_CC1E;
+}
+
 /**
  * @brief Set HT1632C PWM Value
  * @param pwm value in 0-15
@@ -509,6 +535,20 @@ void display_Fill(uint8_t pattern) {
   display_WriteBuffer();
 }
 
+/**
+ * @brief Buzzer control: On.
+ */
+void buzer_On(void) {
+  BUZER_ON;
+}
+
+/**
+ * @brief Buzzer control: Off.
+ */
+void buzer_Off(void) {
+  BUZER_OFF;
+}
+
 /**
   * @brief This function handles EXTI line 4 to 15 interrupts.
   */

+ 3 - 0
src/main.c

@@ -37,6 +37,9 @@ int main(void)
   /* Initialize Scheduler */
   RTOS_Init();
 //  RTOS_SetTask(Show_MMSS, 1000, 1000);
+  buzer_On();
+  tdelay_ms(500);
+  buzer_Off();
 
   /* Real-Time clock */
   RTC_Init();