#include "beep.h" /** * @brief 初始化蜂鸣器引脚 */ void Beep_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Pin = BEEP_GPIO_PIN; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(BEEP_GPIO_PORT, &GPIO_InitStruct); } /** * @brief 蜂鸣器报警 */ void Beep_Alert(void) { u8 i = 0; while (i < 10) { GPIO_SetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN); Delay_ms(500); GPIO_ResetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN); Delay_ms(500); i++; } } /** * @brief 停止蜂鸣器报警 */ void Beep_Stop(void) { GPIO_ResetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN); }程序中的函数怎么调用,()里要不要加viod
时间: 2023-12-06 15:43:01 浏览: 167
调用该函数时,需要在函数名后加上括号,括号中填写该函数需要的参数(如果有的话),如果不需要参数,则不需要在括号中填写任何内容。例如:
- 调用 Beep_Init 函数时,应该写成 Beep_Init();
- 调用 Beep_Alert 函数时,应该写成 Beep_Alert();
- 调用 Beep_Stop 函数时,应该写成 Beep_Stop();
在括号中不需要加上 void,因为 void 表示没有实参,而不是函数不需要实参。
相关问题
怎样在这个main.c中实现exti的初始化/** **************************************************************************************************** * @file main.c * @author 正点原子团队(ALIENTEK) * @version V1.0 * @date 2020-04-20 * @brief 外部中断 实验 * @license Copyright (c) 2020-2032, 广州市星翼电子科技有限公司 **************************************************************************************************** * @attention * * 实验平台:正点原子 STM32开发板 * 在线视频:www.yuanzige.com * 技术论坛:www.openedv.com * 公司网址:www.alientek.com * 购买地址:openedv.taobao.com * **************************************************************************************************** */ #include "./stm32f1xx_it.h" #include "./SYSTEM/sys/sys.h" #include "./SYSTEM/usart/usart.h" #include "./SYSTEM/delay/delay.h" #include "./BSP/LED/led.h" #include "./BSP/BEEP/beep.h" #include "./BSP/EXTI/exti.h" int main(void) { HAL_Init(); /* 初始化HAL库 */ sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */ delay_init(72); /* 延时初始化 */ usart_init(115200); /* 串口初始化为115200 */ led_init(); /* 初始化LED */ beep_init(); /* 初始化蜂鸣器 */ extix_init(); /* 初始化外部中断输入 */ LED0(0); /* 先点亮红灯 */ while (1) { printf("OK\r\n"); delay_ms(1000); } }
### 回答问题
根据你提供的`main.c`代码,以下是实现外部中断初始化的完整解决方案。我们需要确保`extix_init`函数被正确调用,并且在`BSP/EXTI/exti.c`中实现具体的外部中断初始化逻辑。
以下是修改后的代码:
#### `BSP/EXTI/exti.h`
这是外部中断头文件的定义:
```c
#ifndef __EXTI_H__
#define __EXTI_H__
#include "stm32f1xx_hal.h"
/**
* @brief 初始化外部中断
* @param 无
* @retval 无
*/
void extix_init(void);
#endif /* __EXTI_H__ */
```
#### `BSP/EXTI/exti.c`
这是外部中断初始化的实现:
```c
#include "exti.h"
#include "key.h" // 假设key.h中定义了KEY0、KEY1等宏
#include "led.h" // 假设led.h中定义了LED控制函数
/**
* @brief 外部中断初始化程序
* @param 无
* @retval 无
*/
void extix_init(void)
{
GPIO_InitTypeDef gpio_init_struct;
// 使能GPIO时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
// 配置KEY0为下降沿触发中断
gpio_init_struct.Pin = KEY0_PIN;
gpio_init_struct.Mode = GPIO_MODE_IT_FALLING;
gpio_init_struct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(KEY0_PORT, &gpio_init_struct);
// 配置KEY1为下降沿触发中断
gpio_init_struct.Pin = KEY1_PIN;
HAL_GPIO_Init(KEY1_PORT, &gpio_init_struct);
// 配置WKUP为上升沿触发中断
gpio_init_struct.Pin = WKUP_PIN;
gpio_init_struct.Mode = GPIO_MODE_IT_RISING;
gpio_init_struct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(WKUP_PORT, &gpio_init_struct);
// 设置中断优先级并使能中断
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); // KEY0抢占优先级0,子优先级0
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
HAL_NVIC_SetPriority(EXTI1_IRQn, 1, 0); // KEY1抢占优先级1,子优先级0
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
HAL_NVIC_SetPriority(EXTI2_IRQn, 2, 0); // WKUP抢占优先级2,子优先级0
HAL_NVIC_EnableIRQ(EXTI2_IRQn);
}
```
#### `main.c`
以下是主函数的实现,确保调用了`extix_init`函数:
```c
#include "./stm32f1xx_it.h"
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/BEEP/beep.h"
#include "./BSP/EXTI/exti.h"
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
delay_init(72); /* 延时初始化 */
usart_init(115200); /* 串口初始化为115200 */
led_init(); /* 初始化LED */
beep_init(); /* 初始化蜂鸣器 */
extix_init(); /* 初始化外部中断输入 */
LED0(0); /* 先点亮红灯 */
while (1)
{
printf("OK\r\n");
delay_ms(1000);
}
}
```
---
### 代码解释
1. **`exti.h`文件**:
- 定义了`extix_init`函数的原型。
- 包含了必要的头文件(如`stm32f1xx_hal.h`),确保可以使用HAL库的功能。
2. **`exti.c`文件**:
- 实现了`extix_init`函数,用于初始化外部中断。
- 使用`KEY0_PIN`、`KEY1_PIN`、`WKUP_PIN`等宏来表示按键对应的GPIO引脚,这些宏通常在`key.h`中定义。
- 配置了三个按键的GPIO模式为中断模式,并设置了触发方式(下降沿或上升沿)。
- 使用`HAL_NVIC_SetPriority`设置中断优先级,并通过`HAL_NVIC_EnableIRQ`使能中断。
3. **`main.c`文件**:
- 在主函数中调用了`extix_init`函数,确保外部中断被正确初始化。
- 主循环为空,所有逻辑交由中断处理。
---
###
#include "./SYSTEM/sys/sys.h" #include "./SYSTEM/delay/delay.h" #include "./BSP/LED/led.h" #include "./BSP/BEEP/beep.h" #include "./BSP/KEY/key.h" #include "./BSP/EXTI/exti.h" 在这个格式下修改
### 修改后的代码
根据你提供的格式,以下是对`exti.h`和`exti.c`文件的修改,确保符合你的项目结构,并实现外部中断初始化功能。
#### `BSP/EXTI/exti.h`
这是外部中断头文件的定义:
```c
#ifndef __EXTI_H__
#define __EXTI_H__
#include "stm32f1xx_hal.h"
/**
* @brief 初始化外部中断
* @param 无
* @retval 无
*/
void extix_init(void);
#endif /* __EXTI_H__ */
```
#### `BSP/EXTI/exti.c`
这是外部中断初始化的实现:
```c
#include "exti.h"
#include "key.h" // 假设key.h中定义了KEY0、KEY1等宏
#include "led.h" // 假设led.h中定义了LED控制函数
/**
* @brief 外部中断初始化程序
* @param 无
* @retval 无
*/
void extix_init(void)
{
GPIO_InitTypeDef gpio_init_struct;
// 使能GPIO时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
// 配置KEY0为下降沿触发中断
gpio_init_struct.Pin = KEY0_PIN;
gpio_init_struct.Mode = GPIO_MODE_IT_FALLING;
gpio_init_struct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(KEY0_PORT, &gpio_init_struct);
// 配置KEY1为下降沿触发中断
gpio_init_struct.Pin = KEY1_PIN;
HAL_GPIO_Init(KEY1_PORT, &gpio_init_struct);
// 配置WKUP为上升沿触发中断
gpio_init_struct.Pin = WKUP_PIN;
gpio_init_struct.Mode = GPIO_MODE_IT_RISING;
gpio_init_struct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(WKUP_PORT, &gpio_init_struct);
// 设置中断优先级并使能中断
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); // KEY0抢占优先级0,子优先级0
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
HAL_NVIC_SetPriority(EXTI1_IRQn, 1, 0); // KEY1抢占优先级1,子优先级0
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
HAL_NVIC_SetPriority(EXTI2_IRQn, 2, 0); // WKUP抢占优先级2,子优先级0
HAL_NVIC_EnableIRQ(EXTI2_IRQn);
}
```
---
### 代码解释
1. **`exti.h`文件**:
- 定义了`extix_init`函数的原型。
- 包含了必要的头文件(如`stm32f1xx_hal.h`),确保可以使用HAL库的功能。
2. **`exti.c`文件**:
- 实现了`extix_init`函数,用于初始化外部中断。
- 使用`KEY0_PIN`、`KEY1_PIN`、`WKUP_PIN`等宏来表示按键对应的GPIO引脚,这些宏通常在`key.h`中定义。
- 配置了三个按键的GPIO模式为中断模式,并设置了触发方式(下降沿或上升沿)。
- 使用`HAL_NVIC_SetPriority`设置中断优先级,并通过`HAL_NVIC_EnableIRQ`使能中断。
3. **模块化设计**:
- 将外部中断的初始化逻辑封装到`BSP/EXTI`目录下,便于管理和复用。
- 通过包含`key.h`和`led.h`等头文件,确保与项目的其他部分无缝集成。
---
###
阅读全文
相关推荐
















