Compare commits

..

2 Commits

Author SHA1 Message Date
81c3c7c1ed feat: 超声波测距 2024-07-13 15:59:31 +08:00
2450e3b5b3 feat: 超声波测距 2024-07-13 15:22:46 +08:00
19 changed files with 661 additions and 262 deletions

47
CAR.ioc
View File

@ -14,13 +14,13 @@ Mcu.IP3=SYS
Mcu.IP4=TIM2 Mcu.IP4=TIM2
Mcu.IP5=TIM3 Mcu.IP5=TIM3
Mcu.IP6=TIM4 Mcu.IP6=TIM4
Mcu.IP7=USART1 Mcu.IP7=USART2
Mcu.IPNb=8 Mcu.IPNb=8
Mcu.Name=STM32F103C(8-B)Tx Mcu.Name=STM32F103C(8-B)Tx
Mcu.Package=LQFP48 Mcu.Package=LQFP48
Mcu.Pin0=PD0-OSC_IN Mcu.Pin0=PD0-OSC_IN
Mcu.Pin1=PD1-OSC_OUT Mcu.Pin1=PD1-OSC_OUT
Mcu.Pin10=PA10 Mcu.Pin10=PB11
Mcu.Pin11=PA12 Mcu.Pin11=PA12
Mcu.Pin12=PA13 Mcu.Pin12=PA13
Mcu.Pin13=PA14 Mcu.Pin13=PA14
@ -37,12 +37,12 @@ Mcu.Pin22=VP_TIM2_VS_ClockSourceINT
Mcu.Pin23=VP_TIM3_VS_ClockSourceINT Mcu.Pin23=VP_TIM3_VS_ClockSourceINT
Mcu.Pin24=VP_TIM4_VS_ClockSourceINT Mcu.Pin24=VP_TIM4_VS_ClockSourceINT
Mcu.Pin3=PA1 Mcu.Pin3=PA1
Mcu.Pin4=PA7 Mcu.Pin4=PA2
Mcu.Pin5=PB0 Mcu.Pin5=PA3
Mcu.Pin6=PB1 Mcu.Pin6=PA7
Mcu.Pin7=PB10 Mcu.Pin7=PB0
Mcu.Pin8=PB11 Mcu.Pin8=PB1
Mcu.Pin9=PA9 Mcu.Pin9=PB10
Mcu.PinsNb=25 Mcu.PinsNb=25
Mcu.ThirdPartyNb=0 Mcu.ThirdPartyNb=0
Mcu.UserConstants= Mcu.UserConstants=
@ -61,6 +61,7 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_2
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.SysTick_IRQn=true\:3\:0\:true\:false\:true\:false\:true\:false NVIC.SysTick_IRQn=true\:3\:0\:true\:false\:true\:false\:true\:false
NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
PA0-WKUP.GPIOParameters=PinState,GPIO_Label PA0-WKUP.GPIOParameters=PinState,GPIO_Label
PA0-WKUP.GPIO_Label=FM_K2_POWERC PA0-WKUP.GPIO_Label=FM_K2_POWERC
@ -72,11 +73,10 @@ PA1.GPIO_Label=FAN_GS
PA1.Locked=true PA1.Locked=true
PA1.PinState=GPIO_PIN_SET PA1.PinState=GPIO_PIN_SET
PA1.Signal=GPIO_Output PA1.Signal=GPIO_Output
PA10.Mode=Asynchronous PA12.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
PA10.Signal=USART1_RX PA12.GPIO_Label=Echo
PA12.GPIOParameters=GPIO_Label,GPIO_ModeDefaultEXTI
PA12.GPIO_Label=SDA_C_EXTI12
PA12.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING PA12.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING
PA12.GPIO_PuPd=GPIO_PULLDOWN
PA12.Locked=true PA12.Locked=true
PA12.Signal=GPXTI12 PA12.Signal=GPXTI12
PA13.Mode=Serial_Wire PA13.Mode=Serial_Wire
@ -84,16 +84,18 @@ PA13.Signal=SYS_JTMS-SWDIO
PA14.Mode=Serial_Wire PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK PA14.Signal=SYS_JTCK-SWCLK
PA15.GPIOParameters=GPIO_Speed,GPIO_Label PA15.GPIOParameters=GPIO_Speed,GPIO_Label
PA15.GPIO_Label=SCL_C PA15.GPIO_Label=Trig
PA15.GPIO_Speed=GPIO_SPEED_FREQ_HIGH PA15.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PA15.Locked=true PA15.Locked=true
PA15.Signal=GPIO_Output PA15.Signal=GPIO_Output
PA2.Mode=Asynchronous
PA2.Signal=USART2_TX
PA3.Mode=Asynchronous
PA3.Signal=USART2_RX
PA7.GPIOParameters=GPIO_Label PA7.GPIOParameters=GPIO_Label
PA7.GPIO_Label=LED_B_TIM3CH2 PA7.GPIO_Label=LED_B_TIM3CH2
PA7.Locked=true PA7.Locked=true
PA7.Signal=S_TIM3_CH2 PA7.Signal=S_TIM3_CH2
PA9.Mode=Asynchronous
PA9.Signal=USART1_TX
PB0.GPIOParameters=GPIO_Label PB0.GPIOParameters=GPIO_Label
PB0.GPIO_Label=LED_G_TIM3CH3 PB0.GPIO_Label=LED_G_TIM3CH3
PB0.Locked=true PB0.Locked=true
@ -163,14 +165,14 @@ ProjectManager.ProjectBuild=false
ProjectManager.ProjectFileName=CAR.ioc ProjectManager.ProjectFileName=CAR.ioc
ProjectManager.ProjectName=CAR ProjectManager.ProjectName=CAR
ProjectManager.ProjectStructure= ProjectManager.ProjectStructure=
ProjectManager.RegisterCallBack= ProjectManager.RegisterCallBack=TIM
ProjectManager.StackSize=0x400 ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=MDK-ARM V5.32 ProjectManager.TargetToolchain=Makefile
ProjectManager.ToolChainLocation= ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath= ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_I2C2_Init-I2C2-false-HAL-true,4-MX_TIM3_Init-TIM3-false-HAL-true,5-MX_TIM4_Init-TIM4-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true,7-MX_TIM2_Init-TIM2-false-HAL-true ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_I2C2_Init-I2C2-false-HAL-true,4-MX_TIM3_Init-TIM3-false-HAL-true,5-MX_TIM4_Init-TIM4-false-HAL-true,6-MX_TIM2_Init-TIM2-false-HAL-true,7-MX_USART2_UART_Init-USART2-false-HAL-true
RCC.ADCFreqValue=36000000 RCC.ADCFreqValue=36000000
RCC.AHBFreq_Value=72000000 RCC.AHBFreq_Value=72000000
RCC.APB1CLKDivider=RCC_HCLK_DIV2 RCC.APB1CLKDivider=RCC_HCLK_DIV2
@ -204,8 +206,9 @@ SH.S_TIM4_CH1.0=TIM4_CH1,PWM Generation1 CH1
SH.S_TIM4_CH1.ConfNb=1 SH.S_TIM4_CH1.ConfNb=1
SH.S_TIM4_CH2.0=TIM4_CH2,PWM Generation2 CH2 SH.S_TIM4_CH2.0=TIM4_CH2,PWM Generation2 CH2
SH.S_TIM4_CH2.ConfNb=1 SH.S_TIM4_CH2.ConfNb=1
TIM2.IPParameters=Prescaler,Period TIM2.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
TIM2.Period=1 - 1 TIM2.IPParameters=Prescaler,Period,AutoReloadPreload
TIM2.Period=10 - 1
TIM2.Prescaler=72 - 1 TIM2.Prescaler=72 - 1
TIM3.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 TIM3.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
TIM3.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 TIM3.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
@ -224,8 +227,8 @@ TIM4.Period=100
TIM4.Prescaler=720 - 1 TIM4.Prescaler=720 - 1
TIM4.Pulse-PWM\ Generation1\ CH1=100 TIM4.Pulse-PWM\ Generation1\ CH1=100
TIM4.Pulse-PWM\ Generation2\ CH2=100 TIM4.Pulse-PWM\ Generation2\ CH2=100
USART1.IPParameters=VirtualMode USART2.IPParameters=VirtualMode
USART1.VirtualMode=VM_ASYNC USART2.VirtualMode=VM_ASYNC
VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick VP_SYS_VS_Systick.Signal=SYS_VS_Systick
VP_TIM2_VS_ClockSourceINT.Mode=Internal VP_TIM2_VS_ClockSourceINT.Mode=Internal

