STM32F07VET6的板子关于设置GPIO 口 TIM4_CH1的BUZ_Pin延时与中断。

2019-07-20 23:35发布

新人求助,关于STM32F07VET6的板子,用pwm设置无源蜂鸣器开机发出“滴,滴,滴”的声音。
但是在设置MX_TIM4_Init的时候,把lcd屏和BUZ的TIM4 GPIO Configuration 写在一起了。不知道如何分开,才能做到蜂鸣器不响后,lcd还亮着。程序如下,麻烦大神帮忙看看,给点建议最好。





freertos.c

/* Includes ------------------------------------------------------------------*/
#include "FreeRTOS.h"
#include "task.h"
#include "cmsis_os.h"

/* USER CODE BEGIN Includes */     
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "stm32f4xx_hal.h"
#include "glcd.h"
#include "gui.h"
#include "pwrmgr.h"
#include "spi_flash.h"
#include "ov9655.h"

/* USER CODE END Includes */

/* Variables -----------------------------------------------------------------*/
osThreadId defaultTaskHandle;

/* USER CODE BEGIN Variables */
char g_Buf[G_BUF_L];

__IO uint16_t g_adcBuf[4];

extern UART_HandleTypeDef huart1;
extern __IO uint16_t g_FlashID;
extern ADC_HandleTypeDef hadc1;
extern I2C_HandleTypeDef hi2c1;

/* USER CODE END Variables */

/* Function prototypes -------------------------------------------------------*/
void StartDefaultTask(void const * argument);

extern void MX_FATFS_Init(void);
extern void MX_USB_DEVICE_Init(void);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */

/* USER CODE BEGIN FunctionPrototypes */

/* USER CODE END FunctionPrototypes */

/* Hook prototypes */

/* Init FreeRTOS */

void MX_FREERTOS_Init(void) {
  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* USER CODE BEGIN RTOS_MUTEX */
  /* add mutexes, ... */
  /* USER CODE END RTOS_MUTEX */

  /* USER CODE BEGIN RTOS_SEMAPHORES */
  /* add semaphores, ... */
  /* USER CODE END RTOS_SEMAPHORES */

  /* USER CODE BEGIN RTOS_TIMERS */
  /* start timers, add new ones, ... */
  /* USER CODE END RTOS_TIMERS */

  /* Create the thread(s) */
  /* definition and creation of defaultTask */
  osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
  defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);

  /* USER CODE BEGIN RTOS_THREADS */
  /* add threads, ... */       
                       
  /* USER CODE END RTOS_THREADS */

  /* USER CODE BEGIN RTOS_QUEUES */
  /* add queues, ... */
  /* USER CODE END RTOS_QUEUES */
}

/* StartDefaultTask function */
void StartDefaultTask(void const * argument)
{
  /* init code for FATFS */
  MX_FATFS_Init();

  /* init code for USB_DEVICE */
  MX_USB_DEVICE_Init();

  /* USER CODE BEGIN StartDefaultTask */
        HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&g_adcBuf, sizeof(g_adcBuf));
       
  LowLCD_Init();//òo&#190;§&#198;á3&#245;ê&#188;&#187;ˉ3ìDò

                DrawFill(0, 0, LCD_WID, LCD_HGT, RED16);
       
    //DrawRGB(0, 160, 120, 160, gImage_lb_120160);
          Draw8x16_Str_Color(0,0,"F4 Camera V1",  RED16,WHITE16);
          Draw8x16_Str_Color(0,200,"    4Bootloader",  BLUE16,WHITE16);
          Draw8x16_Str_Color(0,224,"Copyright All Resevered. ",  BLUE16,WHITE16);
       
        sprintf(g_Buf, "%s ", (W25Q128_CHIPID==g_FlashID)?"SPI Flash 25Q128":"Unknown Flash");                       
        HAL_UART_Transmit_DMA(&huart1, g_Buf, strlen(g_Buf));       
       
        Dec_On();
       
        //        OV9655_DEVICE_WRITE_ADDRESS
        //OV9655_DEVICE_READ_ADDRESS
               
        //        HAL_I2C_Master_Transmit(&hi2c1,
        g_Buf[0]=OV9655_MIDH;
        HAL_I2C_Master_Receive(&hi2c1,         OV9655_DEVICE_READ_ADDRESS, g_Buf, 2, 1000);
       
       
  /* Infinite loop */
    for(;;)
  {       
       
                HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&g_adcBuf, sizeof(g_adcBuf));
               
    osDelay(500);
                HAL_GPIO_TogglePin(LED_R_GPIO_Port, LED_R_Pin);
    osDelay(500);
                HAL_GPIO_TogglePin(LED_G_GPIO_Port, LED_G_Pin);       
    osDelay(500);
                HAL_GPIO_TogglePin(LED_B_GPIO_Port, LED_B_Pin);                       
                       
                sprintf(g_Buf, "%08X %08X %08X %08X %d ", g_adcBuf[0], g_adcBuf[1], g_adcBuf[2], g_adcBuf[3],               
                HAL_GPIO_ReadPin(nCHG_GPIO_Port, nCHG_Pin)                );                               
                HAL_UART_Transmit_DMA(&huart1, g_Buf, strlen(g_Buf));         
        }




