stm32f103c8t6



```c

#include "stm32f10x.h"                  // Device header
#include <stdio.h>
#include "Delay.h"                  // Device header



int s,t;//¶¨ÒåsΪ¾Ã×ø¼ÆÊýÖµ£¬

int main(void)
    
{
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //¿ªÆôʱÖÓ

    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //ÉèÖÃGPIOµÄ5ºÅÒý½Å
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÉèÖÃÎªÍÆÍìÊä³ö
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //ÉèÖÃGPIOµÄÊä³öËÙ¶ÈΪ50MHz
    GPIO_Init(GPIOC, &GPIO_InitStructure); //³õʼ»¯GPIO
//·äÃùÆ÷Çý¶¯´úÂë


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //ÉèÖÃGPIOµÄ6ºÅÒý½Å
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉèÖÃΪÉÏÀ­ÊäÈëģʽ
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //
    GPIO_Init(GPIOC, &GPIO_InitStructure); //


  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

    
    GPIO_SetBits(GPIOC,GPIO_Pin_5);//¿ªÊ¼¹©µç
    Delay_s(5);
    GPIO_ResetBits(GPIOC,GPIO_Pin_5);//Í£Ö¹¹©µç
    //¿ª»ú·äÃùÆ÷
    
  
    while(1)
        
    {
        GPIO_SetBits(GPIOC, GPIO_Pin_13);
    Delay_s(1);
    GPIO_ResetBits(GPIOC, GPIO_Pin_13);
    Delay_s(1);
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)==0)
    {
        s=s+1;
        Delay_s(1);
            }
    else
    {
        t=t+1;
        Delay_s(1);
    }        //¼ÆÊ±Ä£¿é
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)==0)
    {
    if(s>=5400)
      {
        GPIO_SetBits(GPIOC,GPIO_Pin_5);
        Delay_s(5);
        GPIO_ResetBits(GPIOC,GPIO_Pin_5);//Í£Ö¹¹©µç
      }
    }        
    else
      {
    if(t>=300)
    {
      GPIO_SetBits(GPIOC,GPIO_Pin_5);
        Delay_s(5);
        GPIO_ResetBits(GPIOC,GPIO_Pin_5);//Í£Ö¹¹©µç
     Delay_s(5);
        s=0;
    t=0;    
    
    }}}}




用stm32f103c8t6驱动蜂鸣器,代码似乎运行不起来

基于new bing的编写参考:
你好!根据你提供的代码逐行分析:

  • 首先,需要确认所使用的头文件是否正确,是否包含了所需的寄存器和库函数声明。确保头文件路径正确。
  • 确定了时钟使能并初始化了 GPIOC 的 Pin5 和 Pin13 引脚,同时也初始化了 GPIOC 的 Pin6 引脚作为输入。但是在代码中读取输入引脚输入电平时使用的却是“GPIOB”的引脚。这里需要注意是否应该改成使用“GPIOC”的引脚。
  • 在主循环中,使用了一个死循环,通过 GPIOC 的引脚13 来控制蜂鸣器的发声,同时每隔一秒钟判断一次输入引脚输入电平,如果输入引脚为低电平则对计数器 s 进行累加,否则对计数器 t 进行累加。当计数器 s 大于等于 5400 时,开启蜂鸣器 5 秒钟。当计数器 t 大于等于 300 时,则开启蜂鸣器 5 秒钟,并将计数器 s 和 t 归零。
  • 可以考虑在使用蜂鸣器时,使 PB5 引脚和 PC5 引脚无需共用,避免不必要的干扰。
  • 在此段代码中使用的 Delay_s 函数如果没有声明和定义,则需要检查其是否存在以及是否编译通过。

希望以上分析能够帮助你解决问题。
请注意,以下代码仅供参考,可能需要根据实际情况进行修改。

#include "stm32f10x.h"
#include "Delay.h"

int s, t;

int main(void)
{
    // 使能时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOB, ENABLE);

    // 配置 GPIOC Pin5 引脚
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    // 配置 GPIOC Pin13 引脚
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    // 配置 GPIOC Pin6 引脚
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    s = 0;
    t = 0;

    while(1)
    {
        // 控制蜂鸣器的发声
        GPIO_SetBits(GPIOC, GPIO_Pin_13);
        Delay_s(1);
        GPIO_ResetBits(GPIOC, GPIO_Pin_13);
        Delay_s(1);

        // 判断输入引脚输入电平,并对计数器进行累加
        if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6) == Bit_RESET)
        {
            s += 1;
            Delay_s(1);
        }
        else
        {
            t += 1;
            Delay_s(1);
        }

        // 当计数器 s 大于等于 5400 时,开启蜂鸣器 5 秒钟
        if(s >= 5400)
        {
            GPIO_SetBits(GPIOC, GPIO_Pin_5);
            Delay_s(5);
            GPIO_ResetBits(GPIOC, GPIO_Pin_5);
            s = 0;
        }

        // 当计数器 t 大于等于 300 时,开启蜂鸣器 5 秒钟,并将计数器 s 和 t 归零
        if(t >= 300)
        {
            GPIO_SetBits(GPIOB, GPIO_Pin_5);
            Delay_s(5);
            GPIO_ResetBits(GPIOB, GPIO_Pin_5);
            Delay_s(5);
            s = 0;
            t = 0;    
        }
    }
}


答案参考ChatGPT Plus版,整理汇总。希望能帮助你解决问题
从您提供的代码来看,存在一些问题可能导致代码无法正确运行:

  1. 缺少头文件:在代码开头部分,需要包含相关的头文件,例如 "stm32f10x_gpio.h" 和 "stm32f10x_rcc.h",以便正确使用STM32的库函数。

  2. 引脚初始化错误:在初始化蜂鸣器引脚时,您使用了 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5,但根据代码注释,应该是GPIOC的第13个引脚(即 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13)。

  3. 输入引脚读取错误:在条件判断中使用了 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6),但您没有初始化GPIOB的相应引脚,而应该是使用GPIOC的第6个引脚。

  4. 延迟函数未实现:根据代码中的 Delay_s(1)Delay_s(5),需要自定义延迟函数Delay_s来实现对应的延迟操作。

请注意以上问题并进行相应的修正。同时,确保您的开发环境中已正确配置并连接STM32开发板,以便进行程序的下载和运行。

你好,你这个代码也没排版,参考个别人的代码进行调试吧,你的蜂鸣器没响的原因是你没给方波,你设置输入的代码第29行不用写,输入模式没有速度一说。还有你的这个Delay_s模拟得不够好,导致你的蜂鸣器方波没能很好体现出来,你参考前辈的代码试试看呢
https://blog.csdn.net/chenhuanqiangnihao/article/details/113384991
https://blog.csdn.net/visual_eagle/article/details/108662642

  • 看下这篇博客,也许你就懂了,链接:stm32f103c8t6
  • 除此之外, 这篇博客: 基于stm32f103c8t6浊度计中的 前言 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 本次设计的基于stm32f103c8t6浊度计主要由硬件部分加软件部分组成
    硬件部分主要是IR333光源发射部分+红外接收管光源接受部分+放大电路+stm32f103c8t6主控芯片+lcd1602显示模块组成
    软件部分主要是通过stm32cubemx配置管脚之后添加adc通道函数、lcd1602写命令函数、lcd1602读数据函数等生成的

  • 以下回答由chatgpt基于相关博客总结生成:

    针对该问题,可以采用如下步骤:

    1. 确定LED连接单片机的引脚,在代码中定义引脚对应的端口和引脚号。例如,若LED连接单片机的PA5引脚,则可定义为:
    #define LED_GPIO_Port GPIOA
    #define LED_Pin GPIO_PIN_5
    
    1. 在初始化代码中,配置引脚为输出模式:
    static void MX_GPIO_Init(void)
    {
    
      /* GPIO Ports Clock Enable */
      __HAL_RCC_GPIOA_CLK_ENABLE();
    
      /*Configure GPIO pin Output Level */
      HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
    
      /*Configure GPIO pin : LED_Pin */
      GPIO_InitTypeDef GPIO_InitStruct = {0};
      GPIO_InitStruct.Pin = LED_Pin;
      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
      HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);
    }
    

    其中,GPIO_MODE_OUTPUT_PP表示输出模式,GPIO_InitStruct.Pull设置为GPIO_NOPULL表示不采用上拉或下拉。

    1. 在主循环中配置LED闪烁。可以使用定时器、延时实现。这里提供一种使用定时器的方案:
    /* USER CODE BEGIN WHILE */
    while (1)
    {
      HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
      HAL_Delay(500);
    }
    /* USER CODE END WHILE */
    

    其中,HAL_GPIO_TogglePin函数用来切换引脚状态,实现LED闪烁。HAL_Delay函数用来实现延时,以控制LED闪烁频率。

    1. 编译并下载程序到单片机中。

    完整代码如下:

    /* USER CODE BEGIN Header */
    /**
      ******************************************************************************
      * File Name          : main.c
      * Description        : Main program body
      ******************************************************************************
      *
      * COPYRIGHT(c) 2021 STMicroelectronics
      *
      * Redistribution and use in source and binary forms, with or without
      * modification, are permitted provided that the following conditions are met:
      *   1. Redistributions of source code must retain the above copyright
      *      notice, this list of conditions and the following disclaimer.
      *   2. Redistributions in binary form must reproduce the above copyright
      *      notice, this list of conditions and the following disclaimer in the
      *      documentation and/or other materials provided with the distribution.
      *   3. Neither the name of STMicroelectronics nor the
      *      names of its contributors may be used to endorse or promote products
      *      derived from this software without specific prior written permission.
      *
      * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
      * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
      * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
      * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
      * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
      * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
      * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
      * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
      *
      ******************************************************************************
      */
    /* USER CODE END Header */
    
    /* Includes ------------------------------------------------------------------*/
    #include "main.h"
    
    /* Private includes ----------------------------------------------------------*/
    /* USER CODE BEGIN Includes */
    
    /* USER CODE END Includes */
    
    /* Private typedef -----------------------------------------------------------*/
    /* USER CODE BEGIN PTD */
    
    /* USER CODE END PTD */
    
    /* Private define ------------------------------------------------------------*/
    /* USER CODE BEGIN PD */
    #define LED_GPIO_Port GPIOA
    #define LED_Pin GPIO_PIN_5
    /* USER CODE END PD */
    
    /* Private macro -------------------------------------------------------------*/
    /* USER CODE BEGIN PM */
    
    /* USER CODE END PM */
    
    /* Private variables ---------------------------------------------------------*/
    
    /* USER CODE BEGIN PV */
    
    /* USER CODE END PV */
    
    /* Private function prototypes -----------------------------------------------*/
    static void MX_GPIO_Init(void);
    
    /* USER CODE BEGIN PFP */
    
    /* USER CODE END PFP */
    
    /* Private user code ---------------------------------------------------------*/
    /* USER CODE BEGIN 0 */
    
    /* USER CODE END 0 */
    
    /**
      * @brief  The application entry point.
      * @retval int
      */
    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();
    
      /* USER CODE BEGIN Init */
    
      /* USER CODE END Init */
    
      /* Configure the system clock */
      SystemClock_Config();
    
      /* USER CODE BEGIN SysInit */
    
      /* USER CODE END SysInit */
    
      /* Initialize all configured peripherals */
      MX_GPIO_Init();
      /* USER CODE BEGIN 2 */
    
      /* USER CODE END 2 */
    
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
        HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
        HAL_Delay(500);
      }
      /* USER CODE END 3 */
    }
    
    /**
      * @brief GPIO Initialization Function
      * @param None
      * @retval None
      */
    static void MX_GPIO_Init(void)
    {
    
      /* GPIO Ports Clock Enable */
      __HAL_RCC_GPIOA_CLK_ENABLE();
    
      /*Configure GPIO pin Output Level */
      HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
    
      /*Configure GPIO pin : LED_Pin */
      GPIO_InitTypeDef GPIO_InitStruct = {0};
      GPIO_InitStruct.Pin = LED_Pin;
      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
      HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);
    }
    
    /**
      * @brief System Clock Configuration
      * @retval None
      */
    void SystemClock_Config(void)
    {
      RCC_OscInitTypeDef RCC_OscInitStruct = {0};
      RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    
      /** Initializes the RCC Oscillators according to the specified parameters
      * in the RCC_OscInitTypeDef structure.
      */
      RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
      RCC_OscInitStruct.HSEState = RCC_HSE_ON;
      RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
      RCC_OscInitStruct.HSIState = RCC_HSI_ON;
      RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
      RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
      RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
      if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
      {
        Error_Handler();
      }
      /** Initializes the CPU, AHB and APB buses clocks
      */
      RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                                  |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
      RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
      RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
      RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
      RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    
      if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
      {
        Error_Handler();
      }
    }
    
    /**
      * @brief  This function is executed in case of error occurrence.
      * @retval None
      */
    void Error_Handler(void)
    {
      /* USER CODE BEGIN Error_Handler_Debug */
      /* User can add his own implementation to report the HAL error return state */
      while (1)
      {
      }
      /* USER CODE END Error_Handler_Debug */
    }
    
    #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,
         tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
      /* USER CODE END 6 */
    }
    
    #endif /* USE_FULL_ASSERT */
    
    /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
    

    编译并烧录程序后,LED即可闪烁。