View File

@ -3,7 +3,13 @@
#include "main.h" #include "main.h"
int16_t sonar_mm(void); extern uint32_t sonor_distance; // 测量出的距离单位mm
float sonar(void); extern uint8_t sonor_state; // 测距状态变量0未测量1正在测量2已测量
void HC_SR04_Init(void);
uint32_t sonar_mm(void);
// 测距完毕回调执行完自定义任务后将sonor_state置0
void Sonar_CP_Callback();
#endif #endif

View File

@ -71,11 +71,11 @@ void Error_Handler(void);
#define MPU6050_SCL_GPIO_Port GPIOB #define MPU6050_SCL_GPIO_Port GPIOB
#define MPU6050_SDA_Pin GPIO_PIN_11 #define MPU6050_SDA_Pin GPIO_PIN_11
#define MPU6050_SDA_GPIO_Port GPIOB #define MPU6050_SDA_GPIO_Port GPIOB
#define SDA_C_EXTI12_Pin GPIO_PIN_12 #define Echo_Pin GPIO_PIN_12
#define SDA_C_EXTI12_GPIO_Port GPIOA #define Echo_GPIO_Port GPIOA
#define SDA_C_EXTI12_EXTI_IRQn EXTI15_10_IRQn #define Echo_EXTI_IRQn EXTI15_10_IRQn
#define SCL_C_Pin GPIO_PIN_15 #define Trig_Pin GPIO_PIN_15
#define SCL_C_GPIO_Port GPIOA #define Trig_GPIO_Port GPIOA
#define R_FORWARD_Pin GPIO_PIN_4 #define R_FORWARD_Pin GPIO_PIN_4
#define R_FORWARD_GPIO_Port GPIOB #define R_FORWARD_GPIO_Port GPIOB
#define R_BACKWARD_Pin GPIO_PIN_5 #define R_BACKWARD_Pin GPIO_PIN_5

View File

@ -152,7 +152,7 @@
#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ #define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */
#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ #define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */
#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ #define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */
#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ #define USE_HAL_TIM_REGISTER_CALLBACKS 1U /* TIM register callback enabled */
#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ #define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */
#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ #define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */
#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ #define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */

View File

@ -56,6 +56,7 @@ void DebugMon_Handler(void);
void PendSV_Handler(void); void PendSV_Handler(void);
void SysTick_Handler(void); void SysTick_Handler(void);
void TIM2_IRQHandler(void); void TIM2_IRQHandler(void);
void USART2_IRQHandler(void);
void EXTI15_10_IRQHandler(void); void EXTI15_10_IRQHandler(void);
/* USER CODE BEGIN EFP */ /* USER CODE BEGIN EFP */

138
Core/Inc/syscalls.h Normal file
View File

@ -0,0 +1,138 @@
/**
******************************************************************************
* @file syscalls.c
* @author Suroy Wrote with Auto-generated by STM32CubeIDE
* @url https://suroy.cn
* @brief STM32CubeIDE Minimal System calls file
*
* For more information about which c-functions
* need which of these lowlevel functions
* please consult the Newlib libc-manual
******************************************************************************
* @attention
*
* Copyright (c) 2020-2022 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Includes */
#ifndef __SYSCALLS_H
#define __SYSCALLS_H
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <stm32f1xx_hal_uart.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <time.h>
extern UART_HandleTypeDef huart2;
/* Variables */
extern int __io_putchar(int ch) __attribute__((weak));
extern int __io_getchar(void) __attribute__((weak));
/* Functions */
__attribute__((weak)) int _read(int file, char *ptr, int len) {
(void)file;
int DataIdx;
for (DataIdx = 0; DataIdx < len; DataIdx++) {
*ptr++ = __io_getchar();
}
return len;
}
__attribute__((weak)) int _write(int file, char *ptr, int len) {
(void)file;
int DataIdx;
for (DataIdx = 0; DataIdx < len; DataIdx++) {
__io_putchar(*ptr++);
}
return len;
}
// 条件编译
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#define GETCHAR_PROTOTYPE int __io_getchar(void)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#define GETCHAR_PROTOTYPE int fgetc(FILE *f)
#endif /* __GNUC__ */
/**
* : c库函数 printf到 DEBUG_USARTx
* :
* :
*
*/
PUTCHAR_PROTOTYPE {
HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF); // 阻塞式无限等待
return ch;
}
/**
* : c库函数 getchar,scanf到 DEBUG_USARTx
* :
* :
*
*/
GETCHAR_PROTOTYPE {
uint8_t ch = 0;
HAL_UART_Receive(&huart2, &ch, 1, 0xFFFF);
return ch;
}
/* 非GCC模式才允许编译使用即 Keil、IAR 等 */
#ifndef __GNUC__
/**
* @brief C printf huart2
* KeilIAR IDE GCC
* @author Suroy
* @param ch
* @param f
* @return int
*
* @usage printf("USART1_Target:\r\n");
*/
int fputc(int ch, FILE *f) {
// 采用轮询方式发送1字节数据超时时间为无限等待
HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, HAL_MAX_DELAY); // huart2是串口的句柄
return ch;
}
/**
* @brief fgets
* C scanf huart2
*
* @param f
* @return int
*
* @usage scanf("%c", &RecData);
*/
int fgetc(FILE *f) {
uint8_t ch;
HAL_UART_Receive(&huart2, (uint8_t *)&ch, 1, HAL_MAX_DELAY); // huart2是串口的句柄
return ch;
}
#endif /* __GNUC__ */
void delay_us(uint16_t us) {
uint32_t delay = (HAL_RCC_GetHCLKFreq() / 4000000 * us);
while (delay--);
}
#endif