tim.c

#include "tim.h"
#include "gpio.h"
/* USER CODE BEGIN 0 */


/* USER CODE END 0 */

TIM_HandleTypeDef htim4;

/* TIM4 init function */
void MX_TIM4_Init(void)
{

  TIM_MasterConfigTypeDef sMasterConfig;
  TIM_OC_InitTypeDef sConfigOC;
  htim4.Instance = TIM4;
  htim4.Init.Prescaler = 1;
  htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim4.Init.Period = 6250;
  htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4;
  HAL_TIM_PWM_Init(&htim4);

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig);

  sConfigOC.OCMode = TIM_OCMODE_PWM1;

  sConfigOC.Pulse = 5000;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1);

  HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2);

}
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm)
{

  GPIO_InitTypeDef GPIO_InitStruct;
  if(htim_pwm->Instance==TIM4)
  {
  /* USER CODE BEGIN TIM4_MspInit 0 */

  /* USER CODE END TIM4_MspInit 0 */
    /* Peripheral clock enable */
    __TIM4_CLK_ENABLE();

    /**TIM4 GPIO Configuration   
    PD12     ------> TIM4_CH1
    PD13     ------> TIM4_CH2
    */
    GPIO_InitStruct.Pin = BUZ_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF2_TIM4;
    HAL_GPIO_Init(BUZ_GPIO_Port, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = BL_EN_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLDOWN;
    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF2_TIM4;
    HAL_GPIO_Init(BL_EN_GPIO_Port, &GPIO_InitStruct);

  /* USER CODE BEGIN TIM4_MspInit 1 */
       
       
       
  /* USER CODE END TIM4_MspInit 1 */
    }
        }
          
void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* htim_pwm)
{

  if(htim_pwm->Instance==TIM4)
  {
  /* USER CODE BEGIN TIM4_MspDeInit 0 */

  /* USER CODE END TIM4_MspDeInit 0 */
    /* Peripheral clock disable */
    __TIM4_CLK_DISABLE();

    /**TIM4 GPIO Configuration   
    PD12     ------> TIM4_CH1
    PD13     ------> TIM4_CH2
    */
    HAL_GPIO_DeInit(GPIOD, BUZ_Pin|BL_EN_Pin);

  }
  /* USER CODE BEGIN TIM4_MspDeInit 1 */

  /* USER CODE END TIM4_MspDeInit 1 */
}




main.c

#include "stm32f4xx_hal.h"
#include "cmsis_os.h"
#include "adc.h"
#include "dcmi.h"
#include "dma.h"
#include "fatfs.h"
#include "i2c.h"
#include "spi.h"
#include "tim.h"
#include "usart.h"
#include "usb_device.h"
#include "gpio.h"
#include "fsmc.h"

/* USER CODE BEGIN Includes */
#include "glcd.h"
#include "spi_flash.h"
/* USER CODE END Includes */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
void MX_FREERTOS_Init(void);

/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/

/* USER CODE END PFP */

/* USER CODE BEGIN 0 */
osMutexDef (MutexLcd);
osMutexId mutexLcd_id;

osMutexDef (MutexSpi2);
osMutexId mutexSpi2_id;

__IO uint16_t g_FlashID = 0;
/* USER CODE END 0 */

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_ADC1_Init();
  MX_DCMI_Init();
  MX_FSMC_Init();
  MX_I2C1_Init();
  MX_SPI2_Init();
  MX_TIM4_Init();
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();

  /* USER CODE BEGIN 2 */
                mutexLcd_id = osMutexCreate (osMutex (MutexLcd));
                mutexSpi2_id = osMutexCreate (osMutex (MutexSpi2));

        HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);                       
        HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);       
       
                g_FlashID = W25X_Read_ID();
                __NOP();
        g_FlashID = W25X_Read_ID();
       
  /* USER CODE END 2 */

  /* Call init function for freertos objects (in freertos.c) */
  MX_FREERTOS_Init();

  /* Start scheduler */
  osKernelStart();

  /* We should never get here as control is now taken by the scheduler */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

}

/** System Clock Configuration
*/
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

  __PWR_CLK_ENABLE();

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 15;
  RCC_OscInitStruct.PLL.PLLN = 144;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 5;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);

  HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_2);

  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);
}

/* USER CODE BEGIN 4 */




/* USER CODE END 4 */

#ifdef USE_FULL_ASSERT

/**
   * @brief Reports the name of the source file and the source line number
   * where the assert_param error has occurred.
   * @param file: pointer to the source file name
   * @param line: assert_param error line source number
   * @retval None
   */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
    ex: printf("Wrong parameters value: file %s on line %d ", file, line) */
  /* USER CODE END 6 */

}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。