Build started: Project: test*** Using Compiler ‘V5.06 update 7 (build 960)‘, folder: ‘D:\Keil_v5\AR
·
fputc重复定义——你在main.c和usart.c里都写了fputc函数。
🔴 问题原因
你在main.c的/* USER CODE BEGIN 0 */区域里写了:
c
#include <stdio.h>
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
同时,usart.c文件里在/* USER CODE BEGIN 1 */区域也可能有相同的fputc定义(或者CubeMX自动生成过)。
✅ 解决方案
方案1:注释掉main.c里的fputc(推荐)
在main.c中找到fputc函数,把它注释掉:
c
// #include <stdio.h>
// int fputc(int ch, FILE *f)
// {
// HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
// return ch;
// }
方案2:确保usart.c里有fputc
打开usart.c文件,在/* USER CODE BEGIN 1 */区域检查是否有fputc。如果没有,可以加上:
c
/* USER CODE BEGIN 1 */
#include <stdio.h>
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/* USER CODE END 1 */
方案3:最简单的修复
直接把main.c里的#include <stdio.h>和fputc函数删掉,因为usart.c里已经有了。
📝 修改后的main.c(只删掉fputc部分)
在/* USER CODE BEGIN 0 */区域,只保留:
c
// 用于存储捕获时间和状态的全局变量
static uint32_t ic_rising_tick = 0;
static uint32_t ic_falling_tick = 0;
static uint8_t ic_capture_complete = 0;
static uint8_t ic_capture_state = 0; // 0: 等待上升沿, 1: 等待下降沿
// 微秒级延时函数
void delay_us(uint32_t us)
{
us = us * 20; // 168MHz下粗略估算:1us ≈ 20个空循环
while(us--)
{
__NOP(); // 空操作
}
}
// 发送Trig触发信号
void HCSR04_Trigger(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);
delay_us(20); // 触发脉冲 >10us
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
}
// 定时器输入捕获中断回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM9)
{
if (ic_capture_state == 0) // 捕获到上升沿
{
ic_rising_tick = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
__HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING);
ic_capture_state = 1;
}
else if (ic_capture_state == 1) // 捕获到下降沿
{
ic_falling_tick = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
__HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);
ic_capture_state = 0;
ic_capture_complete = 1;
}
}
}
// 注意:这里不要写fputc!因为usart.c里已经有了
删掉后重新编译,应该就能通过了!
更多推荐

所有评论(0)