View File

@ -32,13 +32,13 @@ extern "C" {
/* USER CODE END Includes */ /* USER CODE END Includes */
extern UART_HandleTypeDef huart1; extern UART_HandleTypeDef huart2;
/* USER CODE BEGIN Private defines */ /* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */ /* USER CODE END Private defines */
void MX_USART1_UART_Init(void); void MX_USART2_UART_Init(void);
/* USER CODE BEGIN Prototypes */ /* USER CODE BEGIN Prototypes */

View File

@ -53,7 +53,7 @@ void MX_GPIO_Init(void)
HAL_GPIO_WritePin(GPIOA, FM_K2_POWERC_Pin|FAN_GS_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA, FM_K2_POWERC_Pin|FAN_GS_Pin, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(SCL_C_GPIO_Port, SCL_C_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(Trig_GPIO_Port, Trig_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, R_FORWARD_Pin|R_BACKWARD_Pin|L_BACKWARD_Pin|L_FORWARD_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, R_FORWARD_Pin|R_BACKWARD_Pin|L_BACKWARD_Pin|L_FORWARD_Pin, GPIO_PIN_RESET);
@ -66,17 +66,17 @@ void MX_GPIO_Init(void)
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */ /*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = SDA_C_EXTI12_Pin; GPIO_InitStruct.Pin = Echo_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(SDA_C_EXTI12_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_Init(Echo_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */ /*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = SCL_C_Pin; GPIO_InitStruct.Pin = Trig_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(SCL_C_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_Init(Trig_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pins : PBPin PBPin PBPin PBPin */ /*Configure GPIO pins : PBPin PBPin PBPin PBPin */
GPIO_InitStruct.Pin = R_FORWARD_Pin|R_BACKWARD_Pin|L_BACKWARD_Pin|L_FORWARD_Pin; GPIO_InitStruct.Pin = R_FORWARD_Pin|R_BACKWARD_Pin|L_BACKWARD_Pin|L_FORWARD_Pin;

View File

@ -1,83 +1,60 @@
#include "hcsr04.h" #include "hcsr04.h"
#include "stm32f1xx_hal_tim.h"
#include "tim.h" #include "tim.h"
// time 的单位是 μs
uint64_t time; // 声明变量,用来计时 uint64_t time; // 声明变量,用来计时
uint64_t time_end; // 声明变量,存储回波信号时间 uint64_t time_end; // 声明变量,存储回波信号时间
uint8_t state = 1; uint8_t sonor_state = 1; // 测距状态变量0未测量1正在测量2已测量
uint32_t sonor_distance; // 测量出的距离单位mm
// HACK 临时的 delay 解决方法 void HCSR04_HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim);
void delay_us(uint16_t us);
int16_t sonar_mm(void) // 测距并返回单位为毫米的距离结果 // 初始化超声波测距
{ void HC_SR04_Init(void) {
uint32_t distance, distance_mm = 0; // 禁用JTAG
HAL_GPIO_WritePin(SCL_C_GPIO_Port, SCL_C_Pin, GPIO_PIN_SET); // 输出高电平 __HAL_RCC_AFIO_CLK_ENABLE();
__HAL_AFIO_REMAP_SWJ_NOJTAG();
// 注册定时器中断溢出回调
HAL_TIM_RegisterCallback(&htim2, HAL_TIM_PERIOD_ELAPSED_CB_ID, HCSR04_HAL_TIM_PeriodElapsedCallback);
}
// 启动测距单位mm
uint32_t sonar_mm(void) {
sonor_state = 1;
HAL_GPIO_WritePin(Trig_GPIO_Port, Trig_Pin, GPIO_PIN_SET); // 输出高电平
delay_us(15); // 延时15微秒 delay_us(15); // 延时15微秒
HAL_GPIO_WritePin(SCL_C_GPIO_Port, SCL_C_Pin, GPIO_PIN_RESET); // 输出低电平 HAL_GPIO_WritePin(Trig_GPIO_Port, Trig_Pin, GPIO_PIN_RESET); // 输出低电平
if (time_end / 100 < 38) { // 判断是否小于38毫秒大于38毫秒的就是超时直接调到下面返回0
while (state); sonor_distance = (time_end * 346) / 2; // 计算距离25°C空气中的音速为346m/s
state = 1; sonor_distance = sonor_distance / 100; // 因为上面的time_end的单位是10微秒所以要得出单位为毫米的距离结果还得除以100
// BUG 现在 time 的单位是 1μs
if (time_end / 100 < 38)
{ // 判断是否小于38毫秒大于38毫秒的就是超时直接调到下面返回0
distance = (time_end * 346) / 2; // 计算距离25°C空气中的音速为346m/s
distance_mm = distance / 100; // 因为上面的time_end的单位是10微秒所以要得出单位为毫米的距离结果还得除以100
} }
return distance_mm; // 返回测距结果 return sonor_distance;
} }
float sonar(void) // 测距并返回单位为米的距离结果 void HCSR04_HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) {
{ if (htim == &htim2) { // 每10us自增一
uint32_t distance, distance_mm = 0; time++;
float distance_m = 0;
HAL_GPIO_WritePin(SCL_C_GPIO_Port, SCL_C_Pin, GPIO_PIN_SET); // 输出高电平
delay_us(15); // 延时15微秒
HAL_GPIO_WritePin(SCL_C_GPIO_Port, SCL_C_Pin, GPIO_PIN_RESET); // 输出低电平
while (state);
state = 1;
// BUG 现在 time 的单位是 1μs
if (time_end / 100 < 38)
{
distance = (time_end * 346) / 2;
distance_mm = distance / 100;
distance_m = distance_mm / 1000;
} }
return distance_m;
} }
void delay_us(uint16_t us) void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
{ if (GPIO_Pin == Echo_Pin) {
if (HAL_GPIO_ReadPin(Echo_GPIO_Port, Echo_Pin)) {
HAL_TIM_Base_Start_IT(&htim2); HAL_TIM_Base_Start_IT(&htim2);
time = 0; time = 0;
while (time < us); } else {
HAL_TIM_Base_Stop_IT(&htim2);
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim == &htim2)
++time;
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin == SDA_C_EXTI12_Pin)
{
if (HAL_GPIO_ReadPin(SDA_C_EXTI12_GPIO_Port, SDA_C_EXTI12_Pin))
{
HAL_TIM_Base_Start_IT(&htim2);
time = 0;
}
else
{
time_end = time; time_end = time;
HAL_TIM_Base_Stop_IT(&htim2); HAL_TIM_Base_Stop_IT(&htim2);
state = 0; sonor_state = 2;
Sonar_CP_Callback();
} }
} }
} }
// 测距完毕回调执行完自定义任务后将sonor_state置0
__attribute__((weak)) void Sonar_CP_Callback() {
printf("distance = %d (mm)\n", sonor_distance);
sonor_state = 0;
}

View File

@ -26,8 +26,10 @@
/* Private includes ----------------------------------------------------------*/ /* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */ /* USER CODE BEGIN Includes */
#include "hcsr04.h"
#include "led.h" #include "led.h"
#include "motor.h" #include "motor.h"
#include "syscalls.h"
/* USER CODE END Includes */ /* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/ /* Private typedef -----------------------------------------------------------*/
@ -59,6 +61,9 @@ void SystemClock_Config(void);
/* Private user code ---------------------------------------------------------*/ /* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */ /* USER CODE BEGIN 0 */
// void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
// printf("main.c\n");
// }
/* USER CODE END 0 */ /* USER CODE END 0 */
@ -92,29 +97,22 @@ int main(void) {
MX_I2C2_Init(); MX_I2C2_Init();
MX_TIM3_Init(); MX_TIM3_Init();
MX_TIM4_Init(); MX_TIM4_Init();
MX_USART1_UART_Init();
MX_TIM2_Init(); MX_TIM2_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
HC_SR04_Init();
/* USER CODE END 2 */ /* USER CODE END 2 */
/* Infinite loop */ /* Infinite loop */
/* USER CODE BEGIN WHILE */ /* USER CODE BEGIN WHILE */
while (1) { while (1) {
int Distance_mm = sonar_mm(); printf("test\n");
int Distance_m = Distance_mm / 1000;
int Distance_m_p = Distance_mm % 1000;
printf("Distance_mm = %d\n", Distance_mm);
printf("Distance_m = %d\n", Distance_m);
printf("Distance_m_p = %d\n", Distance_m_p);
if (Distance_mm < 100) { if (sonor_state == 0) {
LED_Start(LED_R); sonar_mm();
MOTOR_Start();
} else {
LED_Stop(LED_R);
MOTOR_Stop();
} }
HAL_Delay(300); // 延时300毫秒 HAL_Delay(300); // 延时300毫秒
/* USER CODE END WHILE */ /* USER CODE END WHILE */

View File

@ -56,6 +56,7 @@
/* External variables --------------------------------------------------------*/ /* External variables --------------------------------------------------------*/
extern TIM_HandleTypeDef htim2; extern TIM_HandleTypeDef htim2;
extern UART_HandleTypeDef huart2;
/* USER CODE BEGIN EV */ /* USER CODE BEGIN EV */
/* USER CODE END EV */ /* USER CODE END EV */
@ -212,6 +213,20 @@ void TIM2_IRQHandler(void)
/* USER CODE END TIM2_IRQn 1 */ /* USER CODE END TIM2_IRQn 1 */
} }
/**
* @brief This function handles USART2 global interrupt.
*/
void USART2_IRQHandler(void)
{
/* USER CODE BEGIN USART2_IRQn 0 */
/* USER CODE END USART2_IRQn 0 */
HAL_UART_IRQHandler(&huart2);
/* USER CODE BEGIN USART2_IRQn 1 */
/* USER CODE END USART2_IRQn 1 */
}
/** /**
* @brief This function handles EXTI line[15:10] interrupts. * @brief This function handles EXTI line[15:10] interrupts.
*/ */
@ -220,7 +235,7 @@ void EXTI15_10_IRQHandler(void)
/* USER CODE BEGIN EXTI15_10_IRQn 0 */ /* USER CODE BEGIN EXTI15_10_IRQn 0 */
/* USER CODE END EXTI15_10_IRQn 0 */ /* USER CODE END EXTI15_10_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(SDA_C_EXTI12_Pin); HAL_GPIO_EXTI_IRQHandler(Echo_Pin);
/* USER CODE BEGIN EXTI15_10_IRQn 1 */ /* USER CODE BEGIN EXTI15_10_IRQn 1 */
/* USER CODE END EXTI15_10_IRQn 1 */ /* USER CODE END EXTI15_10_IRQn 1 */

View File

@ -28,6 +28,7 @@
#include <signal.h> #include <signal.h>
#include <time.h> #include <time.h>
#include <sys/time.h> #include <sys/time.h>
#include <sys/times.h>
/* Variables */ /* Variables */

View File

@ -45,9 +45,9 @@ void MX_TIM2_Init(void)
htim2.Instance = TIM2; htim2.Instance = TIM2;
htim2.Init.Prescaler = 72 - 1; htim2.Init.Prescaler = 72 - 1;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 1 - 1; htim2.Init.Period = 10 - 1;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim2) != HAL_OK) if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
{ {
Error_Handler(); Error_Handler();

View File

@ -24,35 +24,35 @@
#include <stdio.h> #include <stdio.h>
/* USER CODE END 0 */ /* USER CODE END 0 */
UART_HandleTypeDef huart1; UART_HandleTypeDef huart2;
/* USART1 init function */ /* USART2 init function */
void MX_USART1_UART_Init(void) void MX_USART2_UART_Init(void)
{ {
/* USER CODE BEGIN USART1_Init 0 */ /* USER CODE BEGIN USART2_Init 0 */
/* USER CODE END USART1_Init 0 */ /* USER CODE END USART2_Init 0 */
/* USER CODE BEGIN USART1_Init 1 */ /* USER CODE BEGIN USART2_Init 1 */
/* USER CODE END USART1_Init 1 */ /* USER CODE END USART2_Init 1 */
huart1.Instance = USART1; huart2.Instance = USART2;
huart1.Init.BaudRate = 115200; huart2.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1; huart2.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE; huart2.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX; huart2.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16; huart2.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK) if (HAL_UART_Init(&huart2) != HAL_OK)
{ {
Error_Handler(); Error_Handler();
} }
/* USER CODE BEGIN USART1_Init 2 */ /* USER CODE BEGIN USART2_Init 2 */
/* USER CODE END USART1_Init 2 */ /* USER CODE END USART2_Init 2 */
} }
@ -60,71 +60,63 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{ {
GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitTypeDef GPIO_InitStruct = {0};
if(uartHandle->Instance==USART1) if(uartHandle->Instance==USART2)
{ {
/* USER CODE BEGIN USART1_MspInit 0 */ /* USER CODE BEGIN USART2_MspInit 0 */
/* USER CODE END USART1_MspInit 0 */ /* USER CODE END USART2_MspInit 0 */
/* USART1 clock enable */ /* USART2 clock enable */
__HAL_RCC_USART1_CLK_ENABLE(); __HAL_RCC_USART2_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE();
/**USART1 GPIO Configuration /**USART2 GPIO Configuration
PA9 ------> USART1_TX PA2 ------> USART2_TX
PA10 ------> USART1_RX PA3 ------> USART2_RX
*/ */
GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Pin = GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN USART1_MspInit 1 */ /* USART2 interrupt Init */
HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART2_IRQn);
/* USER CODE BEGIN USART2_MspInit 1 */
/* USER CODE END USART1_MspInit 1 */ /* USER CODE END USART2_MspInit 1 */
} }
} }
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
{ {
if(uartHandle->Instance==USART1) if(uartHandle->Instance==USART2)
{ {
/* USER CODE BEGIN USART1_MspDeInit 0 */ /* USER CODE BEGIN USART2_MspDeInit 0 */
/* USER CODE END USART1_MspDeInit 0 */ /* USER CODE END USART2_MspDeInit 0 */
/* Peripheral clock disable */ /* Peripheral clock disable */
__HAL_RCC_USART1_CLK_DISABLE(); __HAL_RCC_USART2_CLK_DISABLE();
/**USART1 GPIO Configuration /**USART2 GPIO Configuration
PA9 ------> USART1_TX PA2 ------> USART2_TX
PA10 ------> USART1_RX PA3 ------> USART2_RX
*/ */
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
/* USER CODE BEGIN USART1_MspDeInit 1 */ /* USART2 interrupt Deinit */
HAL_NVIC_DisableIRQ(USART2_IRQn);
/* USER CODE BEGIN USART2_MspDeInit 1 */
/* USER CODE END USART1_MspDeInit 1 */ /* USER CODE END USART2_MspDeInit 1 */
} }
} }
/* USER CODE BEGIN 1 */ /* USER CODE BEGIN 1 */
int fputc(int c, FILE* f)
{
static uint8_t ch;
ch = c;
HAL_UART_Transmit(&huart1, &ch, 1, 1000);
return c;
}
int fgetc(FILE* f)
{
static uint8_t ch;
HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
return ch;
}
/* USER CODE END 1 */ /* USER CODE END 1 */

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd"> <ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
<SchemaVersion>1.0</SchemaVersion> <SchemaVersion>1.0</SchemaVersion>
@ -45,7 +45,7 @@
<PageWidth>79</PageWidth> <PageWidth>79</PageWidth>
<PageLength>66</PageLength> <PageLength>66</PageLength>
<TabStop>8</TabStop> <TabStop>8</TabStop>
<ListingPath /> <ListingPath></ListingPath>
</OPTLEX> </OPTLEX>
<ListingPage> <ListingPage>
<CreateCListing>1</CreateCListing> <CreateCListing>1</CreateCListing>
@ -104,16 +104,16 @@
<bSchkAxf>0</bSchkAxf> <bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf> <bTchkAxf>0</bTchkAxf>
<nTsel>3</nTsel> <nTsel>3</nTsel>
<sDll /> <sDll></sDll>
<sDllPa /> <sDllPa></sDllPa>
<sDlgDll /> <sDlgDll></sDlgDll>
<sDlgPa /> <sDlgPa></sDlgPa>
<sIfile /> <sIfile></sIfile>
<tDll /> <tDll></tDll>
<tDllPa /> <tDllPa></tDllPa>
<tDlgDll /> <tDlgDll></tDlgDll>
<tDlgPa /> <tDlgPa></tDlgPa>
<tIfile /> <tIfile></tIfile>
<pMon>BIN\CMSIS_AGDI.dll</pMon> <pMon>BIN\CMSIS_AGDI.dll</pMon>
</DebugOpt> </DebugOpt>
<TargetDriverDllRegistry> <TargetDriverDllRegistry>
@ -130,7 +130,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>ARMDBGFLAGS</Key> <Key>ARMDBGFLAGS</Key>
<Name /> <Name></Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
@ -140,7 +140,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>DLGUARM</Key> <Key>DLGUARM</Key>
<Name /> <Name></Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
@ -167,8 +167,8 @@
<BreakByAccess>0</BreakByAccess> <BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount> <BreakIfRCount>0</BreakIfRCount>
<Filename>../Core/Src/main.c</Filename> <Filename>../Core/Src/main.c</Filename>
<ExecCommand /> <ExecCommand></ExecCommand>
<Expression /> <Expression></Expression>
</Bp> </Bp>
<Bp> <Bp>
<Number>1</Number> <Number>1</Number>
@ -183,8 +183,8 @@
<BreakByAccess>0</BreakByAccess> <BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount> <BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\Src\motor.c</Filename> <Filename>..\Core\Src\motor.c</Filename>
<ExecCommand /> <ExecCommand></ExecCommand>
<Expression /> <Expression></Expression>
</Bp> </Bp>
</Breakpoint> </Breakpoint>
<Tracepoint> <Tracepoint>
@ -216,19 +216,19 @@
<newCpu>0</newCpu> <newCpu>0</newCpu>
<uProt>0</uProt> <uProt>0</uProt>
</DebugFlag> </DebugFlag>
<LintExecutable /> <LintExecutable></LintExecutable>
<LintConfigFile /> <LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto> <bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD> <bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags> <LntExFlags>0</LntExFlags>
<pMisraName /> <pMisraName></pMisraName>
<pszMrule /> <pszMrule></pszMrule>
<pSingCmds /> <pSingCmds></pSingCmds>
<pMultCmds /> <pMultCmds></pMultCmds>
<pMisraNamep /> <pMisraNamep></pMisraNamep>
<pszMrulep /> <pszMrulep></pszMrulep>
<pSingCmdsp /> <pSingCmdsp></pSingCmdsp>
<pMultCmdsp /> <pMultCmdsp></pMultCmdsp>
<DebugDescription> <DebugDescription>
<Enable>1</Enable> <Enable>1</Enable>
<EnableFlashSeq>0</EnableFlashSeq> <EnableFlashSeq>0</EnableFlashSeq>
@ -577,7 +577,7 @@
<Group> <Group>
<GroupName>Drivers/CMSIS</GroupName> <GroupName>Drivers/CMSIS</GroupName>
<tvExp>0</tvExp> <tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>

View File

@ -1,7 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" noNamespaceSchemaLocation="project_projx.xsd"> <Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
<SchemaVersion>2.1</SchemaVersion> <SchemaVersion>2.1</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header> <Header>### uVision Project, (C) Keil Software</Header>
<Targets> <Targets>
<Target> <Target>
<TargetName>CAR</TargetName> <TargetName>CAR</TargetName>
@ -16,28 +19,28 @@
<PackID>Keil.STM32F1xx_DFP.2.2.0</PackID> <PackID>Keil.STM32F1xx_DFP.2.2.0</PackID>
<PackURL>http://www.keil.com/pack/</PackURL> <PackURL>http://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x800FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") TZ</Cpu> <Cpu>IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x800FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") TZ</Cpu>
<FlashUtilSpec /> <FlashUtilSpec></FlashUtilSpec>
<StartupFile /> <StartupFile></StartupFile>
<FlashDriverDll /> <FlashDriverDll></FlashDriverDll>
<DeviceId>0</DeviceId> <DeviceId>0</DeviceId>
<RegisterFile /> <RegisterFile></RegisterFile>
<MemoryEnv /> <MemoryEnv></MemoryEnv>
<Cmp /> <Cmp></Cmp>
<Asm /> <Asm></Asm>
<Linker /> <Linker></Linker>
<OHString /> <OHString></OHString>
<InfinionOptionDll /> <InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc /> <SLE66CMisc></SLE66CMisc>
<SLE66AMisc /> <SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc /> <SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile>$$Device:STM32F103C8$SVD\STM32F103xx.svd</SFDFile> <SFDFile>$$Device:STM32F103C8$SVD\STM32F103xx.svd</SFDFile>
<bCustSvd>0</bCustSvd> <bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv> <UseEnv>0</UseEnv>
<BinPath /> <BinPath></BinPath>
<IncludePath /> <IncludePath></IncludePath>
<LibPath /> <LibPath></LibPath>
<RegisterFilePath /> <RegisterFilePath></RegisterFilePath>
<DBRegisterFilePath /> <DBRegisterFilePath></DBRegisterFilePath>
<TargetStatus> <TargetStatus>
<Error>0</Error> <Error>0</Error>
<ExitCodeStop>0</ExitCodeStop> <ExitCodeStop>0</ExitCodeStop>
@ -52,15 +55,15 @@
<CreateHexFile>1</CreateHexFile> <CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation> <DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation> <BrowseInformation>1</BrowseInformation>
<ListingPath /> <ListingPath></ListingPath>
<HexFormatSelection>1</HexFormatSelection> <HexFormatSelection>1</HexFormatSelection>
<Merge32K>0</Merge32K> <Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile> <CreateBatchFile>0</CreateBatchFile>
<BeforeCompile> <BeforeCompile>
<RunUserProg1>0</RunUserProg1> <RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2> <RunUserProg2>0</RunUserProg2>
<UserProg1Name /> <UserProg1Name></UserProg1Name>
<UserProg2Name /> <UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode> <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode> <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X> <nStopU1X>0</nStopU1X>
@ -69,8 +72,8 @@
<BeforeMake> <BeforeMake>
<RunUserProg1>0</RunUserProg1> <RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2> <RunUserProg2>0</RunUserProg2>
<UserProg1Name /> <UserProg1Name></UserProg1Name>
<UserProg2Name /> <UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode> <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode> <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X> <nStopB1X>0</nStopB1X>
@ -79,15 +82,15 @@
<AfterMake> <AfterMake>
<RunUserProg1>0</RunUserProg1> <RunUserProg1>0</RunUserProg1>
<RunUserProg2>1</RunUserProg2> <RunUserProg2>1</RunUserProg2>
<UserProg1Name /> <UserProg1Name></UserProg1Name>
<UserProg2Name /> <UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode> <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode> <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X> <nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X> <nStopA2X>0</nStopA2X>
</AfterMake> </AfterMake>
<SelectedForBatchBuild>1</SelectedForBatchBuild> <SelectedForBatchBuild>1</SelectedForBatchBuild>
<SVCSIdString /> <SVCSIdString></SVCSIdString>
</TargetCommonOption> </TargetCommonOption>
<CommonProperty> <CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler> <UseCPPCompiler>0</UseCPPCompiler>
@ -101,8 +104,8 @@
<AssembleAssemblyFile>0</AssembleAssemblyFile> <AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly> <PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode> <StopOnExitCode>3</StopOnExitCode>
<CustomArgument /> <CustomArgument></CustomArgument>
<IncludeLibraryModules /> <IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>0</ComprImg> <ComprImg>0</ComprImg>
</CommonProperty> </CommonProperty>
<DllOption> <DllOption>
@ -111,7 +114,7 @@
<SimDlgDll>DCM.DLL</SimDlgDll> <SimDlgDll>DCM.DLL</SimDlgDll>
<SimDlgDllArguments>-pCM3</SimDlgDllArguments> <SimDlgDllArguments>-pCM3</SimDlgDllArguments>
<TargetDllName>SARMCM3.DLL</TargetDllName> <TargetDllName>SARMCM3.DLL</TargetDllName>
<TargetDllArguments /> <TargetDllArguments></TargetDllArguments>
<TargetDlgDll>TCM.DLL</TargetDlgDll> <TargetDlgDll>TCM.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pCM3</TargetDlgDllArguments> <TargetDlgDllArguments>-pCM3</TargetDlgDllArguments>
</DllOption> </DllOption>
@ -136,10 +139,10 @@
<bUseTDR>1</bUseTDR> <bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2V8M.DLL</Flash2> <Flash2>BIN\UL2V8M.DLL</Flash2>
<Flash3>"" ()</Flash3> <Flash3>"" ()</Flash3>
<Flash4 /> <Flash4></Flash4>
<pFcarmOut /> <pFcarmOut></pFcarmOut>
<pFcarmGrp /> <pFcarmGrp></pFcarmGrp>
<pFcArmRoot /> <pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst> <FcArmLst>0</FcArmLst>
</Utilities> </Utilities>
<TargetArmAds> <TargetArmAds>
@ -172,7 +175,7 @@
<RvctClst>0</RvctClst> <RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst> <GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M3"</AdsCpuType> <AdsCpuType>"Cortex-M3"</AdsCpuType>
<RvctDeviceName /> <RvctDeviceName></RvctDeviceName>
<mOS>0</mOS> <mOS>0</mOS>
<uocRom>0</uocRom> <uocRom>0</uocRom>
<uocRam>0</uocRam> <uocRam>0</uocRam>
@ -306,7 +309,7 @@
<Size>0x0</Size> <Size>0x0</Size>
</OCR_RVCT10> </OCR_RVCT10>
</OnChipMemories> </OnChipMemories>
<RvctStartVector /> <RvctStartVector></RvctStartVector>
</ArmAdsMisc> </ArmAdsMisc>
<Cads> <Cads>
<interw>1</interw> <interw>1</interw>
@ -333,9 +336,9 @@
<v6WtE>0</v6WtE> <v6WtE>0</v6WtE>
<v6Rtti>0</v6Rtti> <v6Rtti>0</v6Rtti>
<VariousControls> <VariousControls>
<MiscControls /> <MiscControls></MiscControls>
<Define>USE_HAL_DRIVER,STM32F103xB</Define> <Define>USE_HAL_DRIVER,STM32F103xB</Define>
<Undefine /> <Undefine></Undefine>
<IncludePath>../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include</IncludePath> <IncludePath>../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include</IncludePath>
</VariousControls> </VariousControls>
</Cads> </Cads>
@ -351,10 +354,10 @@
<useXO>0</useXO> <useXO>0</useXO>
<ClangAsOpt>4</ClangAsOpt> <ClangAsOpt>4</ClangAsOpt>
<VariousControls> <VariousControls>
<MiscControls /> <MiscControls></MiscControls>
<Define /> <Define></Define>
<Undefine /> <Undefine></Undefine>
<IncludePath /> <IncludePath></IncludePath>
</VariousControls> </VariousControls>
</Aads> </Aads>
<LDads> <LDads>
@ -364,15 +367,15 @@
<noStLib>0</noStLib> <noStLib>0</noStLib>
<RepFail>1</RepFail> <RepFail>1</RepFail>
<useFile>0</useFile> <useFile>0</useFile>
<TextAddressRange /> <TextAddressRange></TextAddressRange>
<DataAddressRange /> <DataAddressRange></DataAddressRange>
<pXoBase /> <pXoBase></pXoBase>
<ScatterFile /> <ScatterFile></ScatterFile>
<IncludeLibs /> <IncludeLibs></IncludeLibs>
<IncludeLibsPath /> <IncludeLibsPath></IncludeLibsPath>
<Misc /> <Misc></Misc>
<LinkerInputFile /> <LinkerInputFile></LinkerInputFile>
<DisabledWarnings /> <DisabledWarnings></DisabledWarnings>
</LDads> </LDads>
</TargetArmAds> </TargetArmAds>
</TargetOption> </TargetOption>
@ -538,6 +541,7 @@
</Groups> </Groups>
</Target> </Target>
</Targets> </Targets>
<RTE> <RTE>
<apis/> <apis/>
<components> <components>
@ -550,6 +554,7 @@
</components> </components>
<files/> <files/>
</RTE> </RTE>
<LayerInfo> <LayerInfo>
<Layers> <Layers>
<Layer> <Layer>
@ -558,5 +563,5 @@
</Layer> </Layer>
</Layers> </Layers>
</LayerInfo> </LayerInfo>
</Project>
</Project>

View File

@ -461,11 +461,11 @@ ARM Macro Assembler Page 8
Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw
ork --depend=car\startup_stm32f103xb.d -ocar\startup_stm32f103xb.o -I.\RTE\_CAR ork --depend=car\startup_stm32f103xb.d -ocar\startup_stm32f103xb.o -I.\RTE\_CAR
-IE:\Users\lenovo\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\CMSIS\Core\Include - -IE:\Users\Administrator\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\CMSIS\Core\In
IE:\Users\lenovo\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.2.0\Device\Includ clude -IE:\Users\Administrator\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.2.0
e --predefine="__MICROLIB SETA 1" --predefine="__UVISION_VERSION SETA 536" --pr \Device\Include --predefine="__MICROLIB SETA 1" --predefine="__UVISION_VERSION
edefine="_RTE_ SETA 1" --predefine="STM32F10X_MD SETA 1" --predefine="_RTE_ SET SETA 536" --predefine="_RTE_ SETA 1" --predefine="STM32F10X_MD SETA 1" --predef
A 1" --list=startup_stm32f103xb.lst startup_stm32f103xb.s ine="_RTE_ SETA 1" --list=startup_stm32f103xb.lst startup_stm32f103xb.s

View File

@ -1,5 +1,5 @@
########################################################################################################################## ##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [4.4.0-B60] date: [Thu Jul 11 23:29:43 CST 2024] # File automatically-generated by tool: [projectgenerator] version: [4.4.0-B60] date: [Sat Jul 13 14:09:19 CST 2024]
########################################################################################################################## ##########################################################################################################################
# ------------------------------------------------ # ------------------------------------------------
@ -60,10 +60,10 @@ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c \ Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c \
Core/Src/system_stm32f1xx.c \ Core/Src/system_stm32f1xx.c \
Core/Src/sysmem.c \ Core/Src/sysmem.c \
Core/Src/syscalls.c \
Core/Src/hcsr04.c \ Core/Src/hcsr04.c \
Core/Src/motor.c \ Core/Src/motor.c \
Core/Src/led.c \ Core/Src/led.c \
Core/Src/syscalls.c
# ASM sources # ASM sources
ASM_SOURCES = \ ASM_SOURCES = \

263
STM32Make.make Normal file
View File

@ -0,0 +1,263 @@
##########################################################################################################################
# File automatically-generated by STM32forVSCode
##########################################################################################################################
# ------------------------------------------------
# Generic Makefile (based on gcc)
#
# ChangeLog :
# 2017-02-10 - Several enhancements + project update mode
# 2015-07-22 - first version
# ------------------------------------------------
######################################
# target
######################################
TARGET = CAR
######################################
# building variables
######################################
# debug build?
DEBUG = 1
# optimization
OPT = -Og
#######################################
# paths
#######################################
# Build path
BUILD_DIR = build
######################################
# source
######################################
# C sources
C_SOURCES = \
Core/Src/gpio.c \
Core/Src/hcsr04.c \
Core/Src/i2c.c \
Core/Src/led.c \
Core/Src/main.c \
Core/Src/motor.c \
Core/Src/stm32f1xx_hal_msp.c \
Core/Src/stm32f1xx_it.c \
Core/Src/syscalls.c \
Core/Src/sysmem.c \
Core/Src/system_stm32f1xx.c \
Core/Src/tim.c \
Core/Src/usart.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_i2c.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c \
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c
CPP_SOURCES = \
# ASM sources
ASM_SOURCES = \
startup_stm32f103xb.s
#######################################
# binaries
#######################################
PREFIX = arm-none-eabi-
POSTFIX = "
# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx)
# either it can be added to the PATH environment variable.
GCC_PATH="E:/PROGRAM FILES/GNU ARM EMBEDDED TOOLCHAIN/10 2021.10/BIN
ifdef GCC_PATH
CXX = $(GCC_PATH)/$(PREFIX)g++$(POSTFIX)
CC = $(GCC_PATH)/$(PREFIX)gcc$(POSTFIX)
AS = $(GCC_PATH)/$(PREFIX)gcc$(POSTFIX) -x assembler-with-cpp
CP = $(GCC_PATH)/$(PREFIX)objcopy$(POSTFIX)
SZ = $(GCC_PATH)/$(PREFIX)size$(POSTFIX)
else
CXX = $(PREFIX)g++
CC = $(PREFIX)gcc
AS = $(PREFIX)gcc -x assembler-with-cpp
CP = $(PREFIX)objcopy
SZ = $(PREFIX)size
endif
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S
#######################################
# CFLAGS
#######################################
# cpu
CPU = -mcpu=cortex-m3
# fpu
FPU =
# float-abi
FLOAT-ABI =
# mcu
MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)
# macros for gcc
# AS defines
AS_DEFS =
# C defines
C_DEFS = \
-DSTM32F103xB \
-DUSE_HAL_DRIVER
# CXX defines
CXX_DEFS = \
-DSTM32F103xB \
-DUSE_HAL_DRIVER
# AS includes
AS_INCLUDES = \
# C includes
C_INCLUDES = \
-ICore/Inc \
-IDrivers/CMSIS/Device/ST/STM32F1xx/Include \
-IDrivers/CMSIS/Include \
-IDrivers/STM32F1xx_HAL_Driver/Inc \
-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy
# compile gcc flags
ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
CXXFLAGS = $(MCU) $(CXX_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections -feliminate-unused-debug-types
ifeq ($(DEBUG), 1)
CFLAGS += -g -gdwarf -ggdb
CXXFLAGS += -g -gdwarf -ggdb
endif
# Add additional flags
CFLAGS += -Wall -fdata-sections -ffunction-sections
ASFLAGS += -Wall -fdata-sections -ffunction-sections
CXXFLAGS +=
# Generate dependency information
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
CXXFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
#######################################
# LDFLAGS
#######################################
# link script
LDSCRIPT = STM32F103C8Tx_FLASH.ld
# libraries
LIBS = -lc -lm -lnosys
LIBDIR = \
# Additional LD Flags from config file
ADDITIONALLDFLAGS = -Wl,--print-memory-usage -specs=nano.specs
LDFLAGS = $(MCU) $(ADDITIONALLDFLAGS) -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections
# default action: build all
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
#######################################
# build the application
#######################################
# list of cpp program objects
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(CPP_SOURCES:.cpp=.o)))
vpath %.cpp $(sort $(dir $(CPP_SOURCES)))
# list of C objects
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
vpath %.c $(sort $(dir $(C_SOURCES)))
# list of ASM program objects
UPPER_CASE_ASM_SOURCES = $(filter %.S,$(ASM_SOURCES))
LOWER_CASE_ASM_SOURCES = $(filter %.s,$(ASM_SOURCES))
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(UPPER_CASE_ASM_SOURCES:.S=.o)))
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(LOWER_CASE_ASM_SOURCES:.s=.o)))
vpath %.s $(sort $(dir $(ASM_SOURCES)))
$(BUILD_DIR)/%.o: %.cpp STM32Make.make | $(BUILD_DIR)
$(CXX) -c $(CXXFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.cpp=.lst)) $< -o $@
$(BUILD_DIR)/%.o: %.cxx STM32Make.make | $(BUILD_DIR)
$(CXX) -c $(CXXFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.cxx=.lst)) $< -o $@
$(BUILD_DIR)/%.o: %.c STM32Make.make | $(BUILD_DIR)
$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
$(BUILD_DIR)/%.o: %.s STM32Make.make | $(BUILD_DIR)
$(AS) -c $(CFLAGS) $< -o $@
$(BUILD_DIR)/%.o: %.S STM32Make.make | $(BUILD_DIR)
$(AS) -c $(CFLAGS) $< -o $@
$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) STM32Make.make
$(CC) $(OBJECTS) $(LDFLAGS) -o $@
$(SZ) $@
$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
$(HEX) $< $@
$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
$(BIN) $< $@
$(BUILD_DIR):
mkdir $@
#######################################
# flash
#######################################
flash: $(BUILD_DIR)/$(TARGET).elf
"E:/PROGRAM FILES/OPENOCD-20231002-0.12.0/BIN/OPENOCD.EXE" -f ./openocd.cfg -c "program $(BUILD_DIR)/$(TARGET).elf verify reset exit"
#######################################
# erase
#######################################
erase: $(BUILD_DIR)/$(TARGET).elf
"E:/PROGRAM FILES/OPENOCD-20231002-0.12.0/BIN/OPENOCD.EXE" -f ./openocd.cfg -c "init; reset halt; stm32f1x mass_erase 0; exit"
#######################################
# clean up
#######################################
clean:
cmd /c rd /s /q $(BUILD_DIR)
#######################################
# custom makefile rules
#######################################
#######################################
# dependencies
#######################################
-include $(wildcard $(BUILD_DIR)/*.d)
# *** EOF ***