Commit 9520ebf2 by 刘大爷来也

提交电机驱动

parent 7f5eea5b
This source diff could not be displayed because it is too large. You can view the blob instead.
#ifndef BUZZER_H
#define BUZZER_H
void Buzzer_On(void);
void Buzzer_Off(void);
#endif
#ifndef COMMON_H
#define COMMON_H
#include "stm32f10x.h"
#define D14_GET() (((GPIOD->IDR >> 14) & 1) ? 1 : 0)
// 定义系统状态的枚举类型
typedef enum {
STATE_IDLE, // 系统处于空闲状态
STATE_MOTOR_RUNNING, // 电机正在运行
STATE_EMERGENCY_STOP, // 紧急停止状态
STATE_BACKUP_RADAR_ACTIVE, // 备用雷达激活状态
STATE_PARKING_SENSOR_ACTIVE, //倒车雷达激活状态
STATE_DISTANCE_SWITCH_ACTIVE,// 距离开关激活状态
STATE_PHOTOELECTRIC_SWITCH_ACTIVE // 光电开关激活状态
} SystemState;
// 状态处理函数
void StateMachineHandler(SystemState newState);
void Delay(uint32_t time, char unit);
void Total_GPIO_Init(void);
void Total_EXTI_Init(void);
#endif // COMMON
#ifndef DISTANCE_SWITCH_H
#define DISTANCE_SWITCH_H
void Distance_Switch_Interruption(void);
#endif // DISTANCE_SWITCH
#ifndef DS18B20_H
#define DS18B20_H
#include "stm32f10x.h"
// 引脚定义
#define DS18B20_DQ_PIN (1 << 12) // PD12
#define DS18B20_PORT GPIOD
// 设置 DQ 引脚为输出模式
#define DQ_OUT() { \
GPIOD->CRH &= ~(0xF << (4 * 4)); /* 清除配置 */ \
GPIOD->CRH |= (0x3 << (4 * 4)); /* 设置为推挽输出模式,最大50MHz */ \
}
// 设置 DQ 引脚为输入模式
#define DQ_IN() { \
GPIOD->CRH &= ~(0xF << (4 * 4)); /* 清除配置 */ \
GPIOD->CRH |= (0x4 << (4 * 4)); /* 设置为浮空输入模式 */ \
}
// 获取 DQ 引脚的电平变化
#define DQ_GET() ((GPIOD->IDR & DS18B20_DQ_PIN) ? 1 : 0)
// DQ 输出高电平或低电平
#define DQ(x) ((x) ? (GPIOD->BSRR = DS18B20_DQ_PIN) : (GPIOD->BRR = DS18B20_DQ_PIN))
uint8_t DS18B20_Check(void);
char DS18B20_Init(void);
void DS18B20_Start(void);
float DS18B20_GetTemperture(void);
#endif // DS18B20_H
#ifndef EMERGENCY_STOP_H
#define EMERGENCY_STOP_H
void Emergency_Stop_Interrupt(void);
#endif // EMERGENCY_STOP
#ifndef MOTOR_COMMON_H
#define MOTOR_COMMON_H
#define SYSCLK_FREQUENCY 72000000 // 主时钟频率(72 MHz)
#define STEPMOTOR_ANGLEPERSTEP 1.8 //步进电机步距角
#define STEPMOTOR_FREDIV 32 //步进电机分频系数(细分数)
#define STEPMOTOR_PERDISTANCE 2 //步进电机一转走2mm
#define STEPMOTOR_PULSEPERROUND ((360/STEPMOTOR_ANGLEPERSTEP)*STEPMOTOR_FREDIV) //步进电机每转所需要脉冲的脉冲个数
#define STEPMOTOR_PULSEPERDISTANCE STEPMOTOR_PULSEPERROUND/STEPMOTOR_PERDISTANCE //步进电机每1mm所需要脉冲的脉冲个数
#define STEPMOTOR_FREQ_ROUNDPERMIN (9375/(STEPMOTOR_FREDIV*2)) //步进电机1r/min需要配置的定时器重载值((72000000*60/STEPMOTOR_PULSEPERROUND)/72)(假设时钟分频为8) 定时时间=60s/(每转需要的脉冲个数) 秒冲个数*2是因为只认高-低
#define STEPMOTOR_MAX_SPEED(psc, arr) (SYSCLK_FREQUENCY / ((psc + 1) * (arr + 1)) * 60 / STEPMOTOR_PULSEPERROUND)
#include "stdint.h"
#include <stdbool.h>
typedef enum {
SPEED_NONE, // 匀速
SPEED_ACC, // 加速
SPEED_DEC, // 减速
SPEED_STOP, // 停止
} SpeedStatus;
typedef enum {
ABSOLUTE_COUNT,
RELATIVE_COUNT,
CIRCULAR_COUNT,
BIDIRECTIONAL_COUNT,
INCREMENTAL_COUNT
} StepCountMode;
typedef struct {
uint32_t stepcount; // 步数(脉冲数)
uint8_t direction; // 方向 (0: 逆时针, 1: 顺时针)
uint16_t curSpeed; // 当前速度 (步/秒)
uint16_t desSpeed; // 目标速度 (步/秒)
uint16_t maxSpeed; // 最大转速
SpeedStatus speedStatus; // 速度状态
uint8_t speedlevel; // 速度级别 0:正常、1:快速、2:慢速
StepCountMode stepcountMode; // 脉冲计数模式
uint16_t curlocation; // 当前位置(角度判断)
uint16_t deslocation; // 目标位置
uint16_t acceleration; // 加速度 (步/秒^2)
uint16_t deceleration; // 减速度 (步/秒^2)
uint16_t psc; // 预分频器
uint16_t arr; // 自动重装载寄存器
} Motor;
#endif // MOTOR_COMMON_H
#ifndef ONEWIRE_H
#define ONEWIRE_H
#include "stm32f10x.h"
// 引脚定义
#define ONEWIRE_PIN (1 << 12) // PD12
#define ONEWIRE_PORT GPIOD
// 初始化 One-Wire 总线 (PE1)
void Onewire_Init(void);
// 设置引脚为输出模式
void Onewire_Pin_Output(void);
// 设置引脚为输入模式
void Onewire_Pin_Input(void);
// 复位 One-Wire 总线并检测传感器是否存在
uint8_t Onewire_Reset(void);
// 向 One-Wire 设备发送一位数据
void Onewire_SendBit(unsigned char Bit);
// 从 One-Wire 设备接收一位数据
unsigned char Onewire_ReceiveBit(void);
// 向 One-Wire 设备发送一个字节数据
void Onewire_SendByte(unsigned char Byte);
// 从 One-Wire 设备接收一个字节数据
unsigned char Onewire_ReceiveByte(void);
#endif // ONEWIRE_H
#ifndef PARKING_SENSOR_H
#define PARKING_SENSOR_H
#include "stm32f10x.h" // 包含STM32F103的寄存器定义头文件
// 全局变量
extern volatile uint32_t pulse_time ; // 脉宽时间
extern volatile double distance_cm ; // 距离
extern volatile uint8_t capture_state ; // 捕获状态标志
// 动态配置 PE0 - PE15 引脚
void Configure_PE_Pin(uint8_t pin, uint8_t mode);
// 初始化 TIM2 为捕获模式
void TIM2_Capture_Init(void);
// 发送触发信号
void SendTriggerSignal(void);
double CalculateDistance();
void Parking_Sensor_Interruption(void);
#endif // parking_sensor
#ifndef PHOTOELECTRIC_SWITCH_H
#define PHOTOELECTRIC_SWITCH_H
void Photoelectric_Switch_Interrupt(void);
#endif // PHOTOELECTRIC_SWITCH
#ifndef PNEUMATIC_SOLENOID_H
#define PNEUMATIC_SOLENOID_H
#include "stdint.h"
//控制气动电磁阀的高低电平
void Pneumatic_Solenoid_Control(uint8_t index,unsigned char bitValue);
//查询气动电磁阀的电平
unsigned char find_Pneumatic_Solenoid(uint8_t index);
#endif // PNEUMATIC_SOLENOID
#ifndef STEPPER_MOTOR_H
#define STEPPER_MOTOR_H
#include "motor_common.h"
#include "stdint.h"
#include <stdbool.h>
typedef struct {
Motor base; // 继承自公共结构体
} RotateMotor;
// 更新电机状态
void Update_Motor_Status(RotateMotor *motor, SpeedStatus status, uint32_t targetSpeed, uint32_t acceleration);
;
void Rotate_SetDirection(int direction);
// 使能或禁用旋转电机
void Rotate_Enable_Rotate(bool enable);
// 设置PWM频率
void Set_PWM_Frequency(uint32_t frequency);
// 梯形加速算法
void RotateMotor_Accelerate(uint32_t targetRPM, uint32_t acceleration);
//梯形减速算法
void RotateMotor_Decelerate(uint32_t currentRPM, uint32_t deceleration);
void TIM3_CH1_Init(uint16_t psc,uint16_t arr);
#endif // STEPPER_MOTOR_H
#ifndef STEPPER_MOTOR_H
#define STEPPER_MOTOR_H
#define SYSCLK_FREQUENCY 72000000 // 主时钟频率(72 MHz)
#define STEPMOTOR_ANGLEPERSTEP 1.8 //步进电机步距角
#define STEPMOTOR_FREDIV 32 //步进电机分频系数(细分数)
#define STEPMOTOR_PERDISTANCE 2 //步进电机一转走2mm
#define STEPMOTOR_PULSEPERROUND ((360/STEPMOTOR_ANGLEPERSTEP)*STEPMOTOR_FREDIV) //步进电机每转所需要脉冲的脉冲个数
#define STEPMOTOR_PULSEPERDISTANCE STEPMOTOR_PULSEPERROUND/STEPMOTOR_PERDISTANCE //步进电机每1mm所需要脉冲的脉冲个数
#define STEPMOTOR_FREQ_ROUNDPERMIN (9375/(STEPMOTOR_FREDIV*2)) //步进电机1r/min需要配置的定时器重载值((72000000*60/STEPMOTOR_PULSEPERROUND)/72)(假设时钟分频为8) 定时时间=60s/(每转需要的脉冲个数) 秒冲个数*2是因为只认高-低
#define STEPMOTOR_MAX_SPEED(psc, arr) (SYSCLK_FREQUENCY / ((psc + 1) * (arr + 1)) * 60 / STEPMOTOR_PULSEPERROUND)
typedef enum
{
SPEED_NONE, // 无速度变化
SPEED_ACC, // 加速
SPEED_DEC, // 减速
SPEED_STOP, // 停止
} SpeedStatus;
// 定义步进电机配置结构体
typedef struct {
unsigned stepcount; // 步数(脉冲数)
unsigned direction; // 方向 (0: 逆时针, 1: 顺时针)
unsigned curSpeed; // 当前速度 (步/秒)
unsigned desSpeed; // 目标速度 (步/秒)
unsigned maxSpeed; //最大转速
SpeedStatus speedStatus; // 速度状态
unsigned stepcountMode; // 脉冲计数模式
unsigned curlocation; // 当前位置
unsigned deslocation; // 目标位置
unsigned acceleration; // 加速度 (步/秒^2)
unsigned deceleration; // 减速度 (步/秒^2)
uint16_t psc; //预分频器
uint16_t arr; //自动重装载寄存器
} StepMotor;
// 更新电机状态
void Update_Motor_Status(StepMotor *motor, SpeedStatus status, uint32_t targetSpeed, uint32_t acceleration);
;
void Set_Direction(int direction);
// 使能或禁用步进电机
void Enable_Stepper(bool enable);
// 设置PWM频率
void Set_PWM_Frequency(uint32_t frequency)
// 梯形加减速算法
void StepMotor(int steps, int direction, int max_speed, int acceleration);
void Delay(uint32_t delay);
void Timer_Frequency(int & frequency,StepMotor *stepMotor);
void TIM3_Init(uint16_t &psc,uint16_t &arr);
#endif // STEPPER_MOTOR_H
\ No newline at end of file
// ds18b20.h
#ifndef TEMPERATURE_SENSOR_H
#define TEMPERATURE_SENSOR_H
void TemperatureSensor_ConvertT(void); // 启动温度转换
float TemperatureSensor_ReadT(void); // 读取温度数据
#endif
#ifndef WALKING_MOTOR_H
#define WALKING_MOTOR_H
#include "motor_common.h"
#include "stdint.h"
#include <stdbool.h>
typedef struct {
Motor base; // 继承自公共结构体
} WalkingMotor;
// 更新电机状态
void Walking_Update_Motor_Status(WalkingMotor *motor, SpeedStatus status, uint32_t targetSpeed, uint32_t acceleration);
;
void Walking_SetDirection(int direction);
// 使能或禁用旋转电机
void Walking_Enable_Rotate(bool enable);
// 设置PWM频率
void Walking_Set_PWM_Frequency(uint32_t frequency);
// 梯形加速算法
void WalkingMotor_Accelerate(uint32_t targetRPM, uint32_t acceleration);
//梯形减速算法
void WalkingMotor_Decelerate(uint32_t currentRPM, uint32_t deceleration);
void TIM3_CH2_Init(uint16_t psc,uint16_t arr);
#endif
#include "buzzer.h"
#include "stm32f10x.h"
#include "common.h"
void Buzzer_On(void) {
GPIOE->BSRR = GPIO_BSRR_BS9; // 设置PE9为高电平
Delay(1, 's');
}
void Buzzer_Off(void) {
GPIOE->BRR = GPIO_BRR_BR9; // 设置PE9为低电平
Delay(1, 's');
}
#include "common.h"
#include "stm32f10x.h"
#include "parking_sensor.h"
#include "distance_switch.h"
#include "photoelectric_switch.h"
#include "emergency_stop.h"
#include "uart_log.h"
void Delay(uint32_t time, char unit) {
uint32_t cycles = 0;
const uint32_t SYSCLK_FREQ = 72000000; // 72 MHz
// 根据单位选择不同的延时计算
switch (unit) {
case 'n': // 纳秒延时
// 每个时钟周期为 13.89 纳秒
cycles = (time * SYSCLK_FREQ) / 1000000000; // 纳秒转为时钟周期
break;
case 'u': // 微秒延时
cycles = (time * SYSCLK_FREQ) / 1000000; // 微秒转为时钟周期
break;
case 'm': // 毫秒延时
cycles = (time * SYSCLK_FREQ) / 1000; // 毫秒转为时钟周期
break;
case 's': // 秒延时
cycles = time * SYSCLK_FREQ; // 秒转为时钟周期
break;
default:
// 无效的单位,直接返回
return;
}
// 使用空操作进行延时
for (volatile uint32_t i = 0; i < cycles; i++) {
__NOP(); // 空操作
}
}
void Total_GPIO_Init(void) {
//电机配置01
// 使能 GPIOC 和 GPIOF 的时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPFEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPGEN; // 启用GPIOG时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPEEN; // 启用GPIOE时钟
// 使能GPIOE和GPIOD时钟,同时使能AFIO时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPDEN;
// 使能GPIOB
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
// 使能 AFIO 时钟,用于重映射
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
// 配置 PC6 引脚为复用推挽输出 (50 MHz)
GPIOC->CRL &= ~(0xF << 24); // 清空 PC6 配置
GPIOC->CRL |= (0xB << 24); // 配置为复用推挽输出 (0xB = 1011)
// 配置 PC5 为通用推挽输出 (方向)
GPIOC->CRL &= ~(0xF << 20); // 清空 PC5 配置
GPIOC->CRL |= (0x3 << 20); // 配置为通用推挽输出 (0x3 = 0011)
// 配置 PF11 为通用推挽输出 (使能)
GPIOF->CRH &= ~(0xF <<12); // 清空 PF11 配置
GPIOF->CRH |= (0x3 << 12); // 配置为通用推挽输出 (0x3 = 0011)
//电机配置02
// 配置 PC7 引脚为复用推挽输出 (50 MHz)
GPIOC->CRL &= ~((uint32_t)0xF << (4*7)); // 清空 PC7 配置
GPIOC->CRL |= ((uint32_t)0xB << (4*7)); // 配置为复用推挽输出 (0xB = 1011)
// 配置 PF12 为通用推挽输出 (方向)
GPIOF->CRH &= ~(0xF << (4*4)); // 清空 PF12 配置
GPIOF->CRH |= (0x3 <<(4*4)); // 配置为通用推挽输出 (0x3 = 0011)
// 配置 PC4 为通用推挽输出 (使能)
GPIOC->CRL &= ~(0xF <<(4*4)); // 清空 PC4 配置
GPIOC->CRL |= (0x3 << (4*4)); // 配置为通用推挽输出 (0x3 = 0011)
// 重映射 TIM3_CH1 到 PC6 TIM3_CH2 到 PC7
AFIO->MAPR |= AFIO_MAPR_TIM3_REMAP_FULLREMAP;
//气动电磁阀GPIO配置
// 配置 PF13, PF14, PF15 为复用推挽输出 (50 MHz)
GPIOF->CRH &= ~(0xF <<(4*5)); // 清空 PF13 配置 (位20-23)
GPIOF->CRH |= (0x3 <<(4*5)); // 配置 PF13 为通用推挽输出
GPIOF->CRH &= ~(0xF <<(4*6)); // 清空 PF14 配置 (位24-27)
GPIOF->CRH |= (0x3 << (4*6)); // 配置 PF14 为通用推挽输出
GPIOF->CRH &= ~((uint32_t)0x3 <<(4*7)); // 清空 PF15 配置 (位28-31)
GPIOF->CRH |= ((uint32_t)0x3 << (4*7)); // 配置 PF15 为通用推挽输出
// 配置 PG0, PG1 为复用推挽输出 (50 MHz)
GPIOG->CRL &= ~(0xF << (4*0)); // 清空 PG0 配置 (位0-3)
GPIOG->CRL |= (0x3 << (4*0)); // 配置 PG0 为通用推挽输出
GPIOG->CRL &= ~(0xF << (4*1)); // 清空 PG1 配置 (位4-7)
GPIOG->CRL |= (0x3 << (4*1)); // 配置 PG1 为通用推挽输出
// 配置 PE7, PE8 为复用推挽输出 (50 MHz)
GPIOE->CRL &= ~(0xF << (4*7)); // 清空 PE7 配置 (位20-23)
GPIOE->CRL |= (0x3 << (4*7)); // 配置 PE7 为通用推挽输出
GPIOE->CRH &= ~(0xF << (4*0)); // 清空 PE8 配置 (位24-27)
GPIOE->CRH |= (0x3 << (4*0)); // 配置 PE8 为通用推挽输出
//倒车雷达
// 配置PE10-PE15为推挽输出,默认为低电平
GPIOE->CRH &= ~(0xFFFFF << 8); // 清空PE10-PE15配置
GPIOE->CRH |= 0x11111 << 8; // 设置PE10-PE15为推挽输出
GPIOE->BRR = 0xFC00; // 默认低电平(PE10到PE15)
// 配置 PD14 为上拉输入模式
GPIOD->CRH &= ~(0xF << 24); // 清空 PD14 的配置
GPIOD->CRH |= (0x4 << 24); // 设置为上拉/下拉输入模式
//行走距离开关 distance_switch
// 配置PG15为输入模式(浮空输入)
GPIOG->CRH &= ~((uint32_t)0xF << (4*7)); // 清除PG15的配置
GPIOG->CRH |= ((uint32_t)0x4 << (4*7)); // 设置为浮空输入模式
// 配置PD6为输入模式(浮空输入)
GPIOD->CRL &= ~(0xF << 24); // 清除PD6的配置
GPIOD->CRL |= (0x4 << 24); // 设置为浮空输入模式
//旋转光电开关 photoelectric_switch
// 配置PB9为输入模式(浮空输入)
GPIOB->CRH &= ~(0xF << 4); // 清除PB9的配置
GPIOB->CRH |= (0x4 << 4); // 设置为浮空输入模式
// 配置PE0为输入模式(浮空输入)
GPIOE->CRL &= ~(0xF << 0); // 清除PE0的配置
GPIOE->CRL |= (0x4 << 0); // 设置为浮空输入模式
//Onewire_Init
// 配置 PE1 为推挽输出(初始为高电平)
GPIOD->CRH &= ~(0xF << 4*4); // 清除PD12的配置
GPIOD->CRH |= (0x3 << 4*4); // 设置为推挽输出模式
//急停按钮 emergency_stop
// 配置 PE2 为输入上拉
GPIOE->CRL &= ~(0xF << (2 * 4)); // 清除 PE2 配置位
GPIOE->CRL |= (0x8 << (2 * 4)); // 配置 PE2 为上拉输入模式
GPIOE->ODR |= (1 << 2);
//蜂鸣器 buzzer
GPIOE->CRH &= ~(0xF << (4 * 1));
GPIOE->CRH |= (0x03 << (4 * 1));
}
void Total_EXTI_Init(void) {
// 设置优先级组为组2 (2位抢占优先级 + 2位子优先级)
//SCB->AIRCR = (0x05FA << 16) | (2 << 8); // 设置优先级分组
// 倒车雷达中断
AFIO->EXTICR[3] &= ~AFIO_EXTICR4_EXTI14; // 清除EXTI14
AFIO->EXTICR[3] |= AFIO_EXTICR4_EXTI14_PD; // 将PD14连接到EXTI14
EXTI->FTSR &= ~EXTI_FTSR_TR14; // 先清除下降沿触发配置
EXTI->RTSR &= ~EXTI_RTSR_TR14; // 先清除上升沿触发配置
EXTI->RTSR |= EXTI_RTSR_TR14; // 上升沿触发
EXTI->FTSR |= EXTI_RTSR_TR14; // 下降沿触发
EXTI->IMR |= EXTI_IMR_MR14; // 使能中断
NVIC_EnableIRQ(EXTI15_10_IRQn);
NVIC_SetPriority(EXTI15_10_IRQn, 0x02); // 设置中断优先级
// 行走距离开关中断
AFIO->EXTICR[1] &= ~(AFIO_EXTICR2_EXTI6); // 清除EXTI6的配置
AFIO->EXTICR[1] |= AFIO_EXTICR2_EXTI6_PD; // 连接PD6到EXTI6
AFIO->EXTICR[3] &= ~(AFIO_EXTICR4_EXTI15); // 清除EXTI15的配置
AFIO->EXTICR[3] |= AFIO_EXTICR4_EXTI15_PG; // 连接PG15到EXTI15
EXTI->RTSR |= EXTI_RTSR_TR6 | EXTI_RTSR_TR15; // 配置上升沿触发
EXTI->FTSR |= EXTI_FTSR_TR6 | EXTI_FTSR_TR15; // 配置下降沿触发
EXTI->IMR |= EXTI_IMR_MR6 | EXTI_IMR_MR15; // 使能中断线6和15
// 使能EXTI9_5_IRQn中断
//NVIC_EnableIRQ(EXTI9_5_IRQn); // PD6 属于 EXTI9_5_IRQn
NVIC_SetPriority(EXTI9_5_IRQn, 0x0B); // 设置中断优先级
// 使能EXTI15_10_IRQn中断
//NVIC_EnableIRQ(EXTI15_10_IRQn); // EXTI15 属于 EXTI15_10_IRQn
//NVIC_SetPriority(EXTI15_10_IRQn, 0x06); // 设置中断优先级
// 旋转光电开关中断
AFIO->EXTICR[2] &= ~(AFIO_EXTICR3_EXTI9); // 清除EXTI9的配置
AFIO->EXTICR[2] |= AFIO_EXTICR3_EXTI9_PB; // 连接PB9到EXTI9
AFIO->EXTICR[0] &= ~(AFIO_EXTICR1_EXTI0); // 清除EXTI0的配置
AFIO->EXTICR[0] |= AFIO_EXTICR1_EXTI0_PE; // 连接PE0到EXTI0
EXTI->RTSR |= EXTI_RTSR_TR9 | EXTI_RTSR_TR0; // 配置上升沿触发
EXTI->FTSR |= EXTI_FTSR_TR9 | EXTI_FTSR_TR0; // 配置下降沿触发
EXTI->IMR |= EXTI_IMR_MR9 | EXTI_IMR_MR0; // 使能中断线9和0
// 使能EXTI9_5_IRQn中断
NVIC_EnableIRQ(EXTI9_5_IRQn); // PB9 属于 EXTI9_5 中断
NVIC_SetPriority(EXTI9_5_IRQn, 0x0C); // 设置优先级
// 使能EXTI0_IRQn中断
NVIC_EnableIRQ(EXTI0_IRQn); // PE0 属于 EXTI0 中断
NVIC_SetPriority(EXTI0_IRQn, 0x0D); // 设置优先级
// 急停按钮中断
//AFIO->EXTICR[0] = (AFIO->EXTICR[0] & ~0xF) | 0x4; // PE2
AFIO->EXTICR[0] &= ~(AFIO_EXTICR1_EXTI2); // 清除EXTI9的配置
AFIO->EXTICR[0] |= AFIO_EXTICR1_EXTI2_PE; // 连接PE2到EXTI2
EXTI->FTSR &= ~EXTI_FTSR_TR2; // 清除上升沿触发
EXTI->RTSR &= ~EXTI_RTSR_TR2; // 清除上升沿触发
EXTI->FTSR |= EXTI_FTSR_TR2; // 使能下降沿触发
EXTI->IMR |= EXTI_IMR_MR2;
NVIC_EnableIRQ(EXTI2_IRQn);
NVIC_SetPriority(EXTI2_IRQn, 0x00); // 设置急停按钮中断优先级为最高
}
// 状态处理函数
void StateMachineHandler(SystemState currentState) {
switch (currentState) {
case STATE_IDLE:
// 处理IDLE状态
break;
case STATE_MOTOR_RUNNING:
// 处理MOTOR_RUNNING状态
break;
case STATE_EMERGENCY_STOP:
// 处理EMERGENCY_STOP状态
Emergency_Stop_Interrupt();
break;
case STATE_PARKING_SENSOR_ACTIVE:
Parking_Sensor_Interruption();
break;
case STATE_DISTANCE_SWITCH_ACTIVE:
Distance_Switch_Interruption();
// 处理DISTANCE_SWITCH_ACTIVE状态
break;
case STATE_PHOTOELECTRIC_SWITCH_ACTIVE:
// 处理PHOTOELECTRIC_SWITCH_ACTIVE状态
Photoelectric_Switch_Interrupt();
break;
default:
// 默认处理
break;
}
}
// 中断服务例程
void EXTI9_5_IRQHandler(void) {
if (EXTI->PR & EXTI_PR_PR6) { // 检查是否是 EXTI 线 6 触发了中断
// 处理 PD6 中断
StateMachineHandler(STATE_DISTANCE_SWITCH_ACTIVE);
// 清除中断标志位
EXTI->PR = EXTI_PR_PR6;
}
if (EXTI->PR & EXTI_PR_PR9) { // 检查是否是 EXTI 线 9 触发了中断
// 处理 PB9 中断
StateMachineHandler(STATE_PHOTOELECTRIC_SWITCH_ACTIVE);
// 清除中断标志位
EXTI->PR = EXTI_PR_PR9;
}
}
// 中断服务例程
void EXTI0_IRQHandler(void) {
if (EXTI->PR & EXTI_PR_PR0) { // 检查是否是EXTI线0触发了中断
// 处理PE0中断
StateMachineHandler(STATE_PHOTOELECTRIC_SWITCH_ACTIVE);
// 清除中断标志位
EXTI->PR = EXTI_PR_PR0;
}
}
//STATE_PARKING_SENSOR_ACTIVE
void EXTI15_10_IRQHandler(void) {
// 处理 PD14 中断
if (EXTI->PR & EXTI_PR_PR14) { // 检查是否是EXTI线14触发了中断
StateMachineHandler(STATE_PARKING_SENSOR_ACTIVE);
EXTI->PR = EXTI_PR_PR14; // 清除中断标志位
}
if (EXTI->PR & EXTI_PR_PR15) { // 检查是否是EXTI线15触发了中断
Serial_Print("EXTI15 triggered\n");
StateMachineHandler(STATE_DISTANCE_SWITCH_ACTIVE);
EXTI->PR = EXTI_PR_PR15; // 清除中断标志位
}
}
void EXTI2_IRQHandler(void) {
if (EXTI->PR & EXTI_PR_PR2) { // 检查是否是EXTI线2触发了中断
// 处理PE2中断(急停按钮)
StateMachineHandler(STATE_EMERGENCY_STOP);
// 清除中断标志位
EXTI->PR = EXTI_PR_PR2;
}
}
#include "common.h"
#include "stm32f10x.h"
#include "parking_sensor.h"
#include "distance_switch.h"
#include "photoelectric_switch.h"
#include "emergency_stop.h"
#include "uart_log.h"
void Delay(uint32_t time, char unit) {
uint32_t cycles = 0;
const uint32_t SYSCLK_FREQ = 72000000; // 72 MHz
// 根据单位选择不同的延时计算
switch (unit) {
case 'n': // 纳秒延时
// 每个时钟周期为 13.89 纳秒
cycles = (time * SYSCLK_FREQ) / 1000000000; // 纳秒转为时钟周期
break;
case 'u': // 微秒延时
cycles = (time * SYSCLK_FREQ) / 1000000; // 微秒转为时钟周期
break;
case 'm': // 毫秒延时
cycles = (time * SYSCLK_FREQ) / 1000; // 毫秒转为时钟周期
break;
case 's': // 秒延时
cycles = time * SYSCLK_FREQ; // 秒转为时钟周期
break;
default:
// 无效的单位,直接返回
return;
}
// 使用空操作进行延时
for (volatile uint32_t i = 0; i < cycles; i++) {
__NOP(); // 空操作
}
}
void Total_GPIO_Init(void) {
//电机配置01
// 使能 GPIOC 和 GPIOF 的时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPFEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPGEN; // 启用GPIOG时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPEEN; // 启用GPIOE时钟
// 使能GPIOE和GPIOD时钟,同时使能AFIO时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPDEN;
// 使能GPIOB
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
// 使能 AFIO 时钟,用于重映射
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
// 配置 PC6 引脚为复用推挽输出 (50 MHz)
GPIOC->CRL &= ~(0xF << 24); // 清空 PC6 配置
GPIOC->CRL |= (0xB << 24); // 配置为复用推挽输出 (0xB = 1011)
// 配置 PC5 为通用推挽输出 (方向)
GPIOC->CRL &= ~(0xF << 20); // 清空 PC5 配置
GPIOC->CRL |= (0x3 << 20); // 配置为通用推挽输出 (0x3 = 0011)
// 配置 PF11 为通用推挽输出 (使能)
GPIOF->CRH &= ~(0xF <<12); // 清空 PF11 配置
GPIOF->CRH |= (0x3 << 12); // 配置为通用推挽输出 (0x3 = 0011)
//电机配置02
// 配置 PC7 引脚为复用推挽输出 (50 MHz)
GPIOC->CRL &= ~((uint32_t)0xF << (4*7)); // 清空 PC7 配置
GPIOC->CRL |= ((uint32_t)0xB << (4*7)); // 配置为复用推挽输出 (0xB = 1011)
// 配置 PF12 为通用推挽输出 (方向)
GPIOF->CRH &= ~(0xF << (4*4)); // 清空 PF12 配置
GPIOF->CRH |= (0x3 <<(4*4)); // 配置为通用推挽输出 (0x3 = 0011)
// 配置 PC4 为通用推挽输出 (使能)
GPIOC->CRL &= ~(0xF <<(4*4)); // 清空 PC4 配置
GPIOC->CRL |= (0x3 << (4*4)); // 配置为通用推挽输出 (0x3 = 0011)
// 重映射 TIM3_CH1 到 PC6 TIM3_CH2 到 PC7
AFIO->MAPR |= AFIO_MAPR_TIM3_REMAP_FULLREMAP;
//气动电磁阀GPIO配置
// 配置 PF13, PF14, PF15 为复用推挽输出 (50 MHz)
GPIOF->CRH &= ~(0xF <<(4*5)); // 清空 PF13 配置 (位20-23)
GPIOF->CRH |= (0x3 <<(4*5)); // 配置 PF13 为通用推挽输出
GPIOF->CRH &= ~(0xF <<(4*6)); // 清空 PF14 配置 (位24-27)
GPIOF->CRH |= (0x3 << (4*6)); // 配置 PF14 为通用推挽输出
GPIOF->CRH &= ~((uint32_t)0x3 <<(4*7)); // 清空 PF15 配置 (位28-31)
GPIOF->CRH |= ((uint32_t)0x3 << (4*7)); // 配置 PF15 为通用推挽输出
// 配置 PG0, PG1 为复用推挽输出 (50 MHz)
GPIOG->CRL &= ~(0xF << (4*0)); // 清空 PG0 配置 (位0-3)
GPIOG->CRL |= (0x3 << (4*0)); // 配置 PG0 为通用推挽输出
GPIOG->CRL &= ~(0xF << (4*1)); // 清空 PG1 配置 (位4-7)
GPIOG->CRL |= (0x3 << (4*1)); // 配置 PG1 为通用推挽输出
// 配置 PE7, PE8 为复用推挽输出 (50 MHz)
GPIOE->CRH &= ~(0xF << (4*1)); // 清空 PE7 配置 (位20-23)
GPIOE->CRH |= (0x3 << (4*1)); // 配置 PE7 为通用推挽输出
GPIOE->CRH &= ~(0xF << (4*2)); // 清空 PE8 配置 (位24-27)
GPIOE->CRH |= (0x3 << (4*2)); // 配置 PE8 为通用推挽输出
//倒车雷达
// 配置PE10-PE15为推挽输出,默认为低电平
GPIOE->CRH &= ~(0xFFFFF << 8); // 清空PE10-PE15配置
GPIOE->CRH |= 0x11111 << 8; // 设置PE10-PE15为推挽输出
GPIOE->BRR = 0xFC00; // 默认低电平(PE10到PE15)
// 配置 PD14 为上拉输入模式
GPIOD->CRH &= ~(0xF << 24); // 清空 PD14 的配置
GPIOD->CRH |= (0x4 << 24); // 设置为上拉/下拉输入模式
//行走距离开关 distance_switch
// 配置PG15为输入模式(浮空输入)
GPIOG->CRH &= ~((uint32_t)0xF << (4*7)); // 清除PG15的配置
GPIOG->CRH |= ((uint32_t)0x4 << (4*7)); // 设置为浮空输入模式
// 配置PD6为输入模式(浮空输入)
GPIOD->CRL &= ~(0xF << 24); // 清除PD6的配置
GPIOD->CRL |= (0x4 << 24); // 设置为浮空输入模式
//旋转光电开关 photoelectric_switch
// 配置PB9为输入模式(浮空输入)
GPIOB->CRH &= ~(0xF << 4); // 清除PB9的配置
GPIOB->CRH |= (0x4 << 4); // 设置为浮空输入模式
// 配置PE0为输入模式(浮空输入)
GPIOE->CRL &= ~(0xF << 0); // 清除PE0的配置
GPIOE->CRL |= (0x4 << 0); // 设置为浮空输入模式
//Onewire_Init
// 配置 PE1 为推挽输出(初始为高电平)
GPIOD->CRH &= ~(0xF << 4*4); // 清除PD12的配置
GPIOD->CRH |= (0x3 << 4*4); // 设置为推挽输出模式
//急停按钮 emergency_stop
// 配置 PE2 为输入上拉
GPIOE->CRL &= ~(0xF << (2 * 4)); // 清除 PE2 配置位
GPIOE->CRL |= (0x8 << (2 * 4)); // 配置 PE2 为上拉输入模式
GPIOE->ODR |= (1 << 2);
//蜂鸣器 buzzer
GPIOE->CRH &= ~(0xF << (4 * 1));
GPIOE->CRH |= (0x03 << (4 * 1));
}
void Total_EXTI_Init(void) {
// 设置优先级组为组2 (2位抢占优先级 + 2位子优先级)
SCB->AIRCR = (0x05FA << 16) | (2 << 8); // 设置优先级分组
// 倒车雷达中断
AFIO->EXTICR[3] &= ~AFIO_EXTICR4_EXTI14; // 清除EXTI14
AFIO->EXTICR[3] |= AFIO_EXTICR4_EXTI14_PD; // 将PD14连接到EXTI14
EXTI->IMR |= EXTI_IMR_MR14; // 使能中断
EXTI->FTSR &= ~EXTI_FTSR_TR14; // 先清除下降沿触发配置
EXTI->RTSR &= ~EXTI_RTSR_TR14; // 先清除上升沿触发配置
EXTI->RTSR |= EXTI_RTSR_TR14; // 上升沿触发
EXTI->FTSR |= EXTI_RTSR_TR14; // 下降沿触发
NVIC_EnableIRQ(EXTI15_10_IRQn);
NVIC_SetPriority(EXTI15_10_IRQn, 0x05); // 设置中断优先级
// 行走距离开关中断
AFIO->EXTICR[1] &= ~(AFIO_EXTICR2_EXTI6); // 清除EXTI6的配置
AFIO->EXTICR[1] |= AFIO_EXTICR2_EXTI6_PD; // 连接PD6到EXTI6
AFIO->EXTICR[3] &= ~(AFIO_EXTICR4_EXTI15); // 清除EXTI15的配置
AFIO->EXTICR[3] |= AFIO_EXTICR4_EXTI15_PG; // 连接PG15到EXTI15
EXTI->IMR |= EXTI_IMR_MR6 | EXTI_IMR_MR15; // 使能中断线6和15
EXTI->RTSR |= EXTI_RTSR_TR6 | EXTI_RTSR_TR15; // 配置上升沿触发
EXTI->FTSR |= EXTI_FTSR_TR6 | EXTI_FTSR_TR15; // 配置下降沿触发
// 使能EXTI9_5_IRQn中断
NVIC_EnableIRQ(EXTI9_5_IRQn); // PD6 属于 EXTI9_5_IRQn
NVIC_SetPriority(EXTI9_5_IRQn, 0x0B); // 设置中断优先级
// 使能EXTI15_10_IRQn中断
NVIC_EnableIRQ(EXTI15_10_IRQn); // EXTI15 属于 EXTI15_10_IRQn
NVIC_SetPriority(EXTI15_10_IRQn, 0x06); // 设置中断优先级
// 旋转光电开关中断
AFIO->EXTICR[2] &= ~(AFIO_EXTICR3_EXTI9); // 清除EXTI9的配置
AFIO->EXTICR[2] |= AFIO_EXTICR3_EXTI9_PB; // 连接PB9到EXTI9
AFIO->EXTICR[0] &= ~(AFIO_EXTICR1_EXTI0); // 清除EXTI0的配置
AFIO->EXTICR[0] |= AFIO_EXTICR1_EXTI0_PE; // 连接PE0到EXTI0
EXTI->IMR |= EXTI_IMR_MR9 | EXTI_IMR_MR0; // 使能中断线9和0
EXTI->RTSR |= EXTI_RTSR_TR9 | EXTI_RTSR_TR0; // 配置上升沿触发
EXTI->FTSR |= EXTI_FTSR_TR9 | EXTI_FTSR_TR0; // 配置下降沿触发
// 使能EXTI9_5_IRQn中断
NVIC_EnableIRQ(EXTI9_5_IRQn); // PB9 属于 EXTI9_5 中断
NVIC_SetPriority(EXTI9_5_IRQn, 0x0C); // 设置优先级
// 使能EXTI0_IRQn中断
NVIC_EnableIRQ(EXTI0_IRQn); // PE0 属于 EXTI0 中断
NVIC_SetPriority(EXTI0_IRQn, 0x0D); // 设置优先级
// 急停按钮中断
//AFIO->EXTICR[0] = (AFIO->EXTICR[0] & ~0xF) | 0x4; // PE2
AFIO->EXTICR[0] &= ~(AFIO_EXTICR1_EXTI2); // 清除EXTI9的配置
AFIO->EXTICR[0] |= AFIO_EXTICR1_EXTI2_PE; // 连接PE2到EXTI2
EXTI->FTSR &= ~EXTI_FTSR_TR2; // 清除上升沿触发
EXTI->RTSR &= ~EXTI_RTSR_TR2; // 清除上升沿触发
EXTI->FTSR |= EXTI_FTSR_TR2; // 使能下降沿触发
EXTI->IMR |= EXTI_IMR_MR2;
NVIC_EnableIRQ(EXTI2_IRQn);
NVIC_SetPriority(EXTI2_IRQn, 0x00); // 设置急停按钮中断优先级为最高
}
// 状态处理函数
void StateMachineHandler(SystemState currentState) {
switch (currentState) {
case STATE_IDLE:
// 处理IDLE状态
break;
case STATE_MOTOR_RUNNING:
// 处理MOTOR_RUNNING状态
break;
case STATE_EMERGENCY_STOP:
// 处理EMERGENCY_STOP状态
Emergency_Stop_Interrupt();
break;
case STATE_PARKING_SENSOR_ACTIVE:
Parking_Sensor_Interruption();
break;
case STATE_DISTANCE_SWITCH_ACTIVE:
Distance_Switch_Interruption();
// 处理DISTANCE_SWITCH_ACTIVE状态
break;
case STATE_PHOTOELECTRIC_SWITCH_ACTIVE:
// 处理PHOTOELECTRIC_SWITCH_ACTIVE状态
Photoelectric_Switch_Interrupt();
break;
default:
// 默认处理
break;
}
}
// 中断服务例程
void EXTI9_5_IRQHandler(void) {
if (EXTI->PR & EXTI_PR_PR6) { // 检查是否是 EXTI 线 6 触发了中断
// 处理 PD6 中断
StateMachineHandler(STATE_DISTANCE_SWITCH_ACTIVE);
// 清除中断标志位
EXTI->PR = EXTI_PR_PR6;
}
if (EXTI->PR & EXTI_PR_PR9) { // 检查是否是 EXTI 线 9 触发了中断
// 处理 PB9 中断
StateMachineHandler(STATE_PHOTOELECTRIC_SWITCH_ACTIVE);
// 清除中断标志位
EXTI->PR = EXTI_PR_PR9;
}
}
// 中断服务例程
void EXTI0_IRQHandler(void) {
if (EXTI->PR & EXTI_PR_PR0) { // 检查是否是EXTI线0触发了中断
// 处理PE0中断
StateMachineHandler(STATE_PHOTOELECTRIC_SWITCH_ACTIVE);
// 清除中断标志位
EXTI->PR = EXTI_PR_PR0;
}
}
//STATE_PARKING_SENSOR_ACTIVE
void EXTI15_10_IRQHandler(void) {
// 处理 PD14 中断
if (EXTI->PR & EXTI_PR_PR14) { // 检查是否是EXTI线14触发了中断
StateMachineHandler(STATE_PARKING_SENSOR_ACTIVE);
EXTI->PR = EXTI_PR_PR14; // 清除中断标志位
}
if (EXTI->PR & EXTI_PR_PR15) { // 检查是否是EXTI线15触发了中断
Serial_Print("EXTI15 triggered\n");
StateMachineHandler(STATE_DISTANCE_SWITCH_ACTIVE);
EXTI->PR = EXTI_PR_PR15; // 清除中断标志位
}
}
void EXTI2_IRQHandler(void) {
if (EXTI->PR & EXTI_PR_PR2) { // 检查是否是EXTI线2触发了中断
// 处理PE2中断(急停按钮)
StateMachineHandler(STATE_EMERGENCY_STOP);
// 清除中断标志位
EXTI->PR = EXTI_PR_PR2;
}
}
#include "stm32f10x.h" // 包含STM32F103ZET6的标准库
#include "uart_log.h"
#include "distance_switch.h"
void Distance_Switch_Interruption(void) {
Serial_Printf("Hello, Distance_Switch_Interruption!\n");
// 检查是否是PG15触发的中断
if (EXTI->PR & EXTI_PR_PR15) {
if (GPIOG->IDR & (1 << 15)) { // 检测PG15的上升沿
Serial_Print("PG15: 接近 (NPN传感器 - 高电平)\n");
} else { // 检测PG15的下降沿
Serial_Print("PG15: 远离 (NPN传感器 - 低电平)\n");
}
// 清除中断标志位
EXTI->PR = EXTI_PR_PR15;
}
// 检查是否是PD6触发的中断
if (EXTI->PR & EXTI_PR_PR6) {
if (GPIOD->IDR & (1 << 6)) { // 检测PD14的上升沿
Serial_Print("PD6: 接近 (PNP传感器 - 高电平)\n");
} else { // 检测PD14的下降沿
Serial_Print("PD6: 远离 (PNP传感器 - 低电平)\n");
}
// 清除中断标志位
EXTI->PR = EXTI_PR_PR6;
}
}
#include "ds18b20.h"
#include "common.h"
/******************************************************************
* 函 数 名 称:bsp_ds18b20_Init
* 函 数 说 明:MLX90614的初始化
* 函 数 形 参:无
* 函 数 返 回:1未检测到器件 0检测到器件
* 作 者:LC
* 备 注:无
******************************************************************/
char DS18B20_Init(void)
{
int ret = DS18B20_Check();//检测器件是否存在
return ret;
}
/******************************************************************
* 函 数 名 称:DS18B20_Read_Byte
* 函 数 说 明:从DS18B20读取一个字节
* 函 数 形 参:无
* 函 数 返 回:读取到的字节数据
* 作 者:LC
* 备 注:无
******************************************************************/
uint8_t DS18B20_Read_Byte(void)
{
uint8_t i=0,dat=0;
for (i=0; i<8; i++)
{
DQ_OUT();//设置为输入模式
DQ(0); //拉低
Delay(2, 'u');
DQ(1); //释放总线
DQ_IN();//设置为输入模式
Delay(12, 'u');
dat>>=1;
if( DQ_GET() )
{
dat=dat|0x80;
}
Delay(50, 'u');
}
return dat;
}
/******************************************************************
* 函 数 名 称:DS18B20_Write_Byte
* 函 数 说 明:写一个字节到DS18B20
* 函 数 形 参:dat:要写入的字节
* 函 数 返 回:无
* 作 者:LC
* 备 注:无
******************************************************************/
void DS18B20_Write_Byte(uint8_t dat)
{
uint8_t i;
DQ_OUT();//设置输出模式
for (i=0; i<8; i++)
{
if ( (dat&0x01) ) //写1
{
DQ(0);
Delay(2, 'u');
DQ(1);
Delay(60, 'u');
}
else //写0
{
DQ(0);//拉低60us
Delay(60, 'u');
DQ(1);//释放总线
Delay(2, 'u');
}
dat=dat>>1;//传输下一位
}
}
/******************************************************************
* 函 数 名 称:DS18B20_Check
* 函 数 说 明:检测DS18B20是否存在
* 函 数 形 参:无
* 函 数 返 回:1:未检测到DS18B20的存在 0:存在
* 作 者:LC
* 备 注:无
******************************************************************/
uint8_t DS18B20_Check(void)
{
uint8_t timeout=0;
//复位DS18B20
DQ_OUT(); //设置为输出模式
DQ(0); //拉低DQ
Delay(750, 'u');
DQ(1); //拉高DQ
Delay(15, 'u');
//设置为输入模式
DQ_IN();
//等待拉低,拉低说明有应答
while ( DQ_GET() &&timeout<200)
{
timeout++;//超时判断
Delay(1, 'u');
};
//设备未应答
if(timeout>=200)
return 1;
else
timeout=0;
//等待18B20释放总线
while ( !DQ_GET() &&timeout<240)
{
timeout++;//超时判断
Delay(1, 'u');
};
//释放总线失败
if(timeout>=240)
return 1;
return 0;
}
/******************************************************************
* 函 数 名 称:DS18B20_Start
* 函 数 说 明:DS18B20开始温度转换
* 函 数 形 参:无
* 函 数 返 回:无
* 作 者:LC
* 备 注:无
******************************************************************/
void DS18B20_Start(void)
{
DS18B20_Check(); //查询是否有设备应答
DS18B20_Write_Byte(0xcc); //对总线上所有设备进行寻址
DS18B20_Write_Byte(0x44); //启动温度转换
}
/******************************************************************
* 函 数 名 称:DS18B20_GetTemperture
* 函 数 说 明:从ds18b20得到温度值
* 函 数 形 参:无
* 函 数 返 回:温度数据
* 作 者:LC
* 备 注:无
******************************************************************/
float DS18B20_GetTemperture(void)
{
uint16_t temp;
uint8_t dataL=0,dataH=0;
float value;
DS18B20_Start();
DS18B20_Check();
DS18B20_Write_Byte(0xcc);//对总线上所有设备进行寻址
DS18B20_Write_Byte(0xbe);// 读取数据命令
dataL=DS18B20_Read_Byte(); //LSB
dataH=DS18B20_Read_Byte(); //MSB
temp=(dataH<<8)+dataL;//整合数据
if(dataH&0X80)//高位为1,说明是负温度
{
temp=(~temp)+1;
value=temp*(-0.0625);
}
else
{
value=temp*0.0625;
}
return value;
}
#include "ds18b20.h"
#include "common.h"
/******************************************************************
* 函 数 名 称:bsp_ds18b20_Init
* 函 数 说 明:MLX90614的初始化
* 函 数 形 参:无
* 函 数 返 回:1未检测到器件 0检测到器件
* 作 者:LC
* 备 注:无
******************************************************************/
char DS18B20_Init(void)
{
int ret = DS18B20_Check();//检测器件是否存在
return ret;
}
/******************************************************************
* 函 数 名 称:DS18B20_Read_Byte
* 函 数 说 明:从DS18B20读取一个字节
* 函 数 形 参:无
* 函 数 返 回:读取到的字节数据
* 作 者:LC
* 备 注:无
******************************************************************/
uint8_t DS18B20_Read_Byte(void)
{
uint8_t i=0,dat=0;
for (i=0;i<8;i++)
{
DQ_OUT();//设置为输入模式
DQ(0); //拉低
Delay(2, 'u');
DQ(1); //释放总线
DQ_IN();//设置为输入模式
Delay(12, 'u');
dat>>=1;
if( DQ_GET() )
{
dat=dat|0x80;
}
Delay(50, 'u');
}
return dat;
}
/******************************************************************
* 函 数 名 称:DS18B20_Write_Byte
* 函 数 说 明:写一个字节到DS18B20
* 函 数 形 参:dat:要写入的字节
* 函 数 返 回:无
* 作 者:LC
* 备 注:无
******************************************************************/
void DS18B20_Write_Byte(uint8_t dat)
{
uint8_t i;
DQ_OUT();//设置输出模式
for (i=0;i<8;i++)
{
if ( (dat&0x01) ) //写1
{
DQ(0);
Delay(2, 'u');
DQ(1);
Delay(60, 'u');
}
else //写0
{
DQ(0);//拉低60us
Delay(60, 'u');
DQ(1);//释放总线
Delay(2, 'u');
}
dat=dat>>1;//传输下一位
}
}
/******************************************************************
* 函 数 名 称:DS18B20_Check
* 函 数 说 明:检测DS18B20是否存在
* 函 数 形 参:无
* 函 数 返 回:1:未检测到DS18B20的存在 0:存在
* 作 者:LC
* 备 注:无
******************************************************************/
uint8_t DS18B20_Check(void)
{
uint8_t timeout=0;
//复位DS18B20
DQ_OUT(); //设置为输出模式
DQ(0); //拉低DQ
Delay(750, 'u');
DQ(1); //拉高DQ
Delay(15, 'u');
//设置为输入模式
DQ_IN();
//等待拉低,拉低说明有应答
while ( DQ_GET() &&timeout<200)
{
timeout++;//超时判断
Delay(1, 'u');
};
//设备未应答
if(timeout>=200)
return 1;
else
timeout=0;
//等待18B20释放总线
while ( !DQ_GET() &&timeout<240)
{
timeout++;//超时判断
Delay(1, 'u');
};
//释放总线失败
if(timeout>=240)
return 1;
return 0;
}
/******************************************************************
* 函 数 名 称:DS18B20_Start
* 函 数 说 明:DS18B20开始温度转换
* 函 数 形 参:无
* 函 数 返 回:无
* 作 者:LC
* 备 注:无
******************************************************************/
void DS18B20_Start(void)
{
DS18B20_Check(); //查询是否有设备应答
DS18B20_Write_Byte(0xcc); //对总线上所有设备进行寻址
DS18B20_Write_Byte(0x44); //启动温度转换
}
/******************************************************************
* 函 数 名 称:DS18B20_GetTemperture
* 函 数 说 明:从ds18b20得到温度值
* 函 数 形 参:无
* 函 数 返 回:温度数据
* 作 者:LC
* 备 注:无
******************************************************************/
float DS18B20_GetTemperture(void)
{
uint16_t temp;
uint8_t dataL=0,dataH=0;
float value;
DS18B20_Start();
DS18B20_Check();
DS18B20_Write_Byte(0xcc);//对总线上所有设备进行寻址
DS18B20_Write_Byte(0xbe);// 读取数据命令
dataL=DS18B20_Read_Byte(); //LSB
dataH=DS18B20_Read_Byte(); //MSB
temp=(dataH<<8)+dataL;//整合数据
if(dataH&0X80)//高位为1,说明是负温度
{
temp=(~temp)+1;
value=temp*(-0.0625);
}
else
{
value=temp*0.0625;
}
return value;
}
#include "emergency_stop.h"
#include "stm32f10x.h"
#include "uart_log.h"
// EXTI线2中断服务例程
void Emergency_Stop_Interrupt(void) {
Serial_Print("Emergency_Stop_Interrupt\n");
// PE2 急停按钮
if (EXTI->PR & EXTI_PR_PR2) {
if (GPIOE->IDR & (1 << 2)) { // 检测PE2的上升沿
Serial_Print("PE2: 抬起 (急停按钮 - 高电平)\n");
} else { // 检测PD14的下降沿
Serial_Print("PE2: 按下 (急停按钮 - 低电平)\n");
}
// 清除中断标志位
EXTI->PR = EXTI_PR_PR2;
}
}
#include "onewire.h"
#include "common.h"
// 初始化 One-Wire 总线 (PD12)
void Onewire_Init(void) {
// 设置高电平
ONEWIRE_PORT->BSRR = ONEWIRE_PIN;
}
// 设置引脚为输出模式
void Onewire_Pin_Output(void) {
// 设置PD12为推挽输出模式
GPIOD->CRH &= ~(0xF << 16); // 清除PD12的配置
GPIOD->CRH |= (0x3 << 16); // 设置为推挽输出模式
}
// 设置引脚为输入模式
void Onewire_Pin_Input(void) {
// 设置PD12为浮空输入模式
GPIOD->CRH &= ~(0xF << 16); // 清除PD12的配置
GPIOD->CRH |= (0x4 << 16); // 设置为浮空输入模式
}
// 复位 One-Wire 总线并检测传感器是否存在
uint8_t Onewire_Reset(void) {
uint8_t response = 0;
// 拉低总线 480 微秒
Onewire_Pin_Output();
ONEWIRE_PORT->BRR = ONEWIRE_PIN; // 拉低
Delay(480, 'u');
// 释放总线,并等待响应
Onewire_Pin_Input();
Delay(60, 'u');
// 检测传感器响应
response = (ONEWIRE_PORT->IDR & ONEWIRE_PIN) ? 1 : 0;
// 等待 420 微秒
Delay(420, 'u');
return !response; // 返回响应信号,0 表示设备存在
}
// 向 One-Wire 设备发送一位数据
void Onewire_SendBit(unsigned char Bit) {
Onewire_Pin_Output(); // 设置为输出模式
if (Bit) {
ONEWIRE_PORT->BRR = ONEWIRE_PIN; // 拉低 1 微秒
Delay(1, 'u');
Onewire_Pin_Input(); // 释放总线
Delay(60, 'u'); // 保持高电平 60 微秒
} else {
ONEWIRE_PORT->BRR = ONEWIRE_PIN; // 拉低 60 微秒
Delay(60, 'u');
Onewire_Pin_Input(); // 释放总线
}
}
// 从 One-Wire 设备接收一位数据
unsigned char Onewire_ReceiveBit(void) {
unsigned char Bit = 0;
Onewire_Pin_Output(); // 设置为输出模式
ONEWIRE_PORT->BRR = ONEWIRE_PIN; // 拉低 1 微秒
Delay(1, 'u');
Onewire_Pin_Input(); // 释放总线
Delay(14, 'u');
// 读取数据
if (ONEWIRE_PORT->IDR & ONEWIRE_PIN) {
Bit = 1;
}
Delay(45, 'u'); // 等待剩余时间
return Bit;
}
// 向 One-Wire 设备发送一个字节数据
void Onewire_SendByte(unsigned char Byte) {
for (unsigned char i = 0; i < 8; i++) {
Onewire_SendBit(Byte & 0x01); // 发送每一位
Byte >>= 1;
}
}
// 从 One-Wire 设备接收一个字节数据
unsigned char Onewire_ReceiveByte(void) {
unsigned char Byte = 0;
for (unsigned char i = 0; i < 8; i++) {
Byte >>= 1;
if (Onewire_ReceiveBit()) {
Byte |= 0x80; // 设置最高位
}
}
return Byte;
}
#include "parking_sensor.h"
#include "common.h"
#include "uart_log.h"
// 全局变量
volatile uint32_t pulse_time = 0; // 脉宽时间
volatile double distance_cm = 0.0; // 距离
volatile uint8_t capture_state = 0; // 捕获状态标志
volatile uint8_t last_pd14_state = 0; // 上一次 PD14 的状态
// 动态配置 PE0 - PE15 引脚
void Configure_PE_Pin(uint8_t pin, uint8_t mode) {
// 根据引脚号选择配置寄存器
if (pin < 8) {
// 配置低 8 位(PE0 - PE7)
GPIOE->CRL &= ~(0xF << (pin * 4)); // 清除该引脚的配置
GPIOE->CRL |= (mode << (pin * 4)); // 设置该引脚的模式
} else {
// 配置高 8 位(PE8 - PE15)
GPIOE->CRH &= ~(0xF << ((pin - 8) * 4)); // 清除该引脚的配置
GPIOE->CRH |= (mode << ((pin - 8) * 4)); // 设置该引脚的模式
}
}
// 发送触发信号
void SendTriggerSignal(void) {
GPIOE->BSRR = (1 << 14); // 设置 PE14 为高电平
Delay(25, 'u'); // 延时 10 微秒
GPIOE->BRR = (1 << 14); // 设置 PE14 为低电平
}
// 初始化 TIM2 捕获模式
void TIM2_Capture_Init(void)
{
// 使能TIM2时钟
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
// 设置预分频器,使TIM2计数频率为1MHz
TIM2->PSC = 72 - 1; // 72MHz / 72 = 1MHz
// 设置自动重装载寄存器
TIM2->ARR = 0xFFFF;
// 选择计数模式
TIM2->CR1 &= ~TIM_CR1_DIR;
// 使能TIM2
//TIM2->CR1 |= TIM_CR1_CEN;
}
// 计算距离,不考虑温度校正
double CalculateDistance()
{
const double soundSpeed = 340.0; // 固定声速 = 340 m/s
const double timeToDistanceFactor = soundSpeed / 2 / 10000000.0; // 转换因子(米/us)
return pulse_time * timeToDistanceFactor * 100; // 返回距离(cm)
}
// TIM2 中断服务程序,捕获脉宽
void Parking_Sensor_Interruption(void) {
uint32_t end_time;
uint8_t pd14_level = (GPIOD->IDR & GPIO_IDR_IDR14) ? 1 : 0;
Serial_Printf("pd14_level: %u\n", pd14_level);
if (pd14_level != last_pd14_state) { // 检测到电平变化
if (pd14_level == 1 && capture_state == 0) { // 上升沿
TIM2->CNT = 0; // 清零计数器
TIM2->CR1 |= TIM_CR1_CEN; // 启动计数器
capture_state = 1; // 标记上升沿已捕获,等待下降沿
} else if (pd14_level == 0 && capture_state == 1) { // 下降沿且上升沿已捕获
end_time = TIM2->CNT; // 读取当前计数器值作为脉宽时间
pulse_time = end_time; // 记录脉宽时间
TIM2->CR1 &= ~TIM_CR1_CEN; // 关闭计数器
TIM2->CNT = 0; // 清零计数器
capture_state = 0; // 重置捕获状态
// 计算距离
distance_cm = CalculateDistance();
// 打印距离信息
Serial_Printf("EXTI14_IRQHandler Pulse Time: %u us, Distance: %.5f cm\n", pulse_time, distance_cm);
}
last_pd14_state = pd14_level;
}
}
#include "parking_sensor.h"
#include "common.h"
#include "uart_log.h"
// 全局变量
volatile uint32_t pulse_time = 0; // 脉宽时间
volatile double distance_cm = 0.0; // 距离
volatile uint8_t capture_state = 0; // 捕获状态标志
volatile uint8_t last_pd14_state = 0; // 上一次 PD14 的状态
int HH = 1000000;
// 动态配置 PE0 - PE15 引脚
void Configure_PE_Pin(uint8_t pin, uint8_t mode) {
// 使能 GPIOE 时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPEEN;
// 根据引脚号选择配置寄存器
if (pin < 8) {
// 配置低 8 位(PE0 - PE7)
GPIOE->CRL &= ~(0xF << (pin * 4)); // 清除该引脚的配置
GPIOE->CRL |= (mode << (pin * 4)); // 设置该引脚的模式
} else {
// 配置高 8 位(PE8 - PE15)
GPIOE->CRH &= ~(0xF << ((pin - 8) * 4)); // 清除该引脚的配置
GPIOE->CRH |= (mode << ((pin - 8) * 4)); // 设置该引脚的模式
}
}
// 发送触发信号
void SendTriggerSignal(void) {
GPIOE->BSRR = (1 << 14); // 设置 PE14 为高电平
Delay(15, 'u'); // 延时 10 微秒
GPIOE->BRR = (1 << 14); // 设置 PE14 为低电平
}
// 初始化 TIM2 捕获模式
void TIM2_Capture_Init(void)
{
// 使能TIM2时钟
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
// 设置预分频器,使TIM2计数频率为1MHz
TIM2->PSC = 72 - 1; // 72MHz / 72 = 1MHz
// 设置自动重装载寄存器
TIM2->ARR = 0xFFFF;
// 选择计数模式
TIM2->CR1 &= ~TIM_CR1_DIR; // 向上计数
// 使能TIM2
TIM2->CR1 |= TIM_CR1_CEN;
}
// 计算距离,不考虑温度校正
double CalculateDistance()
{
const double soundSpeed = 340.0; // 固定声速 = 340 m/s
const double timeToDistanceFactor = soundSpeed / 2 / 10000000.0; // 转换因子(米/us)
return pulse_time * timeToDistanceFactor * 100; // 返回距离(cm)
}
// TIM2 中断服务程序,捕获脉宽
void Parking_Sensor_Interruption(void)
{
static uint32_t start_time = 0;
uint32_t end_time;
volatile uint32_t idr_value = GPIOD->IDR;
uint8_t pd14_state = ((idr_value & (1 << 14)) != 0) ? 1 : 0;
Serial_Printf("PD14: %u\n", pd14_state);
if (pd14_state != last_pd14_state) // 检测到电平变化
{
if (pd14_state && capture_state == 0 ) // 上升沿
{
start_time = TIM2->CNT; // 记录上升沿时间
capture_state = 1; // 标记上升沿已捕获
}
else {
end_time = TIM2->CNT; // 记录下降沿时间
pulse_time = (end_time >= start_time) ? (end_time - start_time) : (0xFFFF - start_time + end_time + 1);
Serial_Printf("下降沿: %u \n", pulse_time);
capture_state = 2; // 标记捕获完成
// 计算距离
distance_cm = CalculateDistance();
// 打印距离信息
Serial_Printf("EXTI14_IRQHandler Pulse Time: %u, Distance: %.5f cm\n", pulse_time, distance_cm);
}
last_pd14_state = pd14_state ;
}
}
\ No newline at end of file
#include "stm32f10x.h" // 包含STM32F103ZET6的标准库
#include "photoelectric_switch.h"
#include "uart_log.h"
void Photoelectric_Switch_Interrupt(void) {
if (EXTI->PR & EXTI_PR_PR9) { // 检查是否是中断线9触发的中断(PB9)
if (GPIOB->IDR & (1 << 9)) { // 检测PB9的上升沿
Serial_Printf("PB9: 物体遮挡 (NPN 传感器 - 高电平)\n");
} else { // 检测PB9的下降沿
Serial_Printf("PB9: 物体移开 (NPN 传感器 - 低电平)\n");
}
// 清除中断标志位
EXTI->PR = EXTI_PR_PR9;
}
if (EXTI->PR & EXTI_PR_PR0) { // 检查是否是中断线0触发的中断(PE0)
if (GPIOE->IDR & (1 << 0)) { // 检测PE0的上升沿
Serial_Printf("PE0: 物体遮挡 (NPN 传感器 - 高电平)\n");
} else { // 检测PE0的下降沿
Serial_Printf("PE0: 物体移开 (NPN 传感器 - 低电平)\n");
}
// 清除中断标志位
EXTI->PR = EXTI_PR_PR0;
}
}
#include "stm32f10x.h" // 包含STM32F103ZET6的标准库
#include "photoelectric_switch.h"
#include "uart_log.h"
void Photoelectric_Switch_Interrupt(void) {
if (EXTI->PR & EXTI_PR_PR9) { // 检查是否是中断线9触发的中断(PB9)
if (GPIOB->IDR & (1 << 9)) { // 检测PB9的上升沿
Serial_Printf("PB9: 物体遮挡 (NPN 传感器 - 高电平)\r\n");
} else { // 检测PB9的下降沿
Serial_Printf("PB9: 物体移开 (NPN 传感器 - 低电平)\r\n");
}
// 清除中断标志位
EXTI->PR = EXTI_PR_PR9;
}
if (EXTI->PR & EXTI_PR_PR0) { // 检查是否是中断线0触发的中断(PE0)
if (GPIOE->IDR & (1 << 0)) { // 检测PE0的上升沿
Serial_Printf("PE0: 物体遮挡 (NPN 传感器 - 高电平)\r\n");
} else { // 检测PE0的下降沿
Serial_Printf("PE0: 物体移开 (NPN 传感器 - 低电平)\r\n");
}
// 清除中断标志位
EXTI->PR = EXTI_PR_PR0;
}
}
#include "pneumatic_solenoid.h"
#include "stm32f10x.h"
#include "uart_log.h"
//控制气动电磁阀的高低电平
void Pneumatic_Solenoid_Control(uint8_t index,unsigned char bitValue) {
switch (index) {
case 0 :
if (bitValue != 0) {
// 如果bitValue不为0,设置PF13为高电平
GPIOF->ODR |= (1 << 13);
} else {
// 如果bitValue为0,设置PF13为低电平
GPIOF->ODR &= ~(1 << 13);
}
break;
case 0x01:
if (bitValue != 0) {
// 如果bitValue不为0,设置PF14为高电平
GPIOF->ODR |= (1 << 14);
} else {
// 如果bitValue为0,设置PF14为低电平
GPIOF->ODR &= ~(1 << 14);
}
break;
case 0x02:
if (bitValue != 0) {
// 如果bitValue不为0,设置PF15为高电平
GPIOF->ODR |= (1 << 15);
} else {
// 如果bitValue为0,设置PF15为低电平
GPIOF->ODR &= ~(1 << 15);
}
break;
case 0x03:
if (bitValue != 0) {
// 如果bitValue不为0,设置PG0为高电平
GPIOG->ODR |= (1 << 0);
} else {
// 如果bitValue为0,设置PG0为低电平
GPIOG->ODR &= ~(1 << 0);
}
break;
case 0x04:
if (bitValue != 0) {
// 如果bitValue不为0,设置PG1为高电平
GPIOG->ODR |= (1 << 1);
} else {
// 如果bitValue为0,设置PG1为低电平
GPIOG->ODR &= ~(1 << 1);
}
break;
case 0x05:
if (bitValue != 0) {
// 如果bitValue不为0,设置PE7为高电平
GPIOE->ODR |= (1 << 7);
} else {
// 如果bitValue为0,设置PE7为低电平
GPIOE->ODR &= ~(1 << 7);
}
break;
case 0x06:
if (bitValue != 0) {
// 如果bitValue不为0,设置PE8为高电平
GPIOE->ODR |= (1 << 8);
} else {
// 如果bitValue为0,设置PE8为低电平
GPIOE->ODR &= ~(1 << 8);
}
break;
default :
Serial_Print("不存在阀门! \n");
break;
}
}
// 查询气动电磁阀的电平
unsigned char find_Pneumatic_Solenoid(uint8_t index) {
switch (index) {
case 0:
return (GPIOF->IDR & (1 << 13)) ? 1 : 0;
case 1:
return (GPIOF->IDR & (1 << 14)) ? 1 : 0;
case 2:
return (GPIOF->IDR & (1 << 15)) ? 1 : 0;
case 3:
return (GPIOG->IDR & (1 << 0)) ? 1 : 0;
case 4:
return (GPIOG->IDR & (1 << 1)) ? 1 : 0;
case 5:
return (GPIOE->IDR & (1 << 7)) ? 1 : 0;
case 6:
return (GPIOE->IDR & (1 << 8)) ? 1 : 0;
default:
Serial_Print("不存在阀门! \n");
return 0;
}
}
#include "pneumatic_solenoid.h"
#include "stm32f10x.h"
void Pneumatic_Solenoid_Init(void) {
RCC->APB2ENR |= RCC_APB2ENR_IOPFEN; // 启用GPIOF时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPGEN; // 启用GPIOG时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPEEN; // 启用GPIOE时钟
// 配置 PF13, PF14, PF15 为复用推挽输出 (50 MHz)
GPIOF->CRH &= ~(0xF << 4*5); // 清空 PF13 配置 (位20-23)
GPIOF->CRH |= (0xB << 4*5); // 配置 PF13 为复用推挽输出
GPIOF->CRH &= ~(0xF << 4*6); // 清空 PF14 配置 (位24-27)
GPIOF->CRH |= (0xB << 4*6); // 配置 PF14 为复用推挽输出
GPIOF->CRH &= ~(0xF << 4*7); // 清空 PF15 配置 (位28-31)
GPIOF->CRH |= (0xB << 4*7); // 配置 PF15 为复用推挽输出
// 配置 PG0, PG1 为复用推挽输出 (50 MHz)
GPIOG->CRL &= ~(0xF << 4*0); // 清空 PG0 配置 (位0-3)
GPIOG->CRL |= (0xB << 4*0); // 配置 PG0 为复用推挽输出
GPIOG->CRL &= ~(0xF << 4*1); // 清空 PG1 配置 (位4-7)
GPIOG->CRL |= (0xB << 4*1); // 配置 PG1 为复用推挽输出
// 配置 PE7, PE8 为复用推挽输出 (50 MHz)
GPIOE->CRH &= ~(0xF << 4*1); // 清空 PE7 配置 (位20-23)
GPIOE->CRH |= (0xB << 4*1); // 配置 PE7 为复用推挽输出
GPIOE->CRH &= ~(0xF << 4*2); // 清空 PE8 配置 (位24-27)
GPIOE->CRH |= (0xB << 4*2); // 配置 PE8 为复用推挽输出
}
//控制气动电磁阀的高低电平
void Pneumatic_Solenoid_Control(uint8_t index,unsigned char bitValue) {
switch (index) {
case 0 :
break;
case 0x01:
break;
case 0x02:
break;
case 0x03:
break;
case 0x04:
break;
case 0x05:
break;
case 0x06:
break;
default : /* 可选的 */
statement(s);
}
}
//查询气动电磁阀的电平
unsigned char find_Pneumatic_Solenoid(uint8_t index);
#include "step_motor.h" #include "rotate_motor.h"
#include "stm32f10x.h" #include "stm32f10x.h"
// 初始化步进电机控制 #include "common.h"
void StepperMotor_Init(void){
// 使能 GPIOC 和 GPIOF 的时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPFEN;
// 使能 AFIO 时钟,用于重映射
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
// 配置 PC6 引脚为复用推挽输出 (50 MHz)
GPIOC->CRL &= ~(0xF << 24); // 清空 PC6 配置
GPIOC->CRL |= (0xB << 24); // 配置为复用推挽输出 (0xB = 1011)
// 配置 PC5 为通用推挽输出 (方向)
GPIOC->CRL &= ~(0xF << 20); // 清空 PC5 配置
GPIOC->CRL |= (0x3 << 20); // 配置为通用推挽输出 (0x3 = 0011)
// 配置 PF11 为通用推挽输出 (使能)
GPIOF->CRH &= ~(0xF <<12); // 清空 PF11 配置
GPIOF->CRH |= (0x3 << 12); // 配置为通用推挽输出 (0x3 = 0011)
// 重映射 TIM3_CH1 到 PC6
AFIO->MAPR |= AFIO_MAPR_TIM3_REMAP_FULLREMAP;
}
// 初始化定时器 TIM3 函数 // 初始化定时器 TIM3 函数
void TIM3_Init(uint16_t &psc,uint16_t &arr); void TIM3_CH1_Init(uint16_t psc,uint16_t arr){
// 使能 TIM3 时钟 // 使能 TIM3 时钟
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
...@@ -49,21 +25,10 @@ void TIM3_Init(uint16_t &psc,uint16_t &arr); ...@@ -49,21 +25,10 @@ void TIM3_Init(uint16_t &psc,uint16_t &arr);
} }
//f定时器输出频率 系统时钟/(PSC+1)*(ARR+1)
void Timer_Frequency(int &frequency, StepMotor *stepMotor) {
// 预先计算 psc 和 arr
int psc_plus_1 = stepMotor->psc + 1;
int arr_plus_1 = stepMotor->arr + 1;
// 简化并避免除法的额外开销
frequency = 72000000 / (psc_plus_1 * arr_plus_1);
}
// 设置方向 // 设置方向
// 设置方向函数 // 设置方向函数
void Set_Direction(int direction) { void Rotate_SetDirection(int direction){
if (direction) { if (direction){
GPIOC->ODR |= (1 << 5); // 设置高电平 (顺时针方向) GPIOC->ODR |= (1 << 5); // 设置高电平 (顺时针方向)
} else { } else {
GPIOC->ODR &= ~(1 << 5); // 设置低电平 (逆时针方向) GPIOC->ODR &= ~(1 << 5); // 设置低电平 (逆时针方向)
...@@ -71,8 +36,9 @@ void Set_Direction(int direction) { ...@@ -71,8 +36,9 @@ void Set_Direction(int direction) {
} }
// 使能控制函数 // 使能控制函数
void Enable_Stepper(bool enable) { void Rotate_Enable_Rotate(bool enable) {
if (enable) { if (enable) {
GPIOF->ODR &= ~(1 << 11); // 设置低电平 (使能步进电机) GPIOF->ODR &= ~(1 << 11); // 设置低电平 (使能步进电机)
} else { } else {
...@@ -92,7 +58,7 @@ void Set_PWM_Frequency(uint32_t frequency) { ...@@ -92,7 +58,7 @@ void Set_PWM_Frequency(uint32_t frequency) {
// 梯形加速函数 // 梯形加速函数
void StepMotor_Accelerate(uint32_t targetRPM, uint32_t acceleration) { void RotateMotor_Accelerate(uint32_t targetRPM, uint32_t acceleration) {
uint32_t currentRPM = 0; uint32_t currentRPM = 0;
uint32_t deltaRPM = (acceleration / 60000) * 10; // 10ms内的速度增量 uint32_t deltaRPM = (acceleration / 60000) * 10; // 10ms内的速度增量
...@@ -111,7 +77,7 @@ void StepMotor_Accelerate(uint32_t targetRPM, uint32_t acceleration) { ...@@ -111,7 +77,7 @@ void StepMotor_Accelerate(uint32_t targetRPM, uint32_t acceleration) {
} }
// 延时 10ms,每次迭代增加速度 // 延时 10ms,每次迭代增加速度
Delay(10); Delay(10, 'm');
} }
// 达到目标速度,保持目标速度的PWM频率 // 达到目标速度,保持目标速度的PWM频率
...@@ -119,8 +85,10 @@ void StepMotor_Accelerate(uint32_t targetRPM, uint32_t acceleration) { ...@@ -119,8 +85,10 @@ void StepMotor_Accelerate(uint32_t targetRPM, uint32_t acceleration) {
Set_PWM_Frequency(finalFrequency); Set_PWM_Frequency(finalFrequency);
} }
// 梯形减速函数:将当前转速逐步减速为 0 // 梯形减速函数:将当前转速逐步减速为 0
void StepMotor_Decelerate(uint32_t currentRPM, uint32_t deceleration) { void RotateMotor_Decelerate(uint32_t currentRPM, uint32_t deceleration) {
uint32_t deltaRPM = (deceleration / 60000) * 10; // 10ms 内的速度减量 uint32_t deltaRPM = (deceleration / 60000) * 10; // 10ms 内的速度减量
while (currentRPM > 0) { while (currentRPM > 0) {
...@@ -135,42 +103,36 @@ void StepMotor_Decelerate(uint32_t currentRPM, uint32_t deceleration) { ...@@ -135,42 +103,36 @@ void StepMotor_Decelerate(uint32_t currentRPM, uint32_t deceleration) {
currentRPM = 0; currentRPM = 0;
} }
Delay(10); Delay(10, 'm');
} }
Set_PWM_Frequency(0); Set_PWM_Frequency(0);
} }
void Delay(uint32_t delay) { void Update_Motor_Status(RotateMotor *motor, SpeedStatus status, uint32_t targetSpeed, uint32_t acceleration) {
for (volatile uint32_t i = 0; i < delay * 1000; i++) { motor->base.speedStatus = status; // 更新电机的速度状态
__NOP(); // 空操作,用于延时 motor->base.desSpeed= targetSpeed; // 更新目标速度
} motor->base.acceleration = acceleration; // 更新加速度
}
void Update_Motor_Status(StepMotor *motor, SpeedStatus status, uint32_t targetSpeed, uint32_t acceleration) {
motor->speedStatus = status; // 更新电机的速度状态
motor->desSpeed = targetSpeed; // 更新目标速度
motor->acceleration = acceleration; // 更新加速度
switch (status) { switch (status) {
case SPEED_ACC: case SPEED_ACC:
// 加速过程 // 加速过程
StepMotor_Accelerate(targetSpeed, acceleration); RotateMotor_Accelerate(targetSpeed, acceleration);
break; break;
case SPEED_DEC: case SPEED_DEC:
// 减速过程 // 减速过程
StepMotor_Decelerate(motor->curSpeed, acceleration); RotateMotor_Decelerate(motor->base.curSpeed, acceleration);
break; break;
case SPEED_NONE: case SPEED_NONE:
// 匀速,保持当前速度 // 匀速,保持当前速度
Set_PWM_Frequency((motor->curSpeed * STEPMOTOR_PULSEPERROUND) / 60); Set_PWM_Frequency((motor->base.curSpeed * STEPMOTOR_PULSEPERROUND) / 60);
break; break;
case SPEED_STOP: case SPEED_STOP:
// 停止电机 // 停止电机
motor->curSpeed = 0; motor->base.curSpeed = 0;
Set_PWM_Frequency(0); // 关闭PWM Set_PWM_Frequency(0); // 关闭PWM
break; break;
......
#include "temperature_sensor.h"
#include "onewire.h"
#include "uart_log.h"
#include <stddef.h> // 引入 size_t 类型定义
#define CRC8_POLYNOMIAL 0x31
uint8_t crc8(const uint8_t *buf, size_t len) {
uint8_t crc = 0;
for (size_t pos = 0; pos < len; ++pos) {
crc ^= buf[pos];
for (uint8_t bit = 8; bit; --bit) {
if (crc & 0x80) {
crc = (crc << 1) ^ CRC8_POLYNOMIAL;
} else {
crc = (crc << 1);
}
}
}
return crc;
}
void TemperatureSensor_ConvertT(void) {
Onewire_Init(); // 初始化 One-Wire 总线
if (!Onewire_Reset()) { // 复位总线并检查是否有设备响应
Serial_Printf("No device detected.\n");
return;
}
// 跳过 ROM
Onewire_SendByte(0xCC);
// 启动温度转换
Onewire_SendByte(0x44); // 启动温度转换命令
}
float TemperatureSensor_ReadT(void) {
// uint8_t rom_address[8]; // 存储ROM地址 如果不需要,可以移除这一行
uint8_t scratchpad[9]; // 存储Scratchpad数据
uint8_t crc_result;
int16_t Temp;
float temperature;
Onewire_Init(); // 初始化 One-Wire 总线
if (!Onewire_Reset()) { // 复位总线并检查是否有设备响应
Serial_Printf("No device detected.\n");
return -1.0;
}
// 跳过 ROM
Onewire_SendByte(0xCC);
// 读取 Scratchpad
Onewire_SendByte(0xBE);
// 读取 Scratchpad 数据
for (int i = 0; i < 9; i++) {
scratchpad[i] = Onewire_ReceiveByte();
}
// 计算 CRC 并验证
crc_result = crc8(scratchpad, 8);
if (crc_result != scratchpad[8]) {
Serial_Printf("CRC error.\n");
return -1.0;
}
// 提取温度数据
uint8_t TLSB = scratchpad[0]; // 低字节
uint8_t TMSB = scratchpad[1]; // 高字节
Temp = (TMSB << 8) | TLSB; // 合并两个字节
temperature = Temp / 16.0; // 计算实际温度
Serial_Printf("TLSB: %02X, TMSB: %02X, Temp: %d, Temperature: %.2f C\n",
TLSB, TMSB, Temp, temperature);
return temperature;
}
//#include "uart_log.h"
//#include <stdarg.h>
//#include <string.h>
//#include <stdio.h> // 包含<stdio.h>头文件
//// 缓冲区大小
//#define SERIAL_BUFFER_SIZE 128
//// USART1 GPIO初始化
//void USART1_GPIO_Init(void) {
// // 使能GPIOA和USART1时钟
// RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_USART1EN;
// GPIOA->CRH &= ~(0xF << 4); // 清除PA9配置
// GPIOA->CRH |= (0xB << 4); // 配置PA9为复用功能推挽输出
// GPIOA->CRH &= ~(0xF << 8); // 清除PA10配置
// GPIOA->CRH |= (0x4 << 8); // 配置PA10为浮空输入(接收器)
//}
//// USART1初始化
//void USART1_Init(void) {
// // 设置波特率
// USART1->BRR =0x1D4C;
// // 配置USART1
// USART1->CR1 = USART_CR1_UE | USART_CR1_TE | USART_CR1_RE; // 使能USART1、发送器和接收器
// USART1->CR2 = 0; // 不使用流控制
// USART1->CR3 = 0; // 不使用额外功能
//}
//// 发送一个字符
//void USART1_SendChar(char ch) {
// while (!(USART1->SR & USART_SR_TXE)); // 等待发送缓冲区为空
// USART1->DR = (ch & 0xFF); // 发送字符
//}
//// 发送字符串
//void USART1_SendString(const char *str) {
// while (*str) {
// USART1_SendChar(*str++);
// }
//}
//// 格式化字符串并发送
//void USART1_SendFormatted(const char *format, ...) {
// char buffer[SERIAL_BUFFER_SIZE];
// va_list args;
// va_start(args, format);
// vsnprintf(buffer, sizeof(buffer), format, args);
// va_end(args);
// USART1_SendString(buffer);
//}
//// 初始化串口日志
//void Serial_Init(void) {
// USART1_GPIO_Init();
// USART1_Init();
//}
//// 打印字符串
//void Serial_Print(const char *str) {
// USART1_SendString(str);
//}
//// 打印字符
//void Serial_Write(char ch) {
// USART1_SendChar(ch);
//}
//// 打印格式化字符串
//void Serial_Printf(const char *format, ...) {
// va_list args;
// va_start(args, format);
// USART1_SendFormatted(format, args);
// va_end(args);
//}
#include "uart_log.h" #include "uart_log.h"
#include <stdarg.h> #include <stdarg.h>
#include <string.h> #include <string.h>
#include <stdio.h> // 包含<stdio.h>头文件 #include <stdio.h> // 包含<stdio.h>头文件
// 缓冲区大小
#define SERIAL_BUFFER_SIZE 128 #define SERIAL_BUFFER_SIZE 128
// USART1 GPIO初始化
void USART1_GPIO_Init(void) { void USART1_GPIO_Init(void) {
// 使能GPIOA和USART1时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_USART1EN; RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_USART1EN;
GPIOA->CRH &= ~(0xF << 20); GPIOA->CRH &= ~(0xF << 4);
GPIOA->CRH |= (0xB << 20); GPIOA->CRH |= (0xB << 4);
GPIOA->CRH &= ~(0xF << 8);
GPIOA->CRH &= ~(0xF << 24); // 清除模式控制位 GPIOA->CRH |= (0x4 << 8);
GPIOA->CRH |= (0x4 << 24); // 设置为浮空输入
} }
// USART1初始化
void USART1_Init(void) { void USART1_Init(void) {
// 设置波特率 USART1->BRR = 0x1D4C;
uint32_t BRR = (uint32_t)(SystemCoreClock / 16 / 115200); USART1->CR1 = USART_CR1_UE | USART_CR1_TE | USART_CR1_RE;
USART1->BRR = BRR; USART1->CR2 = 0;
USART1->CR3 = 0;
// 配置USART1
USART1->CR1 = USART_CR1_UE | USART_CR1_TE | USART_CR1_RE; // 使能USART1、发送器和接收器
USART1->CR2 = 0; // 不使用流控制
USART1->CR3 = 0; // 不使用额外功能
} }
// 发送一个字符
void USART1_SendChar(char ch) { void USART1_SendChar(char ch) {
while (!(USART1->SR & USART_SR_TXE)); // 等待发送缓冲区为空 while (!(USART1->SR & USART_SR_TXE));
USART1->DR = (ch & 0xFF); // 发送字符 USART1->DR = (ch & 0xFF);
} }
// 发送字符串
void USART1_SendString(const char *str) { void USART1_SendString(const char *str) {
while (*str) { while (*str) {
USART1_SendChar(*str++); USART1_SendChar(*str++);
} }
} }
// 格式化字符串并发送
void USART1_SendFormatted(const char *format, ...) {
char buffer[SERIAL_BUFFER_SIZE];
va_list args;
va_start(args, format);
vsnprintf(buffer, sizeof(buffer), format, args);
va_end(args);
USART1_SendString(buffer);
}
// 初始化串口日志
void Serial_Init(void) { void Serial_Init(void) {
USART1_GPIO_Init(); USART1_GPIO_Init();
USART1_Init(); USART1_Init();
} }
// 打印字符串
void Serial_Print(const char *str) { void Serial_Print(const char *str) {
USART1_SendString(str); USART1_SendString(str);
} }
// 打印字符
void Serial_Write(char ch) { void Serial_Write(char ch) {
USART1_SendChar(ch); USART1_SendChar(ch);
} }
// 打印格式化字符串
void Serial_Printf(const char *format, ...) { void Serial_Printf(const char *format, ...) {
char buffer[SERIAL_BUFFER_SIZE];
va_list args; va_list args;
va_start(args, format); va_start(args, format);
USART1_SendFormatted(format, args); vsnprintf(buffer, sizeof(buffer), format, args);
va_end(args); va_end(args);
USART1_SendString(buffer);
} }
#include "walking_motor.h"
#include "common.h"
#include "stm32f10x.h"
// 初始化定时器 TIM3 函数
void TIM3_CH2_Init(uint16_t psc,uint16_t arr){
// 使能 TIM3 时钟
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
// 设置预分频器为 72-1,使时钟频率为 1 MHz (72 MHz / 72)
TIM3->PSC = psc;//72 - 1;
// 设置自动重装载值为 1000 - 1,对应于 1 毫秒 (1 MHz * 1 ms)
TIM3->ARR =arr;//1000 - 1;
// 配置 TIM3 通道 1 为 PWM 模式 1
TIM3->CCMR1 &= ~TIM_CCMR1_OC2M; // 清空模式位
TIM3->CCMR1 |= TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2; // PWM 模式1
TIM3->CCER |= TIM_CCER_CC2E; // 使能通道 1 输出
TIM3->CCR2 = 500; // 设置占空比为 50%
// 使能 TIM3
TIM3->CR1 |= TIM_CR1_CEN;
}
// 设置方向
// 设置方向函数
void Walking_SetDirection(int direction){
if (direction){
GPIOC->ODR |= (1 << 5); // 设置高电平 (顺时针方向)
} else {
GPIOC->ODR &= ~(1 << 5); // 设置低电平 (逆时针方向)
}
}
// 使能控制函数
void Walking_Enable_Rotate(bool enable) {
if (enable) {
GPIOF->ODR &= ~(1 << 11); // 设置低电平 (使能步进电机)
} else {
GPIOF->ODR |= (1 << 11); // 设置高电平 (关闭步进电机)
}
}
// 设置PWM频率
void Walking_Set_PWM_Frequency(uint32_t frequency) {
// 计算ARR值
uint32_t arr_value = (SYSCLK_FREQUENCY / ((TIM3->PSC + 1) * frequency)) - 1;
// 更新自动重装载寄存器
TIM3->ARR = arr_value;
TIM3->CCR2 = arr_value / 2; // 保持50%占空比
}
// 梯形加速函数
void WalkingMotor_Accelerate(uint32_t targetRPM, uint32_t acceleration) {
uint32_t currentRPM = 0;
uint32_t deltaRPM = (acceleration / 60000) * 10; // 10ms内的速度增量
while (currentRPM < targetRPM) {
if (currentRPM == 0) {
currentRPM = 100;
}
// 更新PWM频率
uint32_t pwmFrequency = (currentRPM * STEPMOTOR_PULSEPERROUND) / 60;
Walking_Set_PWM_Frequency(pwmFrequency);
// 每次加速的增量
currentRPM += deltaRPM;
if (currentRPM > targetRPM) {
currentRPM = targetRPM; // 防止超过目标速度
}
// 延时 10ms,每次迭代增加速度
Delay(10, 'm');
}
// 达到目标速度,保持目标速度的PWM频率
uint32_t finalFrequency = (targetRPM * STEPMOTOR_PULSEPERROUND) / 60;
Walking_Set_PWM_Frequency(finalFrequency);
}
// 梯形减速函数:将当前转速逐步减速为 0
void WalkingMotor_Decelerate(uint32_t currentRPM, uint32_t deceleration) {
uint32_t deltaRPM = (deceleration / 60000) * 10; // 10ms 内的速度减量
while (currentRPM > 0) {
// 计算 PWM 频率
uint32_t pwmFrequency = (currentRPM * STEPMOTOR_PULSEPERROUND) / 60;
Walking_Set_PWM_Frequency(pwmFrequency); // 更新PWM频率以调整电机速度
// 每次减速的增量
if (currentRPM > deltaRPM) {
currentRPM -= deltaRPM; // 减速
} else {
currentRPM = 0;
}
Delay(10, 'm');
}
Walking_Set_PWM_Frequency(0);
}
void Walking_Update_Motor_Status(WalkingMotor *motor, SpeedStatus status, uint32_t targetSpeed, uint32_t acceleration) {
motor->base.speedStatus = status; // 更新电机的速度状态
motor->base.desSpeed = targetSpeed; // 更新目标速度
motor->base.acceleration = acceleration; // 更新加速度
switch (status) {
case SPEED_ACC:
// 加速过程
WalkingMotor_Accelerate(targetSpeed, acceleration);
break;
case SPEED_DEC:
// 减速过程
WalkingMotor_Decelerate(motor->base.curSpeed, acceleration);
break;
case SPEED_NONE:
// 匀速,保持当前速度
Walking_Set_PWM_Frequency((motor->base.curSpeed * STEPMOTOR_PULSEPERROUND) / 60);
break;
case SPEED_STOP:
// 停止电机
motor->base.curSpeed = 0;
Walking_Set_PWM_Frequency(0); // 关闭PWM
break;
default:
break;
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -127,7 +127,7 @@ ...@@ -127,7 +127,7 @@
<tRSysVw>1</tRSysVw> <tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb> <sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime> <sLrtime>0</sLrtime>
<nTsel>1</nTsel> <nTsel>11</nTsel>
<sDll></sDll> <sDll></sDll>
<sDllPa></sDllPa> <sDllPa></sDllPa>
<sDlgDll></sDlgDll> <sDlgDll></sDlgDll>
...@@ -138,16 +138,130 @@ ...@@ -138,16 +138,130 @@
<tDlgDll></tDlgDll> <tDlgDll></tDlgDll>
<tDlgPa></tDlgPa> <tDlgPa></tDlgPa>
<tIfile></tIfile> <tIfile></tIfile>
<pMon>BIN\UL2CM3.DLL</pMon> <pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt> </DebugOpt>
<TargetDriverDllRegistry> <TargetDriverDllRegistry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U6&amp;11FA2B28&amp;0&amp;4 -I0 -O206 -S1 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103ZE$Flash/STM32F10x_512.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key> <Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 -FP0($$Device:STM32F103ZE$Flash/STM32F10x_512.FLM))</Name> <Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 -FP0($$Device:STM32F103ZE$Flash/STM32F10x_512.FLM))</Name>
</SetRegEntry> </SetRegEntry>
</TargetDriverDllRegistry> </TargetDriverDllRegistry>
<Breakpoint/> <Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>81</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134226530</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>D:\宓屽叆寮?mcu\Motor_Control\Module\Src\parking_sensor.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\MotorControl\Module/Src/parking_sensor.c\81</Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>86</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134226552</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>D:\宓屽叆寮?mcu\Motor_Control\Module\Src\parking_sensor.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\MotorControl\Module/Src/parking_sensor.c\86</Expression>
</Bp>
<Bp>
<Number>2</Number>
<Type>0</Type>
<LineNumber>84</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134226544</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>D:\宓屽叆寮?mcu\Motor_Control\Module\Src\parking_sensor.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\MotorControl\Module/Src/parking_sensor.c\84</Expression>
</Bp>
<Bp>
<Number>3</Number>
<Type>0</Type>
<LineNumber>92</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134226578</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>D:\宓屽叆寮?mcu\Motor_Control\Module\Src\parking_sensor.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\MotorControl\Module/Src/parking_sensor.c\92</Expression>
</Bp>
<Bp>
<Number>4</Number>
<Type>0</Type>
<LineNumber>94</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134226618</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>D:\宓屽叆寮?mcu\Motor_Control\Module\Src\parking_sensor.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\MotorControl\Module/Src/parking_sensor.c\94</Expression>
</Bp>
</Breakpoint>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>0</SubType>
<ItemText>0x08002DB6</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<Tracepoint> <Tracepoint>
<THDelay>0</THDelay> <THDelay>0</THDelay>
</Tracepoint> </Tracepoint>
...@@ -159,7 +273,7 @@ ...@@ -159,7 +273,7 @@
<aSer1>0</aSer1> <aSer1>0</aSer1>
<aSer2>0</aSer2> <aSer2>0</aSer2>
<aPa>0</aPa> <aPa>0</aPa>
<viewmode>0</viewmode> <viewmode>1</viewmode>
<vrSel>0</vrSel> <vrSel>0</vrSel>
<aSym>0</aSym> <aSym>0</aSym>
<aTbox>0</aTbox> <aTbox>0</aTbox>
...@@ -223,47 +337,346 @@ ...@@ -223,47 +337,346 @@
<Focus>0</Focus> <Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\Module\Inc\StepMotor.h</PathWithFileName> <PathWithFileName>.\Module\Inc\uart_log.h</PathWithFileName>
<FilenameWithoutPath>StepMotor.h</FilenameWithoutPath> <FilenameWithoutPath>uart_log.h</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>3</FileNumber> <FileNumber>3</FileNumber>
<FileType>5</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<Focus>0</Focus> <Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\Module\Inc\uart_log.h</PathWithFileName> <PathWithFileName>.\Module\Src\uart_log.c</PathWithFileName>
<FilenameWithoutPath>uart_log.h</FilenameWithoutPath> <FilenameWithoutPath>uart_log.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>4</FileNumber> <FileNumber>4</FileNumber>
<FileType>1</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<Focus>0</Focus> <Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\Module\Src\StepMotor.c</PathWithFileName> <PathWithFileName>.\Module\Inc\walking_motor.h</PathWithFileName>
<FilenameWithoutPath>StepMotor.c</FilenameWithoutPath> <FilenameWithoutPath>walking_motor.h</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>5</FileNumber> <FileNumber>5</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Inc\rotate_motor.h</PathWithFileName>
<FilenameWithoutPath>rotate_motor.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<Focus>0</Focus> <Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\Module\Src\uart_log.c</PathWithFileName> <PathWithFileName>.\Module\Src\rotate_motor.c</PathWithFileName>
<FilenameWithoutPath>uart_log.c</FilenameWithoutPath> <FilenameWithoutPath>rotate_motor.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Inc\pneumatic_solenoid.h</PathWithFileName>
<FilenameWithoutPath>pneumatic_solenoid.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Src\pneumatic_solenoid.c</PathWithFileName>
<FilenameWithoutPath>pneumatic_solenoid.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Src\parking_sensor.c</PathWithFileName>
<FilenameWithoutPath>parking_sensor.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Inc\common.h</PathWithFileName>
<FilenameWithoutPath>common.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Inc\parking_sensor.h</PathWithFileName>
<FilenameWithoutPath>parking_sensor.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Src\common.c</PathWithFileName>
<FilenameWithoutPath>common.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Inc\distance_switch.h</PathWithFileName>
<FilenameWithoutPath>distance_switch.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Src\distance_switch.c</PathWithFileName>
<FilenameWithoutPath>distance_switch.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>15</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Inc\photoelectric_switch.h</PathWithFileName>
<FilenameWithoutPath>photoelectric_switch.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Src\photoelectric_switch.c</PathWithFileName>
<FilenameWithoutPath>photoelectric_switch.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>17</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Inc\temperature_sensor.h</PathWithFileName>
<FilenameWithoutPath>temperature_sensor.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>18</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Inc\onewire.h</PathWithFileName>
<FilenameWithoutPath>onewire.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Src\onewire.c</PathWithFileName>
<FilenameWithoutPath>onewire.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>20</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Src\temperature_sensor.c</PathWithFileName>
<FilenameWithoutPath>temperature_sensor.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>21</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Inc\emergency_stop.h</PathWithFileName>
<FilenameWithoutPath>emergency_stop.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>22</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Src\emergency_stop.c</PathWithFileName>
<FilenameWithoutPath>emergency_stop.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>23</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Inc\buzzer.h</PathWithFileName>
<FilenameWithoutPath>buzzer.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>24</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Src\buzzer.c</PathWithFileName>
<FilenameWithoutPath>buzzer.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>25</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Inc\motor_common.h</PathWithFileName>
<FilenameWithoutPath>motor_common.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>26</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Src\walking_motor.c</PathWithFileName>
<FilenameWithoutPath>walking_motor.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>27</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Inc\ds18b20.h</PathWithFileName>
<FilenameWithoutPath>ds18b20.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>28</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Module\Src\ds18b20.c</PathWithFileName>
<FilenameWithoutPath>ds18b20.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
......
...@@ -147,7 +147,7 @@ ...@@ -147,7 +147,7 @@
<RestoreSysVw>1</RestoreSysVw> <RestoreSysVw>1</RestoreSysVw>
</Target> </Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild> <RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>1</TargetSelection> <TargetSelection>11</TargetSelection>
<SimDlls> <SimDlls>
<CpuDll></CpuDll> <CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments> <CpuDllArguments></CpuDllArguments>
...@@ -161,7 +161,7 @@ ...@@ -161,7 +161,7 @@
<PeripheralDll></PeripheralDll> <PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments> <PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile> <InitializationFile></InitializationFile>
<Driver>BIN\UL2CM3.DLL</Driver> <Driver>STLink\ST-LINKIII-KEIL_SWO.dll</Driver>
</TargetDlls> </TargetDlls>
</DebugOption> </DebugOption>
<Utilities> <Utilities>
...@@ -419,24 +419,139 @@ ...@@ -419,24 +419,139 @@
<GroupName>Module</GroupName> <GroupName>Module</GroupName>
<Files> <Files>
<File> <File>
<FileName>StepMotor.h</FileName> <FileName>uart_log.h</FileName>
<FileType>5</FileType> <FileType>5</FileType>
<FilePath>.\Module\Inc\StepMotor.h</FilePath> <FilePath>.\Module\Inc\uart_log.h</FilePath>
</File> </File>
<File> <File>
<FileName>uart_log.h</FileName> <FileName>uart_log.c</FileName>
<FileType>1</FileType>
<FilePath>.\Module\Src\uart_log.c</FilePath>
</File>
<File>
<FileName>walking_motor.h</FileName>
<FileType>5</FileType> <FileType>5</FileType>
<FilePath>.\Module\Inc\uart_log.h</FilePath> <FilePath>.\Module\Inc\walking_motor.h</FilePath>
</File>
<File>
<FileName>rotate_motor.h</FileName>
<FileType>5</FileType>
<FilePath>.\Module\Inc\rotate_motor.h</FilePath>
</File> </File>
<File> <File>
<FileName>StepMotor.c</FileName> <FileName>rotate_motor.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>.\Module\Src\StepMotor.c</FilePath> <FilePath>.\Module\Src\rotate_motor.c</FilePath>
</File> </File>
<File> <File>
<FileName>uart_log.c</FileName> <FileName>pneumatic_solenoid.h</FileName>
<FileType>5</FileType>
<FilePath>.\Module\Inc\pneumatic_solenoid.h</FilePath>
</File>
<File>
<FileName>pneumatic_solenoid.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>.\Module\Src\uart_log.c</FilePath> <FilePath>.\Module\Src\pneumatic_solenoid.c</FilePath>
</File>
<File>
<FileName>parking_sensor.c</FileName>
<FileType>1</FileType>
<FilePath>.\Module\Src\parking_sensor.c</FilePath>
</File>
<File>
<FileName>common.h</FileName>
<FileType>5</FileType>
<FilePath>.\Module\Inc\common.h</FilePath>
</File>
<File>
<FileName>parking_sensor.h</FileName>
<FileType>5</FileType>
<FilePath>.\Module\Inc\parking_sensor.h</FilePath>
</File>
<File>
<FileName>common.c</FileName>
<FileType>1</FileType>
<FilePath>.\Module\Src\common.c</FilePath>
</File>
<File>
<FileName>distance_switch.h</FileName>
<FileType>5</FileType>
<FilePath>.\Module\Inc\distance_switch.h</FilePath>
</File>
<File>
<FileName>distance_switch.c</FileName>
<FileType>1</FileType>
<FilePath>.\Module\Src\distance_switch.c</FilePath>
</File>
<File>
<FileName>photoelectric_switch.h</FileName>
<FileType>5</FileType>
<FilePath>.\Module\Inc\photoelectric_switch.h</FilePath>
</File>
<File>
<FileName>photoelectric_switch.c</FileName>
<FileType>1</FileType>
<FilePath>.\Module\Src\photoelectric_switch.c</FilePath>
</File>
<File>
<FileName>temperature_sensor.h</FileName>
<FileType>5</FileType>
<FilePath>.\Module\Inc\temperature_sensor.h</FilePath>
</File>
<File>
<FileName>onewire.h</FileName>
<FileType>5</FileType>
<FilePath>.\Module\Inc\onewire.h</FilePath>
</File>
<File>
<FileName>onewire.c</FileName>
<FileType>1</FileType>
<FilePath>.\Module\Src\onewire.c</FilePath>
</File>
<File>
<FileName>temperature_sensor.c</FileName>
<FileType>1</FileType>
<FilePath>.\Module\Src\temperature_sensor.c</FilePath>
</File>
<File>
<FileName>emergency_stop.h</FileName>
<FileType>5</FileType>
<FilePath>.\Module\Inc\emergency_stop.h</FilePath>
</File>
<File>
<FileName>emergency_stop.c</FileName>
<FileType>1</FileType>
<FilePath>.\Module\Src\emergency_stop.c</FilePath>
</File>
<File>
<FileName>buzzer.h</FileName>
<FileType>5</FileType>
<FilePath>.\Module\Inc\buzzer.h</FilePath>
</File>
<File>
<FileName>buzzer.c</FileName>
<FileType>1</FileType>
<FilePath>.\Module\Src\buzzer.c</FilePath>
</File>
<File>
<FileName>motor_common.h</FileName>
<FileType>5</FileType>
<FilePath>.\Module\Inc\motor_common.h</FilePath>
</File>
<File>
<FileName>walking_motor.c</FileName>
<FileType>1</FileType>
<FilePath>.\Module\Src\walking_motor.c</FilePath>
</File>
<File>
<FileName>ds18b20.h</FileName>
<FileType>5</FileType>
<FilePath>.\Module\Inc\ds18b20.h</FilePath>
</File>
<File>
<FileName>ds18b20.c</FileName>
<FileType>1</FileType>
<FilePath>.\Module\Src\ds18b20.c</FilePath>
</File> </File>
</Files> </Files>
</Group> </Group>
......
[EXTDLL]
Count=0
No preview for this file type
...@@ -17,24 +17,46 @@ Library Manager: ArmAr.exe V5.05 update 1 (build 106) ...@@ -17,24 +17,46 @@ Library Manager: ArmAr.exe V5.05 update 1 (build 106)
Hex Converter: FromElf.exe V5.05 update 1 (build 106) Hex Converter: FromElf.exe V5.05 update 1 (build 106)
CPU DLL: SARMCM3.DLL V5.14.0.0 CPU DLL: SARMCM3.DLL V5.14.0.0
Dialog DLL: DCM.DLL V1.13.1.0 Dialog DLL: DCM.DLL V1.13.1.0
Target DLL: UL2CM3.DLL V1.155.0.0 Target DLL: STLink\ST-LINKIII-KEIL_SWO.dll V2.0.14.0_KEIL
Dialog DLL: TCM.DLL V1.14.4.0 Dialog DLL: TCM.DLL V1.14.4.0
<h2>Project:</h2> <h2>Project:</h2>
D:\Ƕʽ\mcu\Motor_Control\MotorControl.uvprojx D:\Ƕʽ\mcu\Motor_Control\MotorControl.uvprojx
Project File Date: 09/25/2024 Project File Date: 10/28/2024
<h2>Output:</h2> <h2>Output:</h2>
Build target 'PWM' Build target 'PWM'
compiling main.c... compiling main.c...
.\Module\Inc\parking_sensor.h(25): warning: #1295-D: Deprecated declaration CalculateDistance - give arg types
double CalculateDistance();
main.c: 1 warning, 0 errors
compiling uart_log.c... compiling uart_log.c...
compiling step_motor.c... compiling rotate_motor.c...
compiling pneumatic_solenoid.c...
compiling parking_sensor.c...
.\Module\Inc\parking_sensor.h(25): warning: #1295-D: Deprecated declaration CalculateDistance - give arg types
double CalculateDistance();
Module\Src\parking_sensor.c: 1 warning, 0 errors
compiling common.c...
.\Module\Inc\parking_sensor.h(25): warning: #1295-D: Deprecated declaration CalculateDistance - give arg types
double CalculateDistance();
Module\Src\common.c(109): warning: #61-D: integer operation result is out of range
GPIOE->CRL &= ~(0xF << (4*7)); // 清空 PE7 配置 (?0-23)
Module\Src\common.c: 2 warnings, 0 errors
compiling distance_switch.c...
compiling photoelectric_switch.c...
compiling onewire.c...
compiling temperature_sensor.c...
compiling emergency_stop.c...
compiling buzzer.c...
compiling walking_motor.c...
compiling ds18b20.c...
assembling startup_stm32f10x_hd.s... assembling startup_stm32f10x_hd.s...
compiling system_stm32f10x.c... compiling system_stm32f10x.c...
linking... linking...
Program Size: Code=1196 RO-data=336 RW-data=20 ZI-data=1636 Program Size: Code=12812 RO-data=916 RW-data=20 ZI-data=1636
FromELF: creating hex file... FromELF: creating hex file...
".\Objects\MotorControl.axf" - 0 Error(s), 0 Warning(s). ".\Objects\MotorControl.axf" - 0 Error(s), 4 Warning(s).
<h2>Software Packages used:</h2> <h2>Software Packages used:</h2>
...@@ -53,10 +75,10 @@ Package Vendor: Keil ...@@ -53,10 +75,10 @@ Package Vendor: Keil
<h2>Collection of Component Files used:</h2> <h2>Collection of Component Files used:</h2>
* Component: Keil::Device:Startup:1.0.0 * Component: Keil::Device:Startup:1.0.0
Source file: Device\Source\ARM\startup_stm32f10x_hd.s
Source file: Device\Source\ARM\STM32F1xx_OPT.s
Source file: Device\Source\system_stm32f10x.c Source file: Device\Source\system_stm32f10x.c
Include file: RTE_Driver\Config\RTE_Device.h Include file: RTE_Driver\Config\RTE_Device.h
Source file: Device\Source\ARM\STM32F1xx_OPT.s
Source file: Device\Source\ARM\startup_stm32f10x_hd.s
</pre> </pre>
</body> </body>
</html> </html>
:020000040800F2 :020000040800F2
:1000000078060020CD010008D5010008D7010008BE :1000000078060020790200088102000883020008B7
:10001000D9010008DB010008DD0100080000000034 :10001000850200088702000889020008000000002D
:10002000000000000000000000000000DF010008E8 :100020000000000000000000000000008B0200083B
:10003000E101000800000000E3010008E5010008FC :100030008D020008000000008F02000891020008F5
:10004000E7010008E7010008E7010008E7010008F0 :10004000930200089302000893020008930200083C
:10005000E7010008E7010008E7010008E7010008E0 :100050009302000893020008E91D000893020008BB
:10006000E7010008E7010008E7010008E7010008D0 :100060005D1E000893020008930200089302000836
:10007000E7010008E7010008E7010008E7010008C0 :10007000930200089302000893020008930200080C
:10008000E7010008E7010008E7010008E7010008B0 :1000800093020008930200089302000893020008FC
:10009000E7010008E7010008E7010008E7010008A0 :100090009302000893020008930200087D1E0008E6
:1000A000E7010008E7010008E7010008E701000890 :1000A00093020008930200089302000893020008DC
:1000B000E7010008E7010008E7010008E701000880 :1000B00093020008930200089302000893020008CC
:1000C000E7010008E7010008E7010008E701000870 :1000C00093020008930200089302000893020008BC
:1000D000E7010008E7010008E7010008E701000860 :1000D00093020008930200089302000893020008AC
:1000E000E7010008E7010008E7010008E701000850 :1000E000091E00089302000893020008930200080A
:1000F000E7010008E7010008E7010008E701000840 :1000F000930200089302000893020008930200088C
:10010000E7010008E7010008E7010008E70100082F :10010000930200089302000893020008930200087B
:10011000E7010008E7010008E7010008E70100081F :10011000930200089302000893020008930200086B
:10012000E7010008E7010008E7010008E70100080F :10012000930200089302000893020008930200085B
:1001300000F002F800F03AF80AA090E8000C8244BF :1001300000F002F800F090F80AA090E8000C824469
:100140008344AAF10107DA4501D100F02FF8AFF29C :100140008344AAF10107DA4501D100F085F8AFF246
:10015000090EBAE80F0013F0010F18BFFB1A43F0A5 :10015000090EBAE80F0013F0010F18BFFB1A43F0A5
:10016000010318477804000098040000103A24BFE7 :1001600001031847F032000010330000103A24BF9A
:1001700078C878C1FAD8520724BF30C830C144BF0C :1001700078C878C1FAD8520724BF30C830C144BF0C
:1001800004680C607047000000230024002500264E :1001800004680C607047000000230024002500264E
:10019000103A28BF78C1FBD8520728BF30C148BFEA :10019000103A28BF78C1FBD8520728BF30C148BFEA
:1001A0000B6070471FB51FBD10B510BD00F031F8D2 :1001A0000B6070476E2900F07581702900F0BF82E6
:1001B0001146FFF7F7FF00F0F1F900F04FF803B434 :1001B000662903F0BF80652903F0BC80672903F03E
:1001C000FFF7F2FF03BC00F055F800000948804734 :1001C000B980612903F0B88003681B0A28BF41F099
:1001D00009480047FEE7FEE7FEE7FEE7FEE7FEE729 :1001D0008001692900F02281642900F01F817529BE
:1001E000FEE7FEE7FEE7FEE704480549054A064B41 :1001E00000F01C816F2900F04D82782900F08B828D
:1001F0007047000061040008310100087800002009 :1001F000E92900F0E781E42900F0E481F52900F025
:1002000078060020780200207802002070477047AE :10020000E181EF2900F04A82F82900F08A82036830
:100210007047754600F028F8AE460500694653461B :10021000DB0928BF41F08001632900F08B87732937
:1002200020F00700854618B020B5FFF7DDFFBDE8D8 :1002200000F09087E32900F09B87F32900F0A08776
:1002300020404FF000064FF000074FF000084FF04D :10023000002070471FB500F0EDFF040000200021F2
:10024000000B21F00701AC46ACE8C009ACE8C009DE :1002400002F0CCFD401C60600020002102F0B0FDF7
:10025000ACE8C009ACE8C0098D4670470446AFF36E :10025000E0601FBD10B510BD00F0AEFF1146FFF706
:1002600000802046FFF7ABFF0048704714000020D5 :10026000E9FF02F03DFD01F087F803B4FFF7F2FF6C
:100270007047000001491820ABBEFEE726000200CF :1002700003BC01F0CDF80000094880470948004759
:1002800008B50021009103E000BF0099491C0091CE :10028000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE746
:1002900000EB4001C1EBC011009AB2EBC10FF3D3E8 :10029000FEE7FEE704480549054A064B70470000A3
:1002A00008BD000030B10749096821F40061054A22 :1002A000C5250008310100087800002078060020EC
:1002B000116005E00349096841F40061014A1160D9 :1002B00078020020780200207CB51D4616460C000E
:1002C000704700000C1C01401B48806940F0100082 :1002C000009001D02044401E074B7B442A466946DB
:1002D000194988610846806940F0800088610846B5 :1002D0000190304600F0F7F805461CB10020694651
:1002E000806940F0010088611448006820F0706067 :1002E00000F004F928467CBD2902000010B5203A30
:1002F000124908600846006840F03060086008460F :1002F000C0F00B80B1E81850203AA0E81850B1E8DF
:10030000006820F4700008600846006840F440105F :100300001850A0E81850BFF4F5AF5FEA027C24BF94
:1003100008600B48006820F47040094908600846EE :10031000B1E81850A0E8185044BF18C918C0BDE88B
:10032000006840F4405008600648406840F440606F :1003200010405FEA827C24BF51F8043B40F8043B54
:10033000044948607047000000100240001001406E :1003300008BF7047D20728BF31F8023B48BF11F809
:10034000041C01400000014000B500F0EDF800F091 :10034000012B28BF20F8023B48BF00F8012B704763
:100350000DF900BD10B500F001F810BD0CB500207E :1003500070477047704770B5044685690068C106EC
:10036000019000903348006840F4803031490860C3 :1003600001D5302600E02026C00707D070BDD4E9B3
:1003700000BF3048006800F4003000900198401C35 :10037000012130469047206A401C20626D1EF6D550
:100380000190009818B90198B0F5A06FF1D12948F3 :1003800070BD70B5044685690078C00707D170BD9F
:10039000006800F4003010B10120009001E000205E :10039000D4E9012120209047206A401C20626D1E74
:1003A00000900098012843D12348006840F01000D5 :1003A000F6D570BD09684A0501D540B27047C90548
:1003B000214908600846006820F0030008600846EC :1003B000FCD500B2704709684A0501D5C0B2704744
:1003C000006840F0020008601A4840681949486017 :1003C000C905FCD580B2704770B50C460546012AB8
:1003D0000846406848600846406840F480604860CD :1003D00005D02878800600D5EA69002302E00123D1
:1003E0000846406820F47C1048600846406840F4A5 :1003E00005E05B1C934202D2E05C0028F9D1A869C9
:1003F000E81048600846006840F08070086000BF60 :1003F000E618C01AA861286A184428622846FFF740
:100400000C48006800F000700028F9D009484068E6 :10040000AAFF04E0D5E9012114F8010B9047B4429A
:1004100020F00300074948600846406840F00200A9 :10041000F8D32846FFF7B5FF70BD00002DE9F04185
:10042000486000BF0348406800F00C000828F9D17C :100420000646002410687529314616A510D0FFF73E
:100430000CBD0000001002400020024030B107490E :10043000B9FF002802DA404213A507E031688A07B5
:10044000C96841F02001054AD16005E00349C96847 :1004400001D512A502E0490704D511A5012401E058
:1004500021F02001014AD1607047000000100140E6 :10045000FFF7B1FF00210A2206F1240709E0B0FBF3
:1004600010B51348006840F00100114908600846C3 :10046000F2FCB0FBF2F302FB1C003030785418466B
:100470004068104908400E494860084600680E4927 :10047000491C0028F3D123462A463046BDE8F04106
:1004800008400B4908600846006820F48020086096 :1004800000F069BA000000002D0000002B00000001
:100490000846406820F4FE0048604FF41F00886062 :100490002000000011680268006A530501D5087049
:1004A000FFF758FF4FF000600449086010BD0000DE :1004A0000AE0D30501D5088006E0130603D5C2177C
:1004B000001002400000FFF8FFFFF6FE08ED00E02C :1004B000C1E9000200E008600120704701694A1CA0
:1004C0001748C06940F002001549C8614720154926 :1004C00002610878704700B58FB0CDE90131002195
:1004D000088040F2E730091D088012481038008873 :1004D000059105497944CDE903101146684600F0BD
:1004E00020F070000F49103908800846008840F05D :1004E00031F90FB000BD0000E5FFFFFF0A6802F818
:1004F000600008800B480838008840F00100094976 :1004F000010B0A607047D1E900239A4202D2531CD3
:10050000083908804FF4FA7006490C310880054814 :100500000B601070704700002DE9FF5F15468A46AA
:100510002838008840F001000249283908807047D7 :100510000446DFF8AC80F8440027D8E900103E46D6
:1005200000100240280400400E48806944F2040193 :10052000CDE9001010E03AF816106A4602A800F073
:1005300008430C4988610C48006820F470000A499F :1005300023FE411C07D02178890603D5E2693918CA
:1005400008600846006840F430000860084600680B :1005400091420DD80744761C2078800602D5E069D8
:1005500020F0706008600846006840F08060086025 :10055000B84205DDAE42E6DB3AF816000028E2D1EB
:100560007047000000100240040801400949096872 :10056000A069C01BA0612046FFF7F5FED8E9001086
:1005700009094FF4E132B1FBF2F0074A108042F270 :10057000CDE90010002017E03AF818106A4602A8EA
:100580000C01121D11800021121D1180121D1180FD :1005800000F0FAFDB0F1FF3F81460BD000250DF1E0
:10059000704700000000002008380140FFF794FE7B :10059000080B05E0D4E901211BF8050090476D1C0C
:1005A000FFF78EFFFFF7D0FE0120FFF747FF012086 :1005A0004D45F7D308F10100B0428046E4DB206AF4
:1005B000FFF778FE012400250CE00748854205D3AB :1005B000384420622046FFF7E4FEBDE8FF9F0000BC
:1005C00084F001042046FFF739FF00250120FFF7E2 :1005C0003E2E00002DE9F0418046D21D22F00702A8
:1005D00057FE6D1CF1E7000020A10700FC05000894 :1005D0000025D2E90002F52915A614D0011E72F1FA
:1005E00000000020140000006C0100081006000844 :1005E000000106DA0023D0EB030063EB020211A640
:1005F00014000020640600008801000800A24A04DC :1005F00008E0D8F800108B0701D50FA602E04907E4
:1006000000000000000000000102030406070809C2 :1006000001D50EA601251146002408F1240704E0B7
:1006100000F05CF930323A55641C50EA0102F7D11F
:100620002B46324621464046BDE8F04100F093B9E2
:10063000000000002D0000002B0000002000000042
:1006400030B4002100F1240408E002F00705D208CC
:10065000303542EA4372DB086554491C52EA03050F
:10066000F3D10468002310A2250708D504F0200464
:100670000C4304D0C46901230CA2641EC46130BCC5
:1006800000F069B910B5044621461068FFF793FEE3
:1006900002462046BDE810400023D1E7D21D22F0DB
:1006A0000701D1E90023CBE7000000003000000083
:1006B000F0B40D460188090502D5214C7C4402E0C6
:1006C0001F4C7C440E34002100F1240608E002F0A7
:1006D0000F071209E75D42EA03721B097754491CB0
:1006E00052EA0307F3D102780023120704D5702DD4
:1006F00006D009B1022311342246F0BC00F02BB918
:1007000001231034F8E770B504460D462146106801
:10071000FFF751FE024629462046BDE870400023FF
:10072000C6E7D21D22F00703D3E90023C0E7036820
:10073000126843F0200303600823C3610023B7E776
:10074000A02C00002DE9F05F894604464FF0000A16
:10075000DFF874B1FB44C0F820A02046E168884768
:10076000002874D0252806D0D4E901219047206ABA
:10077000401C2062F1E700265F462046E16888477A
:100780002028054607DB312D05D2781910F8200CFA
:1007900008B10643F1E7B00701D526F00406C4F816
:1007A0001CA00027C4F818A02A2D09D0284602F062
:1007B0008FFA38B304EB8708303DC8F8185019E0B9
:1007C00059F8041B204604EB87029161E1688847D1
:1007D000012F054618D1E069002820DA26F020060E
:1007E0001DE0D8F8180000EB800005EB4000303821
:1007F000C8F818002046E1688847054602F068FA04
:100800000028EED1012F0AD02E2D08D12046E16814
:1008100088477F1C0546022F46F02006C4DBA069EE
:10082000002803DA404246F00106A061F00701D03B
:1008300026F010066C2D0BD0682D09D04C2D39D028
:100840006A2D35D0742D35D07A2D33D016E038E0AE
:10085000E1682F4620468847B842054609D16C2FEB
:1008600026D04FF48060E16806432046884705465D
:1008700004E06C2F1AD04FF4807006430DB3A5F13D
:100880004100192802D8203546F400664A46294618
:10089000204626604E46FFF785FC80B101280BD02C
:1008A000F61D26F0070000F1080956E74020E4E7AE
:1008B0008020D8E70020D6E706F104094DE7284656
:1008C00052E7206ABDE8F09F302C000030B5B0F14F
:1008D0000A024FEA900E71F100034EEA817EB0EBFE
:1008E0000E0061EB91014FEA101E4EEA017E10EB03
:1008F0000E0041EB11114FEA102E4EEA016E10EB83
:100900000E0041EB11214FEA104E4EEA014E10EB62
:100910000E0041EB1141401841F100014FEAD000B7
:1009200040EA41704FEAD10110EB80054FEA8104A3
:1009300044EA907444EB01046D1944EB0404521B27
:10094000A3414FF0000348BF0A3200D530BD401C20
:1009500041F1000130BD2DE9F0470D469946924620
:10096000044600F124080168880604D5E06921F0F6
:100970001001216000E00120A84201DD471B00E0DA
:100980000027A1697A1902EB0900081AA0612078F2
:10099000C00602D42046FFF7DEFC002608E0D4E9BA
:1009A00001211AF806009047206A401C761C20623C
:1009B0004E45F4DB2078C0060AD52046FFF7CBFC75
:1009C00006E0D4E9012130209047206A401C2062D3
:1009D000381EA7F10107F4DC07E0D4E9012118F87B
:1009E00005009047206A401C2062281EA5F10105E1
:1009F000F3DC2046FFF7C5FC2078000602D5022074
:100A0000BDE8F0870120FBE770472DE9FF4F0C465A
:100A10001E464FF0FF378BB0D2E90001DDF8608051
:100A20000A908A46C1F30A5505B93D460021084699
:100A30004FF00000BAF1000F00F4400005DA00EBBF
:100A400080004FF4400101EA50004FEA9059B9F19B
:100A5000010F00DDB9460A9850EA4A000ED044F66C
:100A60001050A5F2FF3545432F14B8F1000F1ED0EA
:100A70007542291E1EDDC9F100021CE0B8F1010F0C
:100A80004FF0000001D0302103E0F24305E0215493
:100A9000401CB042FBDB30460022002121540B9960
:100AA000C1F80880C1E900200FB0BDE8F08FBD1B80
:100AB0006D1CDEE74A4600DA694206A800F0EEFB4C
:100AC00006AB93E8070003AB83E8070050460A999A
:100AD00000F0A4FC8DE80700A0F500501F3800903E
:100AE0000398002D09DD42F21F014A46084403A97C
:100AF0000390684600F003FF08E0A0F500504A4666
:100B00001F3803A90390684600F00DFF8DE8070029
:100B10000004000C03D04FF0FF30410800E0104605
:100B2000B8F1000F03D00022009215461EE0751E9A
:100B300005D4FFF7CBFE303262556D1EF9D5B346B2
:100B40000122084302D000227F1C04E020783028D4
:100B500001D100227F1E002A099786D01DE0112DA9
:100B600007DAFFF7B3FE303262556D1C50EA01021E
:100B7000F5D1084302D00098C8B10EE00021681EEC
:100B800005E0235C625C63542254401E491C814290
:100B9000F7DBAB46A81B401E0990002004F80B00B1
:100BA0000B98099AC0F80880C0E9002B7CE7112651
:100BB0004FF0000859E72DE9F04F88460446D21D52
:100BC00022F0070191B0D1E90001CDE90A0102F05C
:100BD0006BF802460B98C00F01D02D2007E020686B
:100BE000810701D52B2002E0202101EAC000032A61
:100BF000099001D0072A05DB03464146204600F054
:100C00000DFB0BE12078800601D5E06900E00620AD
:100C1000B8F1650F814606D0B8F1660F18D0B8F16B
:100C2000670F70D131E00020B9F1110F009001DBA6
:100C3000112301E009F101030AAA01A90CA8FFF799
:100C4000E4FEDDE90C70002609F10105834647E06A
:100C500001204B4600904FF000470AAA01A90CA8BA
:100C6000FFF7D3FEDDE90DB00C995D46002610B903
:100C700009F101000D18B9EB050003D4C0F1FF36EE
:100C800009F10105A5EB09002BE0B9F1010F01DA2B
:100C90004FF001090020B9F1110F0090484601DD25
:100CA000112300E003460AAA01A90CA8FFF7ADFE34
:100CB000DDE90C704D4600268346207800070AD4F3
:100CC000AB4500DA5D4601A8012D04DD411911F89C
:100CD000011C302907D04F4502DA17F1040F04DA5E
:100CE000012082460FE06D1EEEE7002F02DCED1BB7
:100CF0003E4403E0781CA84200DD7D1CB81B00F1D7
:100D0000010A4FF000472078000703D4AA4501DB11
:100D10004FF0FF3A0021B7F1004F0DF143088DF875
:100D2000431024D002202B23002F01DA7F422D23F1
:100D30000A21021EA0F1010000DC5FB197FBF1FC6B
:100D400097FBF1F201FB1C7C17460CF1300C08F804
:100D500001CDEEE7A8F1010003702188090501D556
:100D6000452100E06521A0F1010800F8011C099867
:100D70000FA9A1EB0807FF1D00B10120411901EBEC
:100D8000EA70A1693844081A401EA0612078C006A4
:100D900002D42046FFF7DFFA099828B1D4E90121EF
:100DA0009047206A401C20622078C00622D5204649
:100DB000FFF7D1FA1EE0002E04DBB34502DD01A8E7
:100DC000805D00E03020D4E901219047206A401C7A
:100DD0002062761CAAF101005FEA000A0AD100F045
:100DE00019FAC0680168405CD4E901219047206A83
:100DF000401C2062281EA5F10105DCDC07E0D4E9D7
:100E0000012118F8010B9047206A401C2062381E0F
:100E1000A7F10107F3DC2046FFF7B3FA032011B076
:100E200043E600002DE9F04F04460D46D21D22F0A6
:100E3000070089B0D0E9009248461746394601F0CC
:100E400033FF0246F80F01D02D2307E02068810709
:100E500001D52B2302E0202101EAC0038DF82030C8
:100E60000BB1012000E00020032A824601D0072AAE
:100E700004DB2946204600F0D1F93DE120788006C8
:100E800001D40D2500E0E569C7F30A560D2D49DAB6
:100E900000214FEA175B08464FF00000002F00F4D6
:100EA000400007DA00EB80004FF4400100EBD07007
:100EB00001EA60008115012901DD4FF0FF310022B8
:100EC0004FEA850CBCF1180F06D31346ACF118009D
:100ED0004FF08052C24003E04FF4801323FA0CF32A
:100EE0000CF10C0CBCF1200F04D3ACF1200C09FA6E
:100EF0000CF001E007FA0CF000294FF0004801DD8A
:100F000018B90FE00ED140450CD319EB02095F412F
:100F100021B9404502D19F4329EA0209BBEB175F83
:100F200000D0761C2088000502D57B48784402E07A
:100F300079487844193808AA302302F80A30037C2B
:100F40000AF10101002E0AF1020A53546A4602DC3A
:100F50004FF0300101E04FF031014FF001088DF802
:100F6000001002D0A6F2FF3603E059EA470100D094
:100F70006A4E002D02DC2178090704D54FF00208E3
:100F80002E218DF80110C44600210BE0C7F3034366
:100F90003F01C35C491C6D1E02F80830052908F1A9
:100FA000010801DA002DF1DC00210CE000EB1973DF
:100FB000491C1B786D1E082902F808304FEA0919F0
:100FC00008F1010801DA002DF0DC2178890602D54C
:100FD00014E0A8F10108E04505DD02EB080111F875
:100FE000011C3029F5D0B8F1000F07DD02EB080134
:100FF00011F8011C2E2901D1A8F10108002D05DDF1
:101000003E2102F808106D1E08F10108407C002EF8
:1010100002F8080008F1010804DA2D20764202F8EF
:10102000080002E02B2002F808000A214FF47A7031
:10103000864208F101080BDB96FBF0F3303302F82F
:10104000083096FBF0F308F1010800FB136601E09D
:10105000642E0CDB642096FBF0F3303302F808308A
:1010600096FBF0F308F1010800FB136601E00A2E7D
:1010700006DB96FBF1F0303002F8080008F10108B9
:1010800096FBF1F001FB1060303002F80800A16916
:1010900008F1010808EB050202EB0A00081AA0613A
:1010A0002078C00602D42046FFF755F9216A08AE21
:1010B00001EB0A00206204E0D4E9012116F8010BDB
:1010C0009047BAF1010AF7D22078C00602D520462F
:1010D000FFF741F96E4609E016F8010B3E280FD0E4
:1010E000D4E901219047206A401C2062B8F1010830
:1010F000F2D22046FFF745F909B00320BDE8F08F92
:10110000206A2844206203E0D4E90121302090477E
:101110006D1EEBD3F8E700007C24000002FCFFFF0B
:1011200010B5436913B1AFF3008001E0FFF74CF94C
:10113000012010BD127800F124010A7000224A70CB
:101140000122EDE711684FF0FF32E9E710B543697E
:1011500013B1AFF3008001E0FFF7D6F9012010BD15
:10116000128800F1240182840022C2840122EDE76A
:1011700011684FF0FF32E9E770B516460C46054698
:1011800000F040F8036893F80101012806D0FF2C15
:101190000FD8185D68B101202C7070BDD3F807011D
:1011A0003246214603F2071303442846BDE8704047
:1011B00018474FF0FF3070BD754600F0E3F8AE46BB
:1011C00005006946534620F00700854618B020B553
:1011D000FFF760F8BDE820404FF000064FF0000731
:1011E0004FF000084FF0000B21F00701AC46ACE8CF
:1011F000C009ACE8C009ACE8C009ACE8C0098D463C
:101200007047000010B500F005F8001D10BD00BFCC
:10121000CD1B000000487047340000202DE9F0414C
:101220001F46044603260168072A01F4006004DB18
:1012300008B116A505E016A503E008B115A500E064
:1012400015A521F010002060A069C01EA0610FB19B
:10125000401EA0612046FFF77EF84FB1D4E901217E
:1012600038469047206A401C2062C01C206206E07D
:10127000206AFAE7D4E9012115F8010B9047761EA0
:10128000F8D22046FFF77DF8BDE8F0814E414E00D0
:101290006E616E00494E4600696E66002DE9F047AA
:1012A000814616468AB0334878440DC88DE80D0053
:1012B00030487844801C03AC0DC884E80D0041F62A
:1012C0009B300844372190FBF1F290FBF1F5A5F13A
:1012D000800501FB12041B3C02D56442012000E0A2
:1012E0000020DFF890A080460027FA44AAF1BE0A49
:1012F0000DE0E00709D03246684607EB47010AEBEC
:10130000810100F010FB8DE8070064107F1C002CA9
:10131000EFD1184F7F44AC3F18E0E80714D007EB3B
:1013200004100DF1180A90E80E008AE80E00C0685B
:10133000F04201D198190890324606A903A800F09E
:10134000F2FA03AB83E807006D10641C002DE4D1B2
:1013500032466946B8F1000F03A802D000F0CFFA78
:1013600001E000F0E0FAC9E90001C9F808200AB07C
:10137000BDE8F087902100000446AFF300802046CE
:10138000FEF773FF0048704714000020704700000C
:101390004FF0013C50F8042B51F8043B9A4221D104
:1013A000A2EB0C03934313EACC1317D150F8042B90
:1013B00051F8043B9A4215D1A2EB0C03934313EA74
:1013C000CC130BD150F8042B51F8043B9A4209D1AD
:1013D000A2EB0C03934313EACC13DBD04FF00000D5
:1013E000704700BFD01A01BAB1FA81F101F01801BB
:1013F00022FA01F0CB40C1F12001DBB2C0B2C01A29
:101400002CFA01F3D11A914311EAC311E6D17047C6
:1014100001491820ABBEFEE7260002005FEA400C3F
:1014200008BF91F0000F4FEA8C234FEAC12243EA34
:1014300051514FEA1C5018BF00F5F0404FEA300000
:1014400018BF41F000415FEA6C5C00F02980BCF1FC
:10145000FF3F08BF40F080407047130C06BF1204E6
:101460004FF0100C4FF0000C130E04BF12020CF1E1
:10147000080C130F04BF12010CF1040C930F04BFEE
:1014800092000CF1020CD30F04BF52000CF1010CBE
:1014900011464FF00002A0F11F00A0EB0C007047B6
:1014A00011F0004F08BF704731F000413FF4D5AF55
:1014B0000B0C06BF09044FF0100C4FF0000C0B0E84
:1014C00004BF09020CF1080C0B0F04BF09010CF159
:1014D000040C8B0F04BF89000CF1020CCB0F04BF6E
:1014E00049000CF1010CCCF12003A0EB0C0022FA16
:1014F00003F302FA0CF241EA030100F10100704724
:1015000020F07F4C80EA030023F07F47ACEB070319
:1015100003F57C5300F0004003F1FF032DE98049FF
:101520004FEA154B09B44FEA144325EA0B4E24EA5F
:1015300003480FF2042606EB132749083E785FEABA
:10154000320203FB0667C7F5000707FB06F64FEA02
:1015500054374FEAD64606F1020607FB066CCCF17B
:10156000005C4FEA1C472CEA074C07FB06F40CFB17
:1015700006F504EB15464FEA961634BF00204FF0EF
:1015800000404FEAD13706FB07FC4FEA1C4C0CFB2E
:101590000BF7D21B03FB0CF761EB07010CFB0EF7FB
:1015A000B0EB074072EB17420CFB08F734BFA2EB1D
:1015B0000742B2EB074261EB17414FEA0C444FEA96
:1015C000910706FB07FC4FEA1C4C0CFB0BF7B0EB3A
:1015D000C74072EB573203FB0CF734BFA2EBC74294
:1015E000B2EBC74261EB57310CFB0EF7B0EBC70013
:1015F00072EB57720CFB08F734BFA2EBC702B2EBD9
:10160000C70261EB5771039F4FEA816141EA921172
:1016100004EBCC044FEAD1374FEA826206FB07FCA9
:1016200042EA90124FEA80604FEA1C4C0CFB0BF729
:10163000D21B03FB0CF761EB07010CFB0EF7B0EBC1
:10164000074072EB17420CFB08F734BFA2EB0742CE
:10165000B2EB074261EB17414FEA8C554FEA910715
:1016600004EB9C2406FB07FC4FEA1C4C0CFB0BF71D
:10167000B0EBC74072EB573203FB0CF734BFA2EB61
:10168000C742B2EBC74261EB57310CFB0EF7B0EB30
:10169000C70072EB57720CFB08F734BFA2EBC7020E
:1016A000B2EBC70261EB577115EB4C254FEA816134
:1016B00041EA92114FEA82624FEAD13742EA901230
:1016C00006FB07FC44F100044FEA80604FEA1C4C23
:1016D0000CFB0BF7D21B03FB0CF761EB07010CFBB8
:1016E0000EF7B0EB074072EB17420CFB08F734BF64
:1016F000A2EB0742B2EB074261EB174115EB1C1559
:101700004FEA813141EA92414FEA823242EA904205
:101710004FEA80304FEA0C7644F1000448EA034374
:101720004EEA0B484FF0000EB2EB080C71EB0307CA
:1017300024BF624639464EEB0E0E4FF0000B0018E8
:10174000524149414BEB0B0BB2EB080C71EB030719
:101750007BF1000B24BF624639464EEB0E0E4FF074
:10176000000B0018524149414BEB0B0BB2EB080C3C
:1017700071EB03077BF1000B24BF624639464EEB49
:101780000E0E51EA020718BF46F0010616EB0E7660
:1017900055F1000254F1000103D5BDE88901BDE80F
:1017A0000088BDE88901BDE80048B619524141EB07
:1017B0000101A3F10103704780807F7E7D7C7B7AED
:1017C0007978777676757473727171706F6E6E6DED
:1017D0006C6C6B6A6A696868676666656464636393
:1017E00062616160605F5F5E5E5D5D5C5C5B5B5A19
:1017F0005A59595858575756565555555454535386
:1018000052525251515050504F4F4F4E4E4D4D4DE0
:101810004C4C4C4B4B4B4A4A4A494949484848472B
:101820004747474646464545454444444443434369
:101830004342424242414141002B26D4770021D00D
:101840001CB54FEA370703B44FF010004FF01001FA
:101850004FF000000FBCBDE810400BF1010BBBF1D5
:10186000010F08BF5FEA170722BF12F1010211F151
:1018700001014FF0004143F1000300F0004043EA52
:1018800000007047F9D35708DAE746EA064613F135
:10189000400F4FEA16461FDD13F1200FDFBF16433E
:1018A0000A46002120335B42C8D0C3F1200746EA34
:1018B000064602FA07F74FEA164646EA0706C3F15C
:1018C000200722FA03F201FA07F721FA03F14FF099
:1018D000000342EA0702B1E746EA020646EA064684
:1018E0004FEA164646EA0106BCBF46EA0646360CF3
:1018F0004FF000034FF000024FF000019EE72DE98A
:10190000C048934630B491E8380007C831EA400C2B
:1019100048BF34EA430C03D5FFF7F2FDFFF78CFF15
:10192000F0BCBDE800882DE9C048934630B491E88A
:10193000380007C810F0804F08BF13F0804F03D164
:1019400000F005F8FFF778FFF0BCBDE8008820F054
:101950007F4780EA030023F07F4C07EB0C03A3F5DD
:101960007C5300F00040A3F1FE0392F0000F00F062
:10197000B38095F0000F00F077802DE901494FEA20
:1019800011404FEA144621EA004800FB06FC24EA15
:10199000064708FB06F607FB08F800FB07F718EBFD
:1019A00006484CEB164C4FEA124B18EB07484FEA2F
:1019B00015464CEB174022EA0B4E0BFB06FC25EAC2
:1019C00006470EFB06F607FB0EFE0BFB07F71EEBAA
:1019D000064E4CEB164C4FF000061EEB074E4CEB40
:1019E000174B18EB0B0840F1000018EB0E0B58EBEF
:1019F000000840F100008F1A4FF000013CBFC943BE
:101A0000661B14BFB5EB040C00213CBFC943F61B99
:101A10004FEA17444EEA8E0E27EA04454FEA1C4768
:101A200004FB07622CEA074C05FB07F70CFB05F6E5
:101A300004FB0CFC16EB074642EB174216EB0C4678
:101A400042EB1C421BEB060658EB0202414146EA00
:101A50009E0601D5BDE80189B619524141EB01014D
:101A6000A3F10103BDE801894FEA14454FEA11478C
:101A700024EA054621EA074C05FB07F406FB07F7B5
:101A80000CFB06F105FB0CFC11EB074144EB174482
:101A90004FEA124711EB0C4144EB1C4422EA074C7D
:101AA00005FB07F206FB07F70CFB06F605FB0CFC33
:101AB00016EB074642EB174216EB0C4642EB1C4571
:101AC0006A1854F1000148BF7047B619524141EB02
:101AD0000101A3F10103704795F0000F37D04FEAE1
:101AE00011424FEA144721EA024624EA074C02FB5E
:101AF00007F106FB07F70CFB06F402FB0CFC14EBEA
:101B0000074441EB17414FEA154714EB0C4441EBF6
:101B10001C4125EA074C02FB07F506FB07F70CFB07
:101B200006F602FB0CFC16EB074645EB174516EBD9
:101B30000C4645EB1C42121951F1000148BF704799
:101B4000B619524141EB0101A3F1010370474FEA7D
:101B500014454FEA114724EA054621EA074C05FBE4
:101B600007F106FB07F70CFB06F24FF0000605FB3A
:101B70000CFC12EB074241EB174112EB0C4251EB0C
:101B80001C4148BF7047921841EB0101A3F10103CA
:101B90007047000010B54FF40070034908607321CE
:101BA000012000F04DF810BD101801402DE9F04162
:101BB00000BF00BF0748006801F0ABFA0646064ABE
:101BC000064B01F0B9FA04460022054B01F0B4FAC5
:101BD000BDE8F08100000020664CC11A67D3F13ED9
:101BE0000000594010B5082810DA144A1268840021
:101BF0000F23A3409A43114B1A601A4612688300C0
:101C000001FA03F31A430D4B1A6016E00B4A121D3A
:101C10001268A0F108039C000F23A3409A43074BCE
:101C20001B1D1A601A461268A0F108039B0001FAF6
:101C300003F31A43014B1B1D1A6010BD001801402D
:101C400038B50A460021174B6D2A12D06E2A04D0EF
:101C5000732A15D0752A17D105E0124C4443124D52
:101C6000B4FBF5F111E00F4C4443104DB4FBF5F11A
:101C70000BE00C4C44434FF47A75B4FBF5F104E0EF
:101C8000084C00FB04F100E038BD00BF00240094C4
:101C900003E000BF009C641C0094009C8C42F8D3BD
:101CA00000BFF1E700A24A0400CA9A3B40420F007D
:101CB00010B516A000F0CCFB1E48006800F40040F0
:101CC00078B11D48806800F4004018B11BA000F0F6
:101CD000B9FB02E024A000F0B5FB4FF40040154929
:101CE00008601448006800F0400070B1294800689E
:101CF00000F0400018B128A000F0A4FB02E030A0E2
:101D000000F0A0FB40200B49086010BD48656C6CDA
:101D10006F2C2044697374616E63655F53776974D7
:101D200063685F496E74657272757074696F6E2155
:101D30000A000000140401400020014050473135E2
:101D40003A20E68EA5E8BF9120284E504EE4BCA074
:101D5000E6849FE599A8202D20E9AB98E794B5E5A6
:101D6000B9B3290A00000000504731353A20E8BFD6
:101D70009CE7A6BB20284E504EE4BCA0E6849FE51D
:101D800099A8202D20E4BD8EE794B5E5B9B3290AC2
:101D900000000000081401405044363A20E68EA5A9
:101DA000E8BF912028504E50E4BCA0E6849FE599FE
:101DB000A8202D20E9AB98E794B5E5B9B3290A002E
:101DC0005044363A20E8BF9CE7A6BB2028504E502E
:101DD000E4BCA0E6849FE599A8202D20E4BD8EE711
:101DE00094B5E5B9B3290A0010B50648006800F0BB
:101DF000010028B1062000F0C9FB0120014908605C
:101E000010BD00001404014010B50E48006800F435
:101E1000804030B1042000F0B9FB4FF48040094904
:101E200008600848006800F4004048B106A000F0CF
:101E300009FB052000F0AAFB4FF4004001490860AF
:101E400010BD000014040140455854493135207438
:101E500072696767657265640A00000010B506481C
:101E6000006800F0040028B1022000F08FFB04207D
:101E70000149086010BD00001404014010B50C4871
:101E8000006800F0400028B1052000F07FFB4020F2
:101E9000074908600648006800F4007030B1062069
:101EA00000F074FB4FF400700149086010BD0000A1
:101EB0001404014010B50CA000F0C4FA11480068E9
:101EC00000F0040070B11048006800F0040018B180
:101ED0000EA000F0B7FA02E016A000F0B3FA04205A
:101EE0000849086010BD0000456D657267656E6346
:101EF000795F53746F705F496E7465727275707438
:101F00000A00000014040140081801405045323A0C
:101F100020E68AACE8B5B72028E680A5E5819CE6F6
:101F20008C89E992AE202D20E9AB98E794B5E5B90C
:101F3000B3290A005045323A20E68C89E4B88B2058
:101F400028E680A5E5819CE68C89E992AE202D20CB
:101F5000E4BD8EE794B5E5B9B3290A0000F01F028D
:101F6000012191404209920002F1E022C2F80011E1
:101F70007047000010B5002807DA0A07140E054A5A
:101F800000F00F031B1FD45403E00A07130E024A8C
:101F9000135410BD18ED00E000E400E070B52148D6
:101FA0000068C0F3803421461FA000F051FA224897
:101FB0000078844234D0012C0ED12048007858B9E2
:101FC0000020A10788840846008840F001000880AE
:101FD00001201A49087021E004BB18480078012844
:101FE0001CD18007858C164805604FF08040008822
:101FF00020F001004FF080410880002088840F49C4
:102000000870FFF7D3FD0F4A106051601046026858
:1020100043680B4801680CA000F01AFA06480470E7
:1020200070BD000008140140706431345F6C657647
:10203000656C3A2025750A00110000201000002070
:1020400000000020080000204558544931345F4901
:10205000525148616E646C65722050756C736520D6
:1020600054696D653A2025752075732C2044697379
:1020700074616E63653A20252E356620636D0A0013
:1020800010B51648006800F4007000280FD01448FE
:10209000006800F4007018B112A000F0D9F902E055
:1020A0001CA000F0D5F94FF400700C4908600B48F3
:1020B000006800F0010000280ED02248006800F0FF
:1020C000010018B120A000F0C3F902E02AA000F03E
:1020D000BFF901200149086010BD0000140401404F
:1020E000080C01405042393A20E789A9E4BD93E940
:1020F00081AEE68CA120284E504E20E4BCA0E684A0
:102100009FE599A8202D20E9AB98E794B5E5B9B3F0
:10211000290A00005042393A20E789A9E4BD93E733
:10212000A7BBE5BC8020284E504E20E4BCA0E6842E
:102130009FE599A8202D20E4BD8EE794B5E5B9B3BD
:10214000290A0000081801405045303A20E789A9C3
:10215000E4BD93E981AEE68CA120284E504E20E4E8
:10216000BCA0E6849FE599A8202D20E9AB98E794D0
:10217000B5E5B9B3290A00005045303A20E789A9EE
:10218000E4BD93E7A7BBE5BC8020284E504E20E479
:10219000BCA0E6849FE599A8202D20E4BD8EE7949D
:1021A000B5E5B9B3290A000070B505460C46072D00
:1021B0006ED2DFE805F004132231404F5E0034B1E7
:1021C0003648006840F400503449086005E0334860
:1021D000006820F40050314908605DE034B12F48B8
:1021E000006840F480402D49086005E02B480068F5
:1021F00020F48040294908604EE034B12748006847
:1022000040F400402549086005E02448006820F4B7
:102210000040224908603FE034B12148C06840F0E6
:1022200001001F49C86005E01D48C06820F001009A
:102230001B49C86030E034B11948C06840F0020062
:102240001749C86005E01648C06820F0020014492C
:10225000C86021E034B11348006840F080001149A3
:10226000086005E00F48006820F080000D49086014
:1022700012E034B10B48006840F4807009490860EE
:1022800005E00848006820F480700649086003E013
:1022900005A000F0D7F800BF00BF70BD0C1C0140C6
:1022A000002001400C180140E4B88DE5AD98E59C94
:1022B000A8E99880E997A821200A00002DE9F04FAD
:1022C00085B005460E4600244EF66020B6FBF0F0C1
:1022D00000EB80004000049021E004B96424204613
:1022E00000F017FF00221B4BCDE9000100F024FF96
:1022F00007460022184B00F087FDCDE9020100F0EF
:10230000DBFE8246504600F02BF904980444AC42B0
:1023100000D92C466D210A20FFF792FC00BFAC4289
:10232000DBD3284600F0F5FE00220A4BCDE902017E
:1023300000F002FF07460022074B00F065FD8246D1
:1023400000F0BAFE8146484600F00AF905B0BDE843
:10235000F08F00000000B94000004E402DE9FC5F06
:10236000044689464EF66020B9FBF0F000EB800091
:102370004FEA400A1FE0204600F0CBFE0022114B3E
:10238000CDE9000100F0D8FE074600220E4B00F018
:102390003BFD054600F090FE8346584600F0E0F80D
:1023A000544502D9A4EB0A0400E000246D210A2060
:1023B000FFF746FC00BF002CDDD1002000F0D0F874
:1023C000BDE8FC9F0000B94000004E4030B1074915
:1023D000096821F40061054A116005E003490968B4
:1023E00041F40061014A1160704700000C1C01407B
:1023F00030B10749C96841F02001054AD16005E0C4
:102400000349C96821F02001014AD16070470000EA
:102410000010014010B54FF4804006490860752156
:102420001920FFF70DFC4FF480400249091D086098
:1024300010BD00001018014000B500F07FFB00F057
:102440009FFB00BD10B50446204600F0B7FB10BD51
:102450000FB400B5A1B023A80090802101A8009B73
:10246000229AFDF729FF0020009001A800F0A6FBAA
:1024700021B05DF814FB10B500F002F810BD0000AB
:102480000CB50020019000903348006840F4803083
:102490003149086000BF3048006800F40030009007
:1024A0000198401C0190009818B90198B0F5A06FF0
:1024B000F1D12948006800F4003010B101200090EB
:1024C00001E0002000900098012843D123480068D3
:1024D00040F01000214908600846006820F0030021
:1024E00008600846006840F0020008601A4840682A
:1024F000194948600846406848600846406840F40A
:10250000806048600846406820F47C1048600846B7
:10251000406840F4E81048600846006840F0807069
:10252000086000BF0C48006800F000700028F9D077
:102530000948406820F003000749486008464068A1
:1025400040F00200486000BF0348406800F00C0003
:102550000828F9D10CBD0000001002400020024004
:10256000084A1288521C4243074BB3FBF2F2511E39
:10257000044B1B1D1980C1F34F02024B0C331A8010
:10258000704700002804004000A24A0410B5044629
:10259000072C13D2DFE804F004050612090C0F0023
:1025A0000DE00CE0FFF786FC09E0FFF7F7FC06E022
:1025B000FFF77EFB03E0FFF763FD00E000BF00BF15
:1025C00010BD000010B51348006840F0010011492B
:1025D000086008464068104908400E4948600846AF
:1025E00000680E4908400B4908600846006820F45E
:1025F000802008600846406820F4FE0048604FF4E0
:102600001F008860FFF737FF4FF000600449086043
:1026100010BD0000001002400000FFF8FFFFF6FEB2
:1026200008ED00E00848C06940F001000649C861B3
:102630004720890408854FF6FF7088850846008882
:1026400020F010000880704700100240164AD2693E
:1026500042F00202144BDA61144A1080121D1180FC
:10266000124A103A128822F07002104B103B1A8066
:102670001A46128842F060021A800C4A083A128800
:1026800042F00102094B083B1A804FF4FA72074BE3
:102690000C331A80054A283A128842F00102034B93
:1026A000283B1A80704700000010024028040040B8
:1026B000164AD26942F00202144BDA61144A1080C1
:1026C000121D1180124A103A128822F4E042104B77
:1026D000103B1A801A46128842F4C0421A800C4AF3
:1026E000083A128842F01002094B083B1A804FF456
:1026F000FA72074B10331A80054A283A128842F0C2
:102700000102034B283B1A80704700000010024072
:102710002804004010B56648406920F470616448A0
:102720004161406940F4407161484161614800681D
:1027300020F480405F490860081F006820F4804052
:10274000091F08600846006840F480400860081DC2
:10275000006840F48040091D086056480C38006845
:1027600040F4804053490C3908602820FFF7F6FBFD
:1027700002212820FFF7FEFB4D48C06820F470615D
:102780004B48C160C06840F440714948C16040692D
:1027900020F4704146484161406940F4C0414448DA
:1027A00041614448001F006848F240010843414924
:1027B000091F0860081D006848F2400108433D49B0
:1027C00008603C480C38006848F240010843394929
:1027D0000C3908600B211720FFF7CCFB3448006947
:1027E00020F0F00132480161006940F010013048EA
:1027F0000161806820F00F002D49886008468068DC
:1028000040F0040088602B48001F006840F201215E
:1028100008432849091F0860081D006840F201218B
:1028200008432449086023480C38006840F201211D
:10283000084320490C3908601720FFF78FFB0C2153
:102840001720FFF797FB0620FFF788FB0D210620D6
:10285000FFF790FB1648806820F470601449886088
:102860000846806840F4806088601248006820F064
:10287000040010490860081F006820F00400091FC8
:102880000860081D006840F00400091D0860094840
:102890000C38006840F0040006490C390860082034
:1028A000FFF75CFB00210820FFF764FB10BD000070
:1028B000000001400C0401409648806940F010007F
:1028C000944988610846806940F080008861084624
:1028D000806940F4807088610846806940F040005B
:1028E00088610846806940F0200088610846806958
:1028F00040F0080088610846806940F00100886166
:102900008548006820F070608349086008460068C8
:1029100040F0306008600846006820F470000860ED
:102920000846006840F4401008607C48006820F4C5
:1029300070407A4908600846006840F440500860DA
:102940007548006820F070407349086008460068C8
:1029500040F0304008607148006820F470206F49F2
:1029600008600846006840F4403008606A48006823
:1029700020F47020684908600846006840F4403040
:1029800008606748406840F44060654948606348B3
:10299000006820F47000614908600846006840F44F
:1029A000401008600846006820F070600860084623
:1029B000006840F0407008600846006820F0405011
:1029C00008600846006840F04050086055480068BC
:1029D00020F00F00534908600846006840F00300EB
:1029E00008600846006820F0F000086008460068AB
:1029F00040F0300008604C48006820F070404A49C0
:102A000008600846006840F040500860081D0068F3
:102A100020F00F00091D08600846006840F0030020
:102A2000086008460068414908403F49091D0860A0
:102A3000084600683E4908433B49091D08604FF4B9
:102A40007C403949143108603A48006820F07060D1
:102A5000384908600846006840F0806008603148E6
:102A6000406820F070402F4948600846406840F0B8
:102A7000804048602F48001F006820F070602D499A
:102A8000091F08600846006840F0806008602A4816
:102A9000006820F0F000284908600846006840F00F
:102AA000400008602048006820F00F001E490860C0
:102AB0000846006840F0040008601E48006820F4E2
:102AC00070201C4908600846006840F440300860E7
:102AD0001548006820F470601349086008460068D3
:102AE00040F40060086010480C30006840F00400BA
:102AF0000D490C3108600C48001D006820F0F00002
:102B00000949091D08600846006840F03000086067
:102B1000704700000010024000100140041C0140FA
:102B2000000001400020014000180140FF0000F0BB
:102B30000011110104140140040C01400E48806989
:102B400044F2040108430C4988610C48006820F0F5
:102B5000F0000A4908600846006840F0B0000860CC
:102B60000846006820F4706008600846006840F479
:102B700080600860704700000010024004080140B7
:102B800041F64C500549088042F20C00091D0880AE
:102B90000020091D0880091D088070470838014081
:102BA00000BF0549098801F080010029F9D0C1B2B0
:102BB000014A121D118070470038014000B50346DC
:102BC00003E013F8010BFFF7EBFF18780028F8D1AA
:102BD00000BD00002DE9FE4F0446894692469B4603
:102BE00084F80C90A4F808A0A4F814B0B9F1000F70
:102BF00013D0B9F1010F06D0B9F1020F08D0B9F125
:102C0000030F24D11EE059465046FFF757FB1FE043
:102C1000E0885946FFF7A2FB1AE0E08800F079FA55
:102C200000220D4BCDE9000100F086FA0746002294
:102C30000A4B00F0E9F8054600F03EFA0290FFF773
:102C40008FFC05E00020E080FFF78AFC00E000BF79
:102C500000BFBDE8FE8F00000000B94000004E40FC
:102C600030B10749096821F40061054A116005E0A7
:102C70000349096841F40061014A1160704700008E
:102C80000C1C014030B10749C96841F02001054AD8
:102C9000D16005E00349C96821F02001014AD160F3
:102CA0007047000000100140490050EAC12018BFE1
:102CB00004204A0D18BF40F0010040F2FF72B2EB51
:102CC000515F08BF40F00200012808BF052070478F
:102CD00030380A2801D201207047002070470000D8
:102CE00088B0FFF7E9FDFFF715FDFFF7A5FB1C22F4
:102CF000294901A8FDF7FAFABDF81E10BDF81C001D
:102D0000FFF7A4FCBDF81E10BDF81C00FFF7D0FCB7
:102D100000249DF80800FFF76BFB0120FFF756FB2E
:102D20009DF80800FFF7AEFF0120FFF799FF012192
:102D30000020FFF739FAFEF72DFF03210E20FEF7E2
:102D400051FFFFF76FFCFFF765FB24E02046FFF71C
:102D50001DFC12A0FFF776FB1448C06820F010009D
:102D60001249C8604FF47A7342F29F42012101A8D0
:102D7000FFF730FF732141F28830FEF761FF4FF417
:102D80007A730022022101A8FFF724FF732141F288
:102D90008830FEF755FFD9E73C3300086D61696E56
:102DA0003A20E590AFE58AA80A0000000010014033
:102DB00010B500290AD00878002807D005487844C3
:102DC000FEF7E6FA002801D0002010BD0248784442
:102DD00010BD0000B6060000AE06000010B50029C8
:102DE0000AD00878002807D005487844FEF7D0FAC2
:102DF000002801D0002010BD0248784410BD00001A
:102E0000A60600009E0600002DE9C04130B4DFF8A0
:102E1000A0C23CEA111418BF3CEA131400F0EC8085
:102E200081EA03051CEA111444EAD57418BF1CEAB0
:102E3000131500F0C780A4EB05044FF0004545EAE8
:102E4000C12145EAC32341EA505143EA525304F1F8
:102E50007F74994204F500344FEAC0204FEAC22241
:102E600008BF904200F09C804FEA13650FF24016B5
:102E7000765D4FEA134506FB05F7C7F1807706FB41
:102E800007F74FEAD737A7FB03687642C8F58038C3
:102E9000A7FB06CE38BFA8F1010807FB08E64FF0F4
:102EA000000EA6FB028CE6FB03CEDCF1000CCEF19B
:102EB000004E38BFAEF1010EA6FB0C584FF00007D4
:102EC0004FF00005E6FB0E87A1FB08C6A0FB07CE6E
:102ED00016EB0E0645F10005E1FB076515F1E04E26
:102EE0007EBFA4F580345FEA46066D4116F1800787
:102EF00045F100054FEA17274FEA066647EA0567DE
:102F0000A6F1DE46B6F1805F4FEA15251FD9384697
:102F100024F0010C05EBC471BCF1FE6F01EB0C1148
:102F200002D8F0BCBDE8008124425CBF01F5801EE0
:102F30009EEAC47F02D4F0BCBDE80081244238D4AC
:102F4000F0BCA1F1C041BDE8004100F0EDB94FEA8D
:102F5000D22242EA43524FEAD323A7FB02864FEA2A
:102F6000D02040EA415007FB03661EEA0E0F4FEAED
:102F7000D12105FB026658BFA6EB0056B6EB005602
:102F80004FEA520E4EEAC37E18EB0E0E56EB530E6E
:102F9000BDD518EB02085E417F1C55F10005B6E770
:102FA0004FF480154FF000074FF000064FF0000877
:102FB000ADE7F0BC4FF0000001F1C04101F000416D
:102FC000BDE8008111EA0C1F0CEA131500D00CE0DB
:102FD00013EA0C1F00F025804FF00000F0BC81EADE
:102FE000030101F00041BDE80081F0BCBDE80041F3
:102FF00081EA030100F098B9F0BCBDE8004170B56A
:1030000000F044F9097EFC3E00F007B881EA0301B4
:103010004FF0000001F00041704781EA030100F029
:1030200083B9F0BCBDE800414FF000002149704772
:10303000FFFDFBF9F7F5F4F2F0EEEDEBE9E8E6E47D
:10304000E3E1E0DEDDDBDAD8D7D5D4D3D1D0CFCD04
:10305000CCCBCAC8C7C6C5C4C2C1C0BFBEBDBCBB3D
:10306000BAB9B8B7B6B5B4B3B2B1B0AFAEADACAB38
:10307000AAA9A8A8A7A6A5A4A3A3A2A1A09F9F9E12
:103080009D9C9C9B9A9999989797969595949393C4
:10309000929191908F8F8E8E8D8C8C8B8B8A89895B
:1030A00088888787868585848483838282818180DE
:1030B0000000FF070000F87F4FEA1153A3F580637B
:1030C000D3F11E03A8BFD3F1200C08DB4FF0004260
:1030D00042EAC12252EA505232FA03F070470942E2
:1030E0000BD4102BC4BF0020704703F5787CBCF1D3
:1030F000FF3F05D04FF0FF3070474FF000007047A2
:1031000070B500F0C3F800BF4992248000207047DA
:10311000F0E7B0FA80F310FA03F10AD0C3F11D030F
:1031200003F580634FEA41504FEA035202EBD1218D
:1031300070474FF000007047DFF848C170B51CEAD7
:10314000111E1EBF1CEA13159EEA0C0F95EA0C0F08
:1031500000F06F8081EA030423EA4C134EEAD47E28
:1031600021EA4C1141F4801143F48013AE44A1FBD9
:10317000024CA0FB0365AEF17F7E361955EB0C05C2
:10318000A1FB034C4CF10003A0FB021C16EB0C0648
:10319000654153F10003094218BF46F0010613F4DC
:1031A000007F0BD14FEA03314FEA0530340341EA87
:1031B000155140EA16506FF003020AE04FEAC321AE
:1031C0004FEAC520F40241EA555140EA56506FF0EB
:1031D000020202EB2E4201EB025585EACE710AD0C3
:1031E0005FEA440C18BF24F0004450F1000041F1A4
:1031F000000120EAD47040F2FE7C624500D270BD2E
:10320000A84214BF4FF080444FF04044002E08BF46
:103210000024BEF1806FA8BFA1F1C041BDE870409D
:1032200080F282804FF0000001F1C04101F00041C6
:1032300070479EEA0C0F0CEA131518BF95EA0C0FA5
:1032400006D04FF0000081EA030E0EF0004170BD81
:1032500000F01CF88900013E00F007B800F009B842
:103260004FEA430C5FEA5C5C08D081EA030100F09E
:103270005BB84FEA410C5FEA5C5CF6D14FF00000AE
:10328000014970470000FF070000F87F0EF1020EB1
:103290002EF0030E5EF8046B364205D4012A43EB90
:1032A000030515F5001F12D8012841EB010C1CF590
:1032B000001F0CD80ED14FEAD17C15F5001F0CEB86
:1032C0004C0C0CF1020C08BF4CEBD37C04E04FF02B
:1032D000080C01E04FEAD37C0CEB4C0526FA05F60E
:1032E00006F00706B6F1040C06D20EEB860CBDE81C
:1032F00070404CF0010C6047DFE80CF0090B020253
:103300004FF000414FF00000A1F5002170BD1946BB
:103310001046012851EB010418BFD4F5001484BFF6
:10332000002001F0004170BD0808A0F500114FEA2F
:1033300031017047FDF73FBCFDF774BD0000000090
:103340000100000000009F240000000000000000B9
:10335000E803E8034700E703000000000000000066
:1033600030313233343536373839414243444546BB
:1033700040305800303132333435363738396162B5
:1033800063646566403078000400000800000000B7
:1033900000000002000100001030313233343536B5
:1033A0003738396162636465667870003031323372
:1033B0003435363738394142434445465850000089
:1033C00002400000000000A00000000005400000D6
:1033D000000000C8000000000C4000000000409CFD
:1033E00000000000194000000020BCBE00000000EA
:1033F00034400000BFC91B8E00000004B54000002F
:10340000504BCFD06607E2CF010000006C410000B6
:103410003E8251AADFEEA73401000000D94200002D
:10342000DCB5A0E23A301F97FFFFFFFFB445000074
:10343000FD25A0C8E9A3C14FFFFFFFFFFF3F00002C
:103440000000008000000000FF3F0000000000803E
:1034500000000000A035000800000020140000005B
:103460006C010008B4350008140000206406000058
:10347000880100081C00000043000000F8FFFFFF67
:103480000C0000000E0000000F0000002E000000E5
:103490001001000043000000F8FFFFFF0040404023
:1034A0004040404040404141414141404040404017
:1034B00040404040404040404040404040050202C3
:1034C0000202020202020202020202020220202082
:1034D00020202020202020020202020202029090DE
:1034E00090909090101010101010101010101010DC
:1034F0001010101010101010020202020202888830
:10350000888888880808080808080808080808083B
:103510000808080808080808020202024000000023
:10352000000000000000000000000000000000009B
:10353000000000000000000000000000000000008B
:10354000000000000000000000000000000000007B
:10355000000000000000000000000000000000006B
:10356000000000000000000000000000000000005B
:10357000000000000000000000000000000000004B
:10358000000000000000000000000000000000003B
:10359000000000000000000000000000000000002B
:1035A000000000000000000000000000000000001B
:0435B0000000000017
:0400000508000131BD :0400000508000131BD
:00000001FF :00000001FF
...@@ -3,16 +3,16 @@ ...@@ -3,16 +3,16 @@
<title>Static Call Graph - [.\Objects\MotorControl.axf]</title></head> <title>Static Call Graph - [.\Objects\MotorControl.axf]</title></head>
<body><HR> <body><HR>
<H1>Static Call Graph for image .\Objects\MotorControl.axf</H1><HR> <H1>Static Call Graph for image .\Objects\MotorControl.axf</H1><HR>
<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5050106: Last Updated: Fri Sep 27 17:15:38 2024 <BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5050106: Last Updated: Tue Oct 29 18:48:51 2024
<BR><P> <BR><P>
<H3>Maximum Stack Usage = 28 bytes + Unknown(Functions without stacksize, Cycles, Untraceable Function Pointers)</H3><H3> <H3>Maximum Stack Usage = 336 bytes + Unknown(Functions without stacksize, Cycles, Untraceable Function Pointers)</H3><H3>
Call chain for Maximum Stack Depth:</H3> Call chain for Maximum Stack Depth:</H3>
SystemInit &rArr; SetSysClock &rArr; SetSysClockTo72 __rt_entry_main &rArr; main &rArr; StateMachineHandler &rArr; Parking_Sensor_Interruption &rArr; Serial_Printf &rArr; vsnprintf &rArr; _printf_char_common &rArr; __printf
<P> <P>
<H3> <H3>
Functions with no stack information Functions with no stack information
</H3><UL> </H3><UL>
<LI><a href="#[64]">__user_initial_stackheap</a> <LI><a href="#[ab]">__user_initial_stackheap</a>
</UL> </UL>
</UL> </UL>
<P> <P>
...@@ -50,13 +50,13 @@ Function Pointers ...@@ -50,13 +50,13 @@ Function Pointers
<LI><a href="#[4f]">DMA2_Channel3_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[4f]">DMA2_Channel3_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET)
<LI><a href="#[50]">DMA2_Channel4_5_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[50]">DMA2_Channel4_5_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET)
<LI><a href="#[12]">DebugMon_Handler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[12]">DebugMon_Handler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET)
<LI><a href="#[1b]">EXTI0_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[1b]">EXTI0_IRQHandler</a> from common.o(i.EXTI0_IRQHandler) referenced from startup_stm32f10x_hd.o(RESET)
<LI><a href="#[3d]">EXTI15_10_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[3d]">EXTI15_10_IRQHandler</a> from common.o(i.EXTI15_10_IRQHandler) referenced from startup_stm32f10x_hd.o(RESET)
<LI><a href="#[1c]">EXTI1_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[1c]">EXTI1_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET)
<LI><a href="#[1d]">EXTI2_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[1d]">EXTI2_IRQHandler</a> from common.o(i.EXTI2_IRQHandler) referenced from startup_stm32f10x_hd.o(RESET)
<LI><a href="#[1e]">EXTI3_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[1e]">EXTI3_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET)
<LI><a href="#[1f]">EXTI4_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[1f]">EXTI4_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET)
<LI><a href="#[2c]">EXTI9_5_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[2c]">EXTI9_5_IRQHandler</a> from common.o(i.EXTI9_5_IRQHandler) referenced from startup_stm32f10x_hd.o(RESET)
<LI><a href="#[19]">FLASH_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[19]">FLASH_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET)
<LI><a href="#[45]">FSMC_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[45]">FSMC_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET)
<LI><a href="#[d]">HardFault_Handler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[d]">HardFault_Handler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET)
...@@ -104,141 +104,309 @@ Function Pointers ...@@ -104,141 +104,309 @@ Function Pointers
<LI><a href="#[29]">USB_LP_CAN1_RX0_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[29]">USB_LP_CAN1_RX0_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET)
<LI><a href="#[10]">UsageFault_Handler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[10]">UsageFault_Handler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET)
<LI><a href="#[15]">WWDG_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) <LI><a href="#[15]">WWDG_IRQHandler</a> from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET)
<LI><a href="#[53]">__main</a> from __main.o(!!!main) referenced from startup_stm32f10x_hd.o(.text) <LI><a href="#[56]">__main</a> from __main.o(!!!main) referenced from startup_stm32f10x_hd.o(.text)
<LI><a href="#[55]">_get_lc_ctype</a> from lc_ctype_c.o(locale$$code) referenced from rt_ctype_table.o(.text)
<LI><a href="#[54]">_printf_input_char</a> from _printf_char_common.o(.text) referenced from _printf_char_common.o(.text)
<LI><a href="#[53]">_snputc</a> from _snputc.o(.text) referenced from vsnprintf.o(.text)
</UL> </UL>
<P> <P>
<H3> <H3>
Global Symbols Global Symbols
</H3> </H3>
<P><STRONG><a name="[53]"></a>__main</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, __main.o(!!!main)) <P><STRONG><a name="[56]"></a>__main</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, __main.o(!!!main))
<BR><BR>[Calls]<UL><LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry <BR><BR>[Calls]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry
<LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload <LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
</UL> </UL>
<P><STRONG><a name="[54]"></a>__scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter)) <P><STRONG><a name="[57]"></a>__scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter))
<BR><BR>[Called By]<UL><LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__main <BR><BR>[Called By]<UL><LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__main
</UL> </UL>
<P><STRONG><a name="[56]"></a>__scatterload_rt2</STRONG> (Thumb, 44 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED) <P><STRONG><a name="[59]"></a>__scatterload_rt2</STRONG> (Thumb, 44 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED)
<BR><BR>[Calls]<UL><LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry <BR><BR>[Calls]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry
</UL> </UL>
<P><STRONG><a name="[70]"></a>__scatterload_rt2_thumb_only</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED) <P><STRONG><a name="[e0]"></a>__scatterload_rt2_thumb_only</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED)
<P><STRONG><a name="[71]"></a>__scatterload_null</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED) <P><STRONG><a name="[e1]"></a>__scatterload_null</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED)
<P><STRONG><a name="[57]"></a>__scatterload_copy</STRONG> (Thumb, 26 bytes, Stack size unknown bytes, __scatter_copy.o(!!handler_copy), UNUSED) <P><STRONG><a name="[5a]"></a>__scatterload_copy</STRONG> (Thumb, 26 bytes, Stack size unknown bytes, __scatter_copy.o(!!handler_copy), UNUSED)
<BR><BR>[Calls]<UL><LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload_copy <BR><BR>[Calls]<UL><LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload_copy
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload_copy <BR>[Called By]<UL><LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload_copy
</UL> </UL>
<P><STRONG><a name="[72]"></a>__scatterload_zeroinit</STRONG> (Thumb, 28 bytes, Stack size unknown bytes, __scatter_zi.o(!!handler_zi), UNUSED) <P><STRONG><a name="[e2]"></a>__scatterload_zeroinit</STRONG> (Thumb, 28 bytes, Stack size unknown bytes, __scatter_zi.o(!!handler_zi), UNUSED)
<P><STRONG><a name="[5b]"></a>__rt_lib_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit.o(.ARM.Collect$$libinit$$00000000)) <P><STRONG><a name="[5b]"></a>_printf_n</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_n.o(.ARM.Collect$$_printf_percent$$00000001))
<BR><BR>[Called By]<UL><LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry_li <BR><BR>[Calls]<UL><LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_charcount
</UL> </UL>
<P><STRONG><a name="[73]"></a>__rt_lib_init_alloca_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002E)) <P><STRONG><a name="[9d]"></a>_printf_percent</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000))
<BR><BR>[Called By]<UL><LI><a href="#[96]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__printf
</UL>
<P><STRONG><a name="[74]"></a>__rt_lib_init_argv_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002C)) <P><STRONG><a name="[5d]"></a>_printf_p</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_p.o(.ARM.Collect$$_printf_percent$$00000002))
<BR><BR>[Stack]<UL><LI>Max Depth = 64 + Unknown Stack Size
<LI>Call Chain = _printf_p &rArr; _printf_hex_ptr &rArr; _printf_longlong_hex &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_hex_ptr
</UL>
<P><STRONG><a name="[75]"></a>__rt_lib_init_atexit_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001B)) <P><STRONG><a name="[5f]"></a>_printf_f</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_f.o(.ARM.Collect$$_printf_percent$$00000003))
<BR><BR>[Stack]<UL><LI>Max Depth = 320 + Unknown Stack Size
<LI>Call Chain = _printf_f &rArr; _printf_fp_dec &rArr; _printf_fp_dec_real &rArr; _fp_digits &rArr; _btod_etento &rArr; _btod_emul &rArr; _e2e
</UL>
<BR>[Calls]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_dec
</UL>
<P><STRONG><a name="[76]"></a>__rt_lib_init_clock_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000021)) <P><STRONG><a name="[61]"></a>_printf_e</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_e.o(.ARM.Collect$$_printf_percent$$00000004))
<BR><BR>[Stack]<UL><LI>Max Depth = 320 + Unknown Stack Size
<LI>Call Chain = _printf_e &rArr; _printf_fp_dec &rArr; _printf_fp_dec_real &rArr; _fp_digits &rArr; _btod_etento &rArr; _btod_emul &rArr; _e2e
</UL>
<BR>[Calls]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_dec
</UL>
<P><STRONG><a name="[77]"></a>__rt_lib_init_cpp_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000032)) <P><STRONG><a name="[62]"></a>_printf_g</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_g.o(.ARM.Collect$$_printf_percent$$00000005))
<BR><BR>[Stack]<UL><LI>Max Depth = 320 + Unknown Stack Size
<LI>Call Chain = _printf_g &rArr; _printf_fp_dec &rArr; _printf_fp_dec_real &rArr; _fp_digits &rArr; _btod_etento &rArr; _btod_emul &rArr; _e2e
</UL>
<BR>[Calls]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_dec
</UL>
<P><STRONG><a name="[78]"></a>__rt_lib_init_exceptions_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000030)) <P><STRONG><a name="[63]"></a>_printf_a</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_a.o(.ARM.Collect$$_printf_percent$$00000006))
<BR><BR>[Stack]<UL><LI>Max Depth = 112 + Unknown Stack Size
<LI>Call Chain = _printf_a &rArr; _printf_fp_hex &rArr; _printf_fp_hex_real &rArr; _printf_fp_infnan &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_hex
</UL>
<P><STRONG><a name="[79]"></a>__rt_lib_init_fp_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000002)) <P><STRONG><a name="[e3]"></a>_printf_ll</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_ll.o(.ARM.Collect$$_printf_percent$$00000007))
<P><STRONG><a name="[7a]"></a>__rt_lib_init_fp_trap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001F)) <P><STRONG><a name="[65]"></a>_printf_i</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_i.o(.ARM.Collect$$_printf_percent$$00000008))
<BR><BR>[Stack]<UL><LI>Max Depth = 72 + Unknown Stack Size
<LI>Call Chain = _printf_i &rArr; _printf_int_dec &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_dec
</UL>
<P><STRONG><a name="[7b]"></a>__rt_lib_init_getenv_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000023)) <P><STRONG><a name="[67]"></a>_printf_d</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_d.o(.ARM.Collect$$_printf_percent$$00000009))
<BR><BR>[Stack]<UL><LI>Max Depth = 72 + Unknown Stack Size
<LI>Call Chain = _printf_d &rArr; _printf_int_dec &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_dec
</UL>
<P><STRONG><a name="[7c]"></a>__rt_lib_init_heap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000A)) <P><STRONG><a name="[68]"></a>_printf_u</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_u.o(.ARM.Collect$$_printf_percent$$0000000A))
<BR><BR>[Stack]<UL><LI>Max Depth = 72 + Unknown Stack Size
<LI>Call Chain = _printf_u &rArr; _printf_int_dec &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_dec
</UL>
<P><STRONG><a name="[7d]"></a>__rt_lib_init_lc_collate_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000011)) <P><STRONG><a name="[69]"></a>_printf_o</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_o.o(.ARM.Collect$$_printf_percent$$0000000B))
<BR><BR>[Stack]<UL><LI>Max Depth = 64 + Unknown Stack Size
<LI>Call Chain = _printf_o &rArr; _printf_int_oct &rArr; _printf_longlong_oct &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_oct
</UL>
<P><STRONG><a name="[7e]"></a>__rt_lib_init_lc_ctype_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000013)) <P><STRONG><a name="[6b]"></a>_printf_x</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C))
<BR><BR>[Stack]<UL><LI>Max Depth = 80 + Unknown Stack Size
<LI>Call Chain = _printf_x &rArr; _printf_int_hex &rArr; _printf_longlong_hex &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_hex
</UL>
<P><STRONG><a name="[7f]"></a>__rt_lib_init_lc_monetary_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000015)) <P><STRONG><a name="[6d]"></a>_printf_lli</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_lli.o(.ARM.Collect$$_printf_percent$$0000000D))
<BR><BR>[Stack]<UL><LI>Max Depth = 72 + Unknown Stack Size
<LI>Call Chain = _printf_lli &rArr; _printf_longlong_dec &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_longlong_dec
</UL>
<P><STRONG><a name="[80]"></a>__rt_lib_init_lc_numeric_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000017)) <P><STRONG><a name="[6f]"></a>_printf_lld</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_lld.o(.ARM.Collect$$_printf_percent$$0000000E))
<BR><BR>[Stack]<UL><LI>Max Depth = 72 + Unknown Stack Size
<LI>Call Chain = _printf_lld &rArr; _printf_longlong_dec &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_longlong_dec
</UL>
<P><STRONG><a name="[81]"></a>__rt_lib_init_lc_time_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000019)) <P><STRONG><a name="[70]"></a>_printf_llu</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_llu.o(.ARM.Collect$$_printf_percent$$0000000F))
<BR><BR>[Stack]<UL><LI>Max Depth = 72 + Unknown Stack Size
<LI>Call Chain = _printf_llu &rArr; _printf_longlong_dec &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_longlong_dec
</UL>
<P><STRONG><a name="[71]"></a>_printf_llo</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_llo.o(.ARM.Collect$$_printf_percent$$00000010))
<BR><BR>[Stack]<UL><LI>Max Depth = 56 + Unknown Stack Size
<LI>Call Chain = _printf_llo &rArr; _printf_ll_oct &rArr; _printf_longlong_oct &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_ll_oct
</UL>
<P><STRONG><a name="[73]"></a>_printf_llx</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_llx.o(.ARM.Collect$$_printf_percent$$00000011))
<BR><BR>[Stack]<UL><LI>Max Depth = 64 + Unknown Stack Size
<LI>Call Chain = _printf_llx &rArr; _printf_ll_hex &rArr; _printf_longlong_hex &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_ll_hex
</UL>
<P><STRONG><a name="[82]"></a>__rt_lib_init_preinit_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000004)) <P><STRONG><a name="[e4]"></a>_printf_l</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_l.o(.ARM.Collect$$_printf_percent$$00000012))
<P><STRONG><a name="[83]"></a>__rt_lib_init_rand_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000E)) <P><STRONG><a name="[75]"></a>_printf_c</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_c.o(.ARM.Collect$$_printf_percent$$00000013))
<BR><BR>[Stack]<UL><LI>Max Depth = 40 + Unknown Stack Size
<LI>Call Chain = _printf_c &rArr; _printf_char &rArr; _printf_cs_common &rArr; _printf_str &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_char
</UL>
<P><STRONG><a name="[84]"></a>__rt_lib_init_return</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000033)) <P><STRONG><a name="[77]"></a>_printf_s</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_s.o(.ARM.Collect$$_printf_percent$$00000014))
<BR><BR>[Stack]<UL><LI>Max Depth = 40 + Unknown Stack Size
<LI>Call Chain = _printf_s &rArr; _printf_string &rArr; _printf_cs_common &rArr; _printf_str &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[78]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_string
</UL>
<P><STRONG><a name="[85]"></a>__rt_lib_init_signal_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001D)) <P><STRONG><a name="[79]"></a>_printf_lc</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_lc.o(.ARM.Collect$$_printf_percent$$00000015))
<BR><BR>[Stack]<UL><LI>Max Depth = 88 + Unknown Stack Size
<LI>Call Chain = _printf_lc &rArr; _printf_wchar &rArr; _printf_lcs_common &rArr; _printf_wctomb &rArr; _wcrtomb &rArr; __rt_ctype_table
</UL>
<BR>[Calls]<UL><LI><a href="#[7a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_wchar
</UL>
<P><STRONG><a name="[86]"></a>__rt_lib_init_stdio_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000025)) <P><STRONG><a name="[7b]"></a>_printf_ls</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_ls.o(.ARM.Collect$$_printf_percent$$00000016))
<BR><BR>[Stack]<UL><LI>Max Depth = 88 + Unknown Stack Size
<LI>Call Chain = _printf_ls &rArr; _printf_wstring &rArr; _printf_lcs_common &rArr; _printf_wctomb &rArr; _wcrtomb &rArr; __rt_ctype_table
</UL>
<BR>[Calls]<UL><LI><a href="#[7c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_wstring
</UL>
<P><STRONG><a name="[87]"></a>__rt_lib_init_user_alloc_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000C)) <P><STRONG><a name="[e5]"></a>_printf_percent_end</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017))
<P><STRONG><a name="[60]"></a>__rt_lib_shutdown</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown.o(.ARM.Collect$$libshutdown$$00000000)) <P><STRONG><a name="[85]"></a>__rt_lib_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit.o(.ARM.Collect$$libinit$$00000000))
<BR><BR>[Called By]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_exit_ls <BR><BR>[Called By]<UL><LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry_li
</UL> </UL>
<P><STRONG><a name="[88]"></a>__rt_lib_shutdown_fp_trap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000006)) <P><STRONG><a name="[e6]"></a>__rt_lib_init_fp_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000002))
<P><STRONG><a name="[e7]"></a>__rt_lib_init_heap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000A))
<P><STRONG><a name="[89]"></a>__rt_lib_shutdown_heap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000E)) <P><STRONG><a name="[7d]"></a>__rt_lib_init_lc_common</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000F))
<BR><BR>[Calls]<UL><LI><a href="#[7e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_locale
</UL>
<P><STRONG><a name="[8a]"></a>__rt_lib_shutdown_return</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F)) <P><STRONG><a name="[e8]"></a>__rt_lib_init_preinit_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000004))
<P><STRONG><a name="[8b]"></a>__rt_lib_shutdown_signal_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000009)) <P><STRONG><a name="[e9]"></a>__rt_lib_init_rand_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000E))
<P><STRONG><a name="[8c]"></a>__rt_lib_shutdown_stdio_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000003)) <P><STRONG><a name="[ea]"></a>__rt_lib_init_user_alloc_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000C))
<P><STRONG><a name="[8d]"></a>__rt_lib_shutdown_user_alloc_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000B)) <P><STRONG><a name="[eb]"></a>__rt_lib_init_lc_collate_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000011))
<P><STRONG><a name="[55]"></a>__rt_entry</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry.o(.ARM.Collect$$rtentry$$00000000)) <P><STRONG><a name="[7f]"></a>__rt_lib_init_lc_ctype_2</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000012))
<BR><BR>[Called By]<UL><LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__main <BR><BR>[Stack]<UL><LI>Max Depth = 8 + Unknown Stack Size
<LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload_rt2 <LI>Call Chain = __rt_lib_init_lc_ctype_2 &rArr; _get_lc_ctype
</UL>
<BR>[Calls]<UL><LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_get_lc_ctype
</UL> </UL>
<P><STRONG><a name="[8e]"></a>__rt_entry_presh_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000002)) <P><STRONG><a name="[ec]"></a>__rt_lib_init_lc_ctype_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000013))
<P><STRONG><a name="[ed]"></a>__rt_lib_init_lc_monetary_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000015))
<P><STRONG><a name="[58]"></a>__rt_entry_sh</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry4.o(.ARM.Collect$$rtentry$$00000004)) <P><STRONG><a name="[80]"></a>__rt_lib_init_lc_numeric_2</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000016))
<BR><BR>[Stack]<UL><LI>Max Depth = 8 + Unknown Stack Size <BR><BR>[Stack]<UL><LI>Max Depth = 8 + Unknown Stack Size
<LI>Call Chain = __rt_entry_sh &rArr; __user_setup_stackheap <LI>Call Chain = __rt_lib_init_lc_numeric_2 &rArr; _get_lc_numeric
</UL>
<BR>[Calls]<UL><LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_get_lc_numeric
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__user_setup_stackheap
<P><STRONG><a name="[ee]"></a>__rt_lib_init_alloca_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002E))
<P><STRONG><a name="[ef]"></a>__rt_lib_init_argv_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002C))
<P><STRONG><a name="[f0]"></a>__rt_lib_init_atexit_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001B))
<P><STRONG><a name="[f1]"></a>__rt_lib_init_clock_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000021))
<P><STRONG><a name="[f2]"></a>__rt_lib_init_cpp_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000032))
<P><STRONG><a name="[f3]"></a>__rt_lib_init_exceptions_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000030))
<P><STRONG><a name="[f4]"></a>__rt_lib_init_fp_trap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001F))
<P><STRONG><a name="[f5]"></a>__rt_lib_init_getenv_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000023))
<P><STRONG><a name="[f6]"></a>__rt_lib_init_lc_numeric_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000017))
<P><STRONG><a name="[f7]"></a>__rt_lib_init_lc_time_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000019))
<P><STRONG><a name="[f8]"></a>__rt_lib_init_return</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000033))
<P><STRONG><a name="[f9]"></a>__rt_lib_init_signal_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001D))
<P><STRONG><a name="[fa]"></a>__rt_lib_init_stdio_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000025))
<P><STRONG><a name="[8a]"></a>__rt_lib_shutdown</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown.o(.ARM.Collect$$libshutdown$$00000000))
<BR><BR>[Called By]<UL><LI><a href="#[89]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_exit_ls
</UL> </UL>
<P><STRONG><a name="[5a]"></a>__rt_entry_li</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000A)) <P><STRONG><a name="[fb]"></a>__rt_lib_shutdown_fp_trap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000006))
<BR><BR>[Calls]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_lib_init
<P><STRONG><a name="[fc]"></a>__rt_lib_shutdown_heap_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000E))
<P><STRONG><a name="[fd]"></a>__rt_lib_shutdown_return</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F))
<P><STRONG><a name="[fe]"></a>__rt_lib_shutdown_signal_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000009))
<P><STRONG><a name="[ff]"></a>__rt_lib_shutdown_stdio_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000003))
<P><STRONG><a name="[100]"></a>__rt_lib_shutdown_user_alloc_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000B))
<P><STRONG><a name="[58]"></a>__rt_entry</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry.o(.ARM.Collect$$rtentry$$00000000))
<BR><BR>[Called By]<UL><LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__main
<LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload_rt2
</UL> </UL>
<P><STRONG><a name="[8f]"></a>__rt_entry_postsh_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000009)) <P><STRONG><a name="[101]"></a>__rt_entry_presh_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000002))
<P><STRONG><a name="[5c]"></a>__rt_entry_main</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000D)) <P><STRONG><a name="[82]"></a>__rt_entry_sh</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry4.o(.ARM.Collect$$rtentry$$00000004))
<BR><BR>[Stack]<UL><LI>Max Depth = 8 + Unknown Stack Size <BR><BR>[Stack]<UL><LI>Max Depth = 8 + Unknown Stack Size
<LI>Call Chain = __rt_entry_main &rArr; main &rArr; Delay <LI>Call Chain = __rt_entry_sh &rArr; __user_setup_stackheap
</UL>
<BR>[Calls]<UL><LI><a href="#[83]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__user_setup_stackheap
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
<LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;exit <P><STRONG><a name="[84]"></a>__rt_entry_li</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000A))
<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_lib_init
</UL> </UL>
<P><STRONG><a name="[90]"></a>__rt_entry_postli_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000C)) <P><STRONG><a name="[102]"></a>__rt_entry_postsh_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000009))
<P><STRONG><a name="[65]"></a>__rt_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rtexit.o(.ARM.Collect$$rtexit$$00000000)) <P><STRONG><a name="[86]"></a>__rt_entry_main</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000D))
<BR><BR>[Called By]<UL><LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;exit <BR><BR>[Stack]<UL><LI>Max Depth = 336 + Unknown Stack Size
<LI>Call Chain = __rt_entry_main &rArr; main &rArr; StateMachineHandler &rArr; Parking_Sensor_Interruption &rArr; Serial_Printf &rArr; vsnprintf &rArr; _printf_char_common &rArr; __printf
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
<LI><a href="#[88]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;exit
</UL>
<P><STRONG><a name="[103]"></a>__rt_entry_postli_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000C))
<P><STRONG><a name="[5f]"></a>__rt_exit_ls</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000003)) <P><STRONG><a name="[ac]"></a>__rt_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rtexit.o(.ARM.Collect$$rtexit$$00000000))
<BR><BR>[Calls]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_lib_shutdown <BR><BR>[Called By]<UL><LI><a href="#[88]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;exit
</UL> </UL>
<P><STRONG><a name="[91]"></a>__rt_exit_prels_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000002)) <P><STRONG><a name="[89]"></a>__rt_exit_ls</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000003))
<BR><BR>[Calls]<UL><LI><a href="#[8a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_lib_shutdown
</UL>
<P><STRONG><a name="[61]"></a>__rt_exit_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000004)) <P><STRONG><a name="[104]"></a>__rt_exit_prels_1</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000002))
<BR><BR>[Calls]<UL><LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_sys_exit
<P><STRONG><a name="[8b]"></a>__rt_exit_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000004))
<BR><BR>[Calls]<UL><LI><a href="#[8c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_sys_exit
</UL> </UL>
<P><STRONG><a name="[b]"></a>Reset_Handler</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text)) <P><STRONG><a name="[b]"></a>Reset_Handler</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text))
...@@ -356,27 +524,15 @@ Global Symbols ...@@ -356,27 +524,15 @@ Global Symbols
<P><STRONG><a name="[50]"></a>DMA2_Channel4_5_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text)) <P><STRONG><a name="[50]"></a>DMA2_Channel4_5_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET) <BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET)
</UL> </UL>
<P><STRONG><a name="[1b]"></a>EXTI0_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET)
</UL>
<P><STRONG><a name="[3d]"></a>EXTI15_10_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET)
</UL>
<P><STRONG><a name="[1c]"></a>EXTI1_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text)) <P><STRONG><a name="[1c]"></a>EXTI1_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET) <BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET)
</UL> </UL>
<P><STRONG><a name="[1d]"></a>EXTI2_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET)
</UL>
<P><STRONG><a name="[1e]"></a>EXTI3_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text)) <P><STRONG><a name="[1e]"></a>EXTI3_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET) <BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET)
</UL> </UL>
<P><STRONG><a name="[1f]"></a>EXTI4_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text)) <P><STRONG><a name="[1f]"></a>EXTI4_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET) <BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET)
</UL> </UL>
<P><STRONG><a name="[2c]"></a>EXTI9_5_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET)
</UL>
<P><STRONG><a name="[19]"></a>FLASH_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text)) <P><STRONG><a name="[19]"></a>FLASH_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET) <BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET)
</UL> </UL>
...@@ -491,124 +647,886 @@ Global Symbols ...@@ -491,124 +647,886 @@ Global Symbols
<P><STRONG><a name="[15]"></a>WWDG_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text)) <P><STRONG><a name="[15]"></a>WWDG_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET) <BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET)
</UL> </UL>
<P><STRONG><a name="[64]"></a>__user_initial_stackheap</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, startup_stm32f10x_hd.o(.text)) <P><STRONG><a name="[ab]"></a>__user_initial_stackheap</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, startup_stm32f10x_hd.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__user_setup_stackheap <BR><BR>[Called By]<UL><LI><a href="#[83]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__user_setup_stackheap
</UL>
<P><STRONG><a name="[8d]"></a>vsnprintf</STRONG> (Thumb, 48 bytes, Stack size 24 bytes, vsnprintf.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 128 + Unknown Stack Size
<LI>Call Chain = vsnprintf &rArr; _printf_char_common &rArr; __printf
</UL>
<BR>[Calls]<UL><LI><a href="#[8f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_sputc
<LI><a href="#[8e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_char_common
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Printf
</UL>
<P><STRONG><a name="[d1]"></a>__aeabi_memcpy4</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, rt_memcpy_w.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __aeabi_memcpy4
</UL>
<BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[105]"></a>__aeabi_memcpy8</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, rt_memcpy_w.o(.text), UNUSED)
<P><STRONG><a name="[106]"></a>__rt_memcpy_w</STRONG> (Thumb, 100 bytes, Stack size 8 bytes, rt_memcpy_w.o(.text), UNUSED)
<P><STRONG><a name="[92]"></a>__use_two_region_memory</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) <P><STRONG><a name="[107]"></a>_memcpy_lastbytes_aligned</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, rt_memcpy_w.o(.text), UNUSED)
<P><STRONG><a name="[108]"></a>__use_two_region_memory</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED)
<P><STRONG><a name="[8]"></a>__rt_heap_escrow</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) <P><STRONG><a name="[8]"></a>__rt_heap_escrow</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED)
<P><STRONG><a name="[7]"></a>__rt_heap_expand</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) <P><STRONG><a name="[7]"></a>__rt_heap_expand</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED)
<P><STRONG><a name="[59]"></a>__user_setup_stackheap</STRONG> (Thumb, 74 bytes, Stack size 8 bytes, sys_stackheap_outer.o(.text)) <P><STRONG><a name="[91]"></a>_printf_pre_padding</STRONG> (Thumb, 44 bytes, Stack size 16 bytes, _printf_pad.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = _printf_pre_padding
</UL>
<BR>[Called By]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_infnan
<LI><a href="#[a6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_hex_real
<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_dec_real
<LI><a href="#[95]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_common
<LI><a href="#[97]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_wctomb
<LI><a href="#[90]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_str
</UL>
<P><STRONG><a name="[92]"></a>_printf_post_padding</STRONG> (Thumb, 34 bytes, Stack size 16 bytes, _printf_pad.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = _printf_post_padding
</UL>
<BR>[Called By]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_infnan
<LI><a href="#[a6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_hex_real
<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_dec_real
<LI><a href="#[95]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_common
<LI><a href="#[97]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_wctomb
<LI><a href="#[90]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_str
</UL>
<P><STRONG><a name="[93]"></a>_printf_truncate_signed</STRONG> (Thumb, 18 bytes, Stack size 0 bytes, _printf_truncate.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_dec
</UL>
<P><STRONG><a name="[94]"></a>_printf_truncate_unsigned</STRONG> (Thumb, 18 bytes, Stack size 0 bytes, _printf_truncate.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_hex
<LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_oct
<LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_dec
</UL>
<P><STRONG><a name="[90]"></a>_printf_str</STRONG> (Thumb, 82 bytes, Stack size 16 bytes, _printf_str.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = _printf_str &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[92]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_post_padding
<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_pre_padding
</UL>
<BR>[Called By]<UL><LI><a href="#[a7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_cs_common
</UL>
<P><STRONG><a name="[66]"></a>_printf_int_dec</STRONG> (Thumb, 104 bytes, Stack size 24 bytes, _printf_dec.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 72<LI>Call Chain = _printf_int_dec &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[95]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_common
<LI><a href="#[94]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_truncate_unsigned
<LI><a href="#[93]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_truncate_signed
</UL>
<BR>[Called By]<UL><LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_u
<LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_d
<LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_i
</UL>
<P><STRONG><a name="[5c]"></a>_printf_charcount</STRONG> (Thumb, 40 bytes, Stack size 0 bytes, _printf_charcount.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_n
</UL>
<P><STRONG><a name="[8e]"></a>_printf_char_common</STRONG> (Thumb, 32 bytes, Stack size 64 bytes, _printf_char_common.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 104 + Unknown Stack Size
<LI>Call Chain = _printf_char_common &rArr; __printf
</UL>
<BR>[Calls]<UL><LI><a href="#[96]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__printf
</UL>
<BR>[Called By]<UL><LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;vsnprintf
</UL>
<P><STRONG><a name="[8f]"></a>_sputc</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, _sputc.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;vsnprintf
</UL>
<P><STRONG><a name="[53]"></a>_snputc</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, _snputc.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> vsnprintf.o(.text)
</UL>
<P><STRONG><a name="[97]"></a>_printf_wctomb</STRONG> (Thumb, 182 bytes, Stack size 56 bytes, _printf_wctomb.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 80<LI>Call Chain = _printf_wctomb &rArr; _wcrtomb &rArr; __rt_ctype_table
</UL>
<BR>[Calls]<UL><LI><a href="#[98]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_wcrtomb
<LI><a href="#[92]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_post_padding
<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_pre_padding
</UL>
<BR>[Called By]<UL><LI><a href="#[a8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_lcs_common
</UL>
<P><STRONG><a name="[6e]"></a>_printf_longlong_dec</STRONG> (Thumb, 108 bytes, Stack size 24 bytes, _printf_longlong_dec.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 72<LI>Call Chain = _printf_longlong_dec &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[95]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_common
<LI><a href="#[99]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_ll_udiv10
</UL>
<BR>[Called By]<UL><LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_llu
<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_lld
<LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_lli
</UL>
<P><STRONG><a name="[9a]"></a>_printf_longlong_oct</STRONG> (Thumb, 68 bytes, Stack size 8 bytes, _printf_oct_int_ll.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = _printf_longlong_oct &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[95]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_common
</UL>
<BR>[Called By]<UL><LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_ll_oct
<LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_oct
</UL>
<P><STRONG><a name="[6a]"></a>_printf_int_oct</STRONG> (Thumb, 24 bytes, Stack size 8 bytes, _printf_oct_int_ll.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 64<LI>Call Chain = _printf_int_oct &rArr; _printf_longlong_oct &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[9a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_longlong_oct
<LI><a href="#[94]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_truncate_unsigned
</UL>
<BR>[Called By]<UL><LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_o
</UL>
<P><STRONG><a name="[72]"></a>_printf_ll_oct</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, _printf_oct_int_ll.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = _printf_ll_oct &rArr; _printf_longlong_oct &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[9a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_longlong_oct
</UL>
<BR>[Called By]<UL><LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_llo
</UL>
<P><STRONG><a name="[9b]"></a>_printf_longlong_hex</STRONG> (Thumb, 86 bytes, Stack size 16 bytes, _printf_hex_int_ll_ptr.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 64<LI>Call Chain = _printf_longlong_hex &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[95]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_common
</UL>
<BR>[Called By]<UL><LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_hex_ptr
<LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_ll_hex
<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_hex
</UL>
<P><STRONG><a name="[6c]"></a>_printf_int_hex</STRONG> (Thumb, 28 bytes, Stack size 16 bytes, _printf_hex_int_ll_ptr.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 80<LI>Call Chain = _printf_int_hex &rArr; _printf_longlong_hex &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[9b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_longlong_hex
<LI><a href="#[94]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_truncate_unsigned
</UL>
<BR>[Called By]<UL><LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_x
</UL>
<P><STRONG><a name="[74]"></a>_printf_ll_hex</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, _printf_hex_int_ll_ptr.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 64<LI>Call Chain = _printf_ll_hex &rArr; _printf_longlong_hex &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[9b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_longlong_hex
</UL>
<BR>[Called By]<UL><LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_llx
</UL>
<P><STRONG><a name="[5e]"></a>_printf_hex_ptr</STRONG> (Thumb, 18 bytes, Stack size 0 bytes, _printf_hex_int_ll_ptr.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 64<LI>Call Chain = _printf_hex_ptr &rArr; _printf_longlong_hex &rArr; _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[9b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_longlong_hex
</UL>
<BR>[Called By]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_p
</UL>
<P><STRONG><a name="[96]"></a>__printf</STRONG> (Thumb, 388 bytes, Stack size 40 bytes, __printf_flags_ss_wp.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 40 + Unknown Stack Size
<LI>Call Chain = __printf
</UL>
<BR>[Calls]<UL><LI><a href="#[9d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_percent
<LI><a href="#[9c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_is_digit
</UL>
<BR>[Called By]<UL><LI><a href="#[8e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_char_common
</UL>
<P><STRONG><a name="[99]"></a>_ll_udiv10</STRONG> (Thumb, 138 bytes, Stack size 12 bytes, lludiv10.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = _ll_udiv10
</UL>
<BR>[Called By]<UL><LI><a href="#[9e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_fp_digits
<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_longlong_dec
</UL>
<P><STRONG><a name="[95]"></a>_printf_int_common</STRONG> (Thumb, 178 bytes, Stack size 32 bytes, _printf_intcommon.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = _printf_int_common &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[92]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_post_padding
<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_pre_padding
</UL>
<BR>[Called By]<UL><LI><a href="#[9b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_longlong_hex
<LI><a href="#[9a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_longlong_oct
<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_longlong_dec
<LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_int_dec
</UL>
<P><STRONG><a name="[109]"></a>__lib_sel_fp_printf</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, _printf_fp_dec.o(.text), UNUSED)
<P><STRONG><a name="[a3]"></a>_printf_fp_dec_real</STRONG> (Thumb, 620 bytes, Stack size 104 bytes, _printf_fp_dec.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 320<LI>Call Chain = _printf_fp_dec_real &rArr; _fp_digits &rArr; _btod_etento &rArr; _btod_emul &rArr; _e2e
</UL>
<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_infnan
<LI><a href="#[7e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_locale
<LI><a href="#[9e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_fp_digits
<LI><a href="#[92]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_post_padding
<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_pre_padding
<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_fpclassify
</UL>
<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_dec
</UL>
<P><STRONG><a name="[a6]"></a>_printf_fp_hex_real</STRONG> (Thumb, 754 bytes, Stack size 72 bytes, _printf_fp_hex.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 112<LI>Call Chain = _printf_fp_hex_real &rArr; _printf_fp_infnan &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_infnan
<LI><a href="#[92]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_post_padding
<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_pre_padding
<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_fpclassify
</UL>
<BR>[Called By]<UL><LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_hex
</UL>
<P><STRONG><a name="[a7]"></a>_printf_cs_common</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, _printf_char.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = _printf_cs_common &rArr; _printf_str &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[90]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_str
</UL>
<BR>[Called By]<UL><LI><a href="#[78]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_string
<LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_char
</UL>
<P><STRONG><a name="[76]"></a>_printf_char</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, _printf_char.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = _printf_char &rArr; _printf_cs_common &rArr; _printf_str &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[a7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_cs_common
</UL>
<BR>[Called By]<UL><LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_c
</UL>
<P><STRONG><a name="[78]"></a>_printf_string</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, _printf_char.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = _printf_string &rArr; _printf_cs_common &rArr; _printf_str &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[a7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_cs_common
</UL>
<BR>[Called By]<UL><LI><a href="#[77]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_s
</UL>
<P><STRONG><a name="[a8]"></a>_printf_lcs_common</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, _printf_wchar.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 88<LI>Call Chain = _printf_lcs_common &rArr; _printf_wctomb &rArr; _wcrtomb &rArr; __rt_ctype_table
</UL>
<BR>[Calls]<UL><LI><a href="#[97]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_wctomb
</UL>
<BR>[Called By]<UL><LI><a href="#[7c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_wstring
<LI><a href="#[7a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_wchar
</UL>
<P><STRONG><a name="[7a]"></a>_printf_wchar</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, _printf_wchar.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 88<LI>Call Chain = _printf_wchar &rArr; _printf_lcs_common &rArr; _printf_wctomb &rArr; _wcrtomb &rArr; __rt_ctype_table
</UL>
<BR>[Calls]<UL><LI><a href="#[a8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_lcs_common
</UL>
<BR>[Called By]<UL><LI><a href="#[79]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_lc
</UL>
<P><STRONG><a name="[7c]"></a>_printf_wstring</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, _printf_wchar.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 88<LI>Call Chain = _printf_wstring &rArr; _printf_lcs_common &rArr; _printf_wctomb &rArr; _wcrtomb &rArr; __rt_ctype_table
</UL>
<BR>[Calls]<UL><LI><a href="#[a8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_lcs_common
</UL>
<BR>[Called By]<UL><LI><a href="#[7b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_ls
</UL>
<P><STRONG><a name="[98]"></a>_wcrtomb</STRONG> (Thumb, 64 bytes, Stack size 16 bytes, _wcrtomb.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = _wcrtomb &rArr; __rt_ctype_table
</UL>
<BR>[Calls]<UL><LI><a href="#[a9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_ctype_table
</UL>
<BR>[Called By]<UL><LI><a href="#[97]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_wctomb
</UL>
<P><STRONG><a name="[83]"></a>__user_setup_stackheap</STRONG> (Thumb, 74 bytes, Stack size 8 bytes, sys_stackheap_outer.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 8 + Unknown Stack Size <BR><BR>[Stack]<UL><LI>Max Depth = 8 + Unknown Stack Size
<LI>Call Chain = __user_setup_stackheap <LI>Call Chain = __user_setup_stackheap
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__user_initial_stackheap <BR>[Calls]<UL><LI><a href="#[ab]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__user_initial_stackheap
<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__user_perproc_libspace <LI><a href="#[aa]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__user_perproc_libspace
</UL>
<BR>[Called By]<UL><LI><a href="#[82]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry_sh
</UL>
<P><STRONG><a name="[a9]"></a>__rt_ctype_table</STRONG> (Thumb, 16 bytes, Stack size 8 bytes, rt_ctype_table.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __rt_ctype_table
</UL>
<BR>[Calls]<UL><LI><a href="#[7e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_locale
</UL>
<BR>[Called By]<UL><LI><a href="#[98]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_wcrtomb
</UL>
<P><STRONG><a name="[7e]"></a>__rt_locale</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, rt_locale_intlibspace.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[a9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_ctype_table
<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_dec_real
<LI><a href="#[7d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_lib_init_lc_common
</UL>
<P><STRONG><a name="[a5]"></a>_printf_fp_infnan</STRONG> (Thumb, 112 bytes, Stack size 24 bytes, _printf_fp_infnan.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = _printf_fp_infnan &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[92]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_post_padding
<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_pre_padding
</UL>
<BR>[Called By]<UL><LI><a href="#[a6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_hex_real
<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_dec_real
</UL>
<P><STRONG><a name="[9f]"></a>_btod_etento</STRONG> (Thumb, 216 bytes, Stack size 72 bytes, bigflt0.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 120<LI>Call Chain = _btod_etento &rArr; _btod_emul &rArr; _e2e
</UL>
<BR>[Calls]<UL><LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_btod_emul
<LI><a href="#[a1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_btod_ediv
</UL>
<BR>[Called By]<UL><LI><a href="#[9e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_fp_digits
</UL>
<P><STRONG><a name="[88]"></a>exit</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, exit.o(.text))
<BR><BR>[Calls]<UL><LI><a href="#[ac]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_exit
</UL>
<BR>[Called By]<UL><LI><a href="#[86]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry_main
</UL>
<P><STRONG><a name="[10a]"></a>__user_libspace</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED)
<P><STRONG><a name="[aa]"></a>__user_perproc_libspace</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[83]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__user_setup_stackheap
</UL>
<P><STRONG><a name="[10b]"></a>__user_perthread_libspace</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED)
<P><STRONG><a name="[10c]"></a>__I$use$semihosting</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED)
<P><STRONG><a name="[10d]"></a>__use_no_semihosting_swi</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED)
<P><STRONG><a name="[10e]"></a>__semihosting_library_function</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, indicate_semi.o(.text), UNUSED)
<P><STRONG><a name="[da]"></a>strcmp</STRONG> (Thumb, 128 bytes, Stack size 0 bytes, strcmpv7m.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_get_lc_numeric
<LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_get_lc_ctype
</UL>
<P><STRONG><a name="[8c]"></a>_sys_exit</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, sys_exit.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[8b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_exit_exit
</UL>
<P><STRONG><a name="[a0]"></a>_btod_d2e</STRONG> (Thumb, 62 bytes, Stack size 0 bytes, btod.o(CL$$btod_d2e))
<BR><BR>[Calls]<UL><LI><a href="#[ad]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_d2e_norm_op1
</UL>
<BR>[Called By]<UL><LI><a href="#[9e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_fp_digits
</UL>
<P><STRONG><a name="[ae]"></a>_d2e_denorm_low</STRONG> (Thumb, 70 bytes, Stack size 0 bytes, btod.o(CL$$btod_d2e_denorm_low))
<BR><BR>[Called By]<UL><LI><a href="#[ad]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_d2e_norm_op1
</UL>
<P><STRONG><a name="[ad]"></a>_d2e_norm_op1</STRONG> (Thumb, 96 bytes, Stack size 0 bytes, btod.o(CL$$btod_d2e_norm_op1))
<BR><BR>[Calls]<UL><LI><a href="#[ae]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_d2e_denorm_low
</UL>
<BR>[Called By]<UL><LI><a href="#[a0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_btod_d2e
</UL>
<P><STRONG><a name="[af]"></a>__btod_div_common</STRONG> (Thumb, 696 bytes, Stack size 24 bytes, btod.o(CL$$btod_div_common))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = __btod_div_common
</UL>
<BR>[Called By]<UL><LI><a href="#[a1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_btod_ediv
</UL>
<P><STRONG><a name="[b0]"></a>_e2e</STRONG> (Thumb, 198 bytes, Stack size 24 bytes, btod.o(CL$$btod_e2e))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = _e2e
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry_sh <BR>[Called By]<UL><LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_btod_emul
<LI><a href="#[a1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_btod_ediv
</UL> </UL>
<P><STRONG><a name="[5e]"></a>exit</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, exit.o(.text)) <P><STRONG><a name="[a1]"></a>_btod_ediv</STRONG> (Thumb, 40 bytes, Stack size 24 bytes, btod.o(CL$$btod_ediv))
<BR><BR>[Calls]<UL><LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_exit <BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = _btod_ediv &rArr; _e2e
</UL>
<BR>[Calls]<UL><LI><a href="#[b0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_e2e
<LI><a href="#[af]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__btod_div_common
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry_main <BR>[Called By]<UL><LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_btod_etento
<LI><a href="#[9e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_fp_digits
</UL> </UL>
<P><STRONG><a name="[93]"></a>__user_libspace</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED) <P><STRONG><a name="[a2]"></a>_btod_emul</STRONG> (Thumb, 40 bytes, Stack size 24 bytes, btod.o(CL$$btod_emul))
<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = _btod_emul &rArr; _e2e
</UL>
<BR>[Calls]<UL><LI><a href="#[b1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__btod_mult_common
<LI><a href="#[b0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_e2e
</UL>
<BR>[Called By]<UL><LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_btod_etento
<LI><a href="#[9e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_fp_digits
</UL>
<P><STRONG><a name="[63]"></a>__user_perproc_libspace</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text)) <P><STRONG><a name="[b1]"></a>__btod_mult_common</STRONG> (Thumb, 580 bytes, Stack size 16 bytes, btod.o(CL$$btod_mult_common))
<BR><BR>[Called By]<UL><LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__user_setup_stackheap <BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = __btod_mult_common
</UL>
<BR>[Called By]<UL><LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_btod_emul
</UL> </UL>
<P><STRONG><a name="[94]"></a>__user_perthread_libspace</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED) <P><STRONG><a name="[b2]"></a>Buzzer_On</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, buzzer.o(i.Buzzer_On))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = Buzzer_On &rArr; Delay
</UL>
<BR>[Calls]<UL><LI><a href="#[b3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Delay
</UL>
<BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[95]"></a>__I$use$semihosting</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED) <P><STRONG><a name="[b4]"></a>CalculateDistance</STRONG> (Thumb, 40 bytes, Stack size 24 bytes, parking_sensor.o(i.CalculateDistance))
<BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = CalculateDistance &rArr; __aeabi_dmul
</UL>
<BR>[Calls]<UL><LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dmul
<LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ui2d
</UL>
<BR>[Called By]<UL><LI><a href="#[bc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Parking_Sensor_Interruption
</UL>
<P><STRONG><a name="[96]"></a>__use_no_semihosting_swi</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED) <P><STRONG><a name="[d8]"></a>Configure_PE_Pin</STRONG> (Thumb, 88 bytes, Stack size 8 bytes, parking_sensor.o(i.Configure_PE_Pin))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = Configure_PE_Pin
</UL>
<BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[b3]"></a>Delay</STRONG> (Thumb, 100 bytes, Stack size 16 bytes, common.o(i.Delay))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = Delay
</UL>
<BR>[Called By]<UL><LI><a href="#[c3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RotateMotor_Decelerate
<LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RotateMotor_Accelerate
<LI><a href="#[c4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendTriggerSignal
<LI><a href="#[b2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Buzzer_On
<LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[b7]"></a>Distance_Switch_Interruption</STRONG> (Thumb, 92 bytes, Stack size 8 bytes, distance_switch.o(i.Distance_Switch_Interruption))
<BR><BR>[Stack]<UL><LI>Max Depth = 288 + Unknown Stack Size
<LI>Call Chain = Distance_Switch_Interruption &rArr; Serial_Printf &rArr; vsnprintf &rArr; _printf_char_common &rArr; __printf
</UL>
<BR>[Calls]<UL><LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Printf
<LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Print
</UL>
<BR>[Called By]<UL><LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;StateMachineHandler
</UL>
<P><STRONG><a name="[1b]"></a>EXTI0_IRQHandler</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, common.o(i.EXTI0_IRQHandler))
<BR><BR>[Stack]<UL><LI>Max Depth = 312 + Unknown Stack Size
<LI>Call Chain = EXTI0_IRQHandler &rArr; StateMachineHandler &rArr; Parking_Sensor_Interruption &rArr; Serial_Printf &rArr; vsnprintf &rArr; _printf_char_common &rArr; __printf
</UL>
<BR>[Calls]<UL><LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;StateMachineHandler
</UL>
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET)
</UL>
<P><STRONG><a name="[3d]"></a>EXTI15_10_IRQHandler</STRONG> (Thumb, 58 bytes, Stack size 8 bytes, common.o(i.EXTI15_10_IRQHandler))
<BR><BR>[Stack]<UL><LI>Max Depth = 312 + Unknown Stack Size
<LI>Call Chain = EXTI15_10_IRQHandler &rArr; StateMachineHandler &rArr; Parking_Sensor_Interruption &rArr; Serial_Printf &rArr; vsnprintf &rArr; _printf_char_common &rArr; __printf
</UL>
<BR>[Calls]<UL><LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;StateMachineHandler
<LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Print
</UL>
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET)
</UL>
<P><STRONG><a name="[1d]"></a>EXTI2_IRQHandler</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, common.o(i.EXTI2_IRQHandler))
<BR><BR>[Stack]<UL><LI>Max Depth = 312 + Unknown Stack Size
<LI>Call Chain = EXTI2_IRQHandler &rArr; StateMachineHandler &rArr; Parking_Sensor_Interruption &rArr; Serial_Printf &rArr; vsnprintf &rArr; _printf_char_common &rArr; __printf
</UL>
<BR>[Calls]<UL><LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;StateMachineHandler
</UL>
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET)
</UL>
<P><STRONG><a name="[2c]"></a>EXTI9_5_IRQHandler</STRONG> (Thumb, 50 bytes, Stack size 8 bytes, common.o(i.EXTI9_5_IRQHandler))
<BR><BR>[Stack]<UL><LI>Max Depth = 312 + Unknown Stack Size
<LI>Call Chain = EXTI9_5_IRQHandler &rArr; StateMachineHandler &rArr; Parking_Sensor_Interruption &rArr; Serial_Printf &rArr; vsnprintf &rArr; _printf_char_common &rArr; __printf
</UL>
<BR>[Calls]<UL><LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;StateMachineHandler
</UL>
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(RESET)
</UL>
<P><STRONG><a name="[bb]"></a>Emergency_Stop_Interrupt</STRONG> (Thumb, 50 bytes, Stack size 8 bytes, emergency_stop.o(i.Emergency_Stop_Interrupt))
<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = Emergency_Stop_Interrupt &rArr; Serial_Print &rArr; USART1_SendString
</UL>
<BR>[Calls]<UL><LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Print
</UL>
<BR>[Called By]<UL><LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;StateMachineHandler
</UL>
<P><STRONG><a name="[bc]"></a>Parking_Sensor_Interruption</STRONG> (Thumb, 134 bytes, Stack size 16 bytes, parking_sensor.o(i.Parking_Sensor_Interruption))
<BR><BR>[Stack]<UL><LI>Max Depth = 296 + Unknown Stack Size
<LI>Call Chain = Parking_Sensor_Interruption &rArr; Serial_Printf &rArr; vsnprintf &rArr; _printf_char_common &rArr; __printf
</UL>
<BR>[Calls]<UL><LI><a href="#[b4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;CalculateDistance
<LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Printf
</UL>
<BR>[Called By]<UL><LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;StateMachineHandler
</UL>
<P><STRONG><a name="[bd]"></a>Photoelectric_Switch_Interrupt</STRONG> (Thumb, 90 bytes, Stack size 8 bytes, photoelectric_switch.o(i.Photoelectric_Switch_Interrupt))
<BR><BR>[Stack]<UL><LI>Max Depth = 288 + Unknown Stack Size
<LI>Call Chain = Photoelectric_Switch_Interrupt &rArr; Serial_Printf &rArr; vsnprintf &rArr; _printf_char_common &rArr; __printf
</UL>
<BR>[Calls]<UL><LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Printf
</UL>
<BR>[Called By]<UL><LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;StateMachineHandler
</UL>
<P><STRONG><a name="[97]"></a>__semihosting_library_function</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, indicate_semi.o(.text), UNUSED) <P><STRONG><a name="[be]"></a>Pneumatic_Solenoid_Control</STRONG> (Thumb, 244 bytes, Stack size 16 bytes, pneumatic_solenoid.o(i.Pneumatic_Solenoid_Control))
<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = Pneumatic_Solenoid_Control &rArr; Serial_Print &rArr; USART1_SendString
</UL>
<BR>[Calls]<UL><LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Print
</UL>
<BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[62]"></a>_sys_exit</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, sys_exit.o(.text)) <P><STRONG><a name="[bf]"></a>RotateMotor_Accelerate</STRONG> (Thumb, 150 bytes, Stack size 56 bytes, rotate_motor.o(i.RotateMotor_Accelerate))
<BR><BR>[Called By]<UL><LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_exit_exit <BR><BR>[Stack]<UL><LI>Max Depth = 88<LI>Call Chain = RotateMotor_Accelerate &rArr; __aeabi_dmul
</UL>
<BR>[Calls]<UL><LI><a href="#[c2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Set_PWM_Frequency
<LI><a href="#[b3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Delay
<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dmul
<LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ui2d
<LI><a href="#[c1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_d2uiz
<LI><a href="#[c0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ddiv
</UL>
<BR>[Called By]<UL><LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Update_Motor_Status
</UL> </UL>
<P><STRONG><a name="[6f]"></a>Delay</STRONG> (Thumb, 34 bytes, Stack size 8 bytes, main.o(i.Delay)) <P><STRONG><a name="[c3]"></a>RotateMotor_Decelerate</STRONG> (Thumb, 104 bytes, Stack size 48 bytes, rotate_motor.o(i.RotateMotor_Decelerate))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = Delay <BR><BR>[Stack]<UL><LI>Max Depth = 80<LI>Call Chain = RotateMotor_Decelerate &rArr; __aeabi_dmul
</UL>
<BR>[Calls]<UL><LI><a href="#[c2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Set_PWM_Frequency
<LI><a href="#[b3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Delay
<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dmul
<LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ui2d
<LI><a href="#[c1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_d2uiz
<LI><a href="#[c0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ddiv
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main <BR>[Called By]<UL><LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Update_Motor_Status
</UL> </UL>
<P><STRONG><a name="[6e]"></a>Enable_Stepper</STRONG> (Thumb, 30 bytes, Stack size 0 bytes, main.o(i.Enable_Stepper)) <P><STRONG><a name="[d5]"></a>Rotate_Enable_Rotate</STRONG> (Thumb, 30 bytes, Stack size 0 bytes, rotate_motor.o(i.Rotate_Enable_Rotate))
<BR><BR>[Called By]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main <BR><BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL> </UL>
<P><STRONG><a name="[6b]"></a>GPIO_Init</STRONG> (Thumb, 110 bytes, Stack size 0 bytes, main.o(i.GPIO_Init)) <P><STRONG><a name="[d4]"></a>Rotate_SetDirection</STRONG> (Thumb, 30 bytes, Stack size 0 bytes, rotate_motor.o(i.Rotate_SetDirection))
<BR><BR>[Called By]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main <BR><BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL> </UL>
<P><STRONG><a name="[66]"></a>Serial_Init</STRONG> (Thumb, 12 bytes, Stack size 4 bytes, uart_log.o(i.Serial_Init)) <P><STRONG><a name="[c4]"></a>SendTriggerSignal</STRONG> (Thumb, 30 bytes, Stack size 8 bytes, parking_sensor.o(i.SendTriggerSignal))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = SendTriggerSignal &rArr; Delay
</UL>
<BR>[Calls]<UL><LI><a href="#[b3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Delay
</UL>
<BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[c5]"></a>Serial_Init</STRONG> (Thumb, 12 bytes, Stack size 4 bytes, uart_log.o(i.Serial_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = Serial_Init <BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = Serial_Init
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;USART1_Init <BR>[Calls]<UL><LI><a href="#[c7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;USART1_Init
<LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;USART1_GPIO_Init <LI><a href="#[c6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;USART1_GPIO_Init
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main <BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL> </UL>
<P><STRONG><a name="[6d]"></a>Set_Direction</STRONG> (Thumb, 30 bytes, Stack size 0 bytes, main.o(i.Set_Direction)) <P><STRONG><a name="[b9]"></a>Serial_Print</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, uart_log.o(i.Serial_Print))
<BR><BR>[Called By]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main <BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = Serial_Print &rArr; USART1_SendString
</UL>
<BR>[Calls]<UL><LI><a href="#[c8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;USART1_SendString
</UL>
<BR>[Called By]<UL><LI><a href="#[bb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Emergency_Stop_Interrupt
<LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Distance_Switch_Interruption
<LI><a href="#[3d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI15_10_IRQHandler
<LI><a href="#[be]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Pneumatic_Solenoid_Control
<LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[b8]"></a>Serial_Printf</STRONG> (Thumb, 38 bytes, Stack size 152 bytes, uart_log.o(i.Serial_Printf))
<BR><BR>[Stack]<UL><LI>Max Depth = 280 + Unknown Stack Size
<LI>Call Chain = Serial_Printf &rArr; vsnprintf &rArr; _printf_char_common &rArr; __printf
</UL>
<BR>[Calls]<UL><LI><a href="#[c8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;USART1_SendString
<LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;vsnprintf
</UL>
<BR>[Called By]<UL><LI><a href="#[bd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Photoelectric_Switch_Interrupt
<LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Distance_Switch_Interruption
<LI><a href="#[bc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Parking_Sensor_Interruption
</UL>
<P><STRONG><a name="[c2]"></a>Set_PWM_Frequency</STRONG> (Thumb, 34 bytes, Stack size 0 bytes, rotate_motor.o(i.Set_PWM_Frequency))
<BR><BR>[Called By]<UL><LI><a href="#[c3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RotateMotor_Decelerate
<LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RotateMotor_Accelerate
<LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Update_Motor_Status
</UL>
<P><STRONG><a name="[ba]"></a>StateMachineHandler</STRONG> (Thumb, 54 bytes, Stack size 8 bytes, common.o(i.StateMachineHandler))
<BR><BR>[Stack]<UL><LI>Max Depth = 304 + Unknown Stack Size
<LI>Call Chain = StateMachineHandler &rArr; Parking_Sensor_Interruption &rArr; Serial_Printf &rArr; vsnprintf &rArr; _printf_char_common &rArr; __printf
</UL>
<BR>[Calls]<UL><LI><a href="#[bd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Photoelectric_Switch_Interrupt
<LI><a href="#[bb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Emergency_Stop_Interrupt
<LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Distance_Switch_Interruption
<LI><a href="#[bc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Parking_Sensor_Interruption
</UL>
<BR>[Called By]<UL><LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI9_5_IRQHandler
<LI><a href="#[1d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI2_IRQHandler
<LI><a href="#[3d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI15_10_IRQHandler
<LI><a href="#[1b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI0_IRQHandler
<LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL> </UL>
<P><STRONG><a name="[51]"></a>SystemInit</STRONG> (Thumb, 78 bytes, Stack size 8 bytes, system_stm32f10x.o(i.SystemInit)) <P><STRONG><a name="[51]"></a>SystemInit</STRONG> (Thumb, 78 bytes, Stack size 8 bytes, system_stm32f10x.o(i.SystemInit))
<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = SystemInit &rArr; SetSysClock &rArr; SetSysClockTo72 <BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = SystemInit &rArr; SetSysClock &rArr; SetSysClockTo72
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SetSysClock <BR>[Calls]<UL><LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SetSysClock
</UL> </UL>
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(.text) <BR>[Address Reference Count : 1]<UL><LI> startup_stm32f10x_hd.o(.text)
</UL> </UL>
<P><STRONG><a name="[6c]"></a>TIM3_Init</STRONG> (Thumb, 96 bytes, Stack size 0 bytes, main.o(i.TIM3_Init)) <P><STRONG><a name="[d9]"></a>TIM2_Capture_Init</STRONG> (Thumb, 36 bytes, Stack size 0 bytes, parking_sensor.o(i.TIM2_Capture_Init))
<BR><BR>[Called By]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main <BR><BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[d2]"></a>TIM3_CH1_Init</STRONG> (Thumb, 90 bytes, Stack size 0 bytes, rotate_motor.o(i.TIM3_CH1_Init))
<BR><BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[d3]"></a>TIM3_CH2_Init</STRONG> (Thumb, 90 bytes, Stack size 0 bytes, walking_motor.o(i.TIM3_CH2_Init))
<BR><BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[cb]"></a>Total_EXTI_Init</STRONG> (Thumb, 410 bytes, Stack size 8 bytes, common.o(i.Total_EXTI_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = Total_EXTI_Init &rArr; NVIC_SetPriority
</UL>
<BR>[Calls]<UL><LI><a href="#[cd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_SetPriority
<LI><a href="#[cc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_EnableIRQ
</UL>
<BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[d0]"></a>Total_GPIO_Init</STRONG> (Thumb, 602 bytes, Stack size 0 bytes, common.o(i.Total_GPIO_Init))
<BR><BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[c6]"></a>USART1_GPIO_Init</STRONG> (Thumb, 58 bytes, Stack size 0 bytes, uart_log.o(i.USART1_GPIO_Init))
<BR><BR>[Called By]<UL><LI><a href="#[c5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Init
</UL>
<P><STRONG><a name="[c7]"></a>USART1_Init</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, uart_log.o(i.USART1_Init))
<BR><BR>[Called By]<UL><LI><a href="#[c5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Init
</UL>
<P><STRONG><a name="[ce]"></a>USART1_SendChar</STRONG> (Thumb, 24 bytes, Stack size 0 bytes, uart_log.o(i.USART1_SendChar))
<BR><BR>[Called By]<UL><LI><a href="#[c8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;USART1_SendString
</UL>
<P><STRONG><a name="[c8]"></a>USART1_SendString</STRONG> (Thumb, 22 bytes, Stack size 4 bytes, uart_log.o(i.USART1_SendString))
<BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = USART1_SendString
</UL>
<BR>[Calls]<UL><LI><a href="#[ce]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;USART1_SendChar
</UL>
<BR>[Called By]<UL><LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Printf
<LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Print
</UL>
<P><STRONG><a name="[cf]"></a>Update_Motor_Status</STRONG> (Thumb, 130 bytes, Stack size 48 bytes, rotate_motor.o(i.Update_Motor_Status))
<BR><BR>[Stack]<UL><LI>Max Depth = 136<LI>Call Chain = Update_Motor_Status &rArr; RotateMotor_Accelerate &rArr; __aeabi_dmul
</UL>
<BR>[Calls]<UL><LI><a href="#[c2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Set_PWM_Frequency
<LI><a href="#[c3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RotateMotor_Decelerate
<LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RotateMotor_Accelerate
<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dmul
<LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ui2d
<LI><a href="#[c1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_d2uiz
<LI><a href="#[c0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ddiv
</UL>
<BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[d7]"></a>Walking_Enable_Rotate</STRONG> (Thumb, 30 bytes, Stack size 0 bytes, walking_motor.o(i.Walking_Enable_Rotate))
<BR><BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[d6]"></a>Walking_SetDirection</STRONG> (Thumb, 30 bytes, Stack size 0 bytes, walking_motor.o(i.Walking_SetDirection))
<BR><BR>[Called By]<UL><LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL> </UL>
<P><STRONG><a name="[67]"></a>USART1_GPIO_Init</STRONG> (Thumb, 58 bytes, Stack size 0 bytes, uart_log.o(i.USART1_GPIO_Init)) <P><STRONG><a name="[a4]"></a>__ARM_fpclassify</STRONG> (Thumb, 40 bytes, Stack size 0 bytes, fpclassify.o(i.__ARM_fpclassify))
<BR><BR>[Called By]<UL><LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Init <BR><BR>[Called By]<UL><LI><a href="#[a6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_hex_real
<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_dec_real
</UL> </UL>
<P><STRONG><a name="[68]"></a>USART1_Init</STRONG> (Thumb, 38 bytes, Stack size 0 bytes, uart_log.o(i.USART1_Init)) <P><STRONG><a name="[9c]"></a>_is_digit</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, __printf_wp.o(i._is_digit))
<BR><BR>[Called By]<UL><LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Init <BR><BR>[Called By]<UL><LI><a href="#[96]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__printf
</UL> </UL>
<P><STRONG><a name="[5d]"></a>main</STRONG> (Thumb, 58 bytes, Stack size 0 bytes, main.o(i.main)) <P><STRONG><a name="[87]"></a>main</STRONG> (Thumb, 184 bytes, Stack size 32 bytes, main.o(i.main))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = main &rArr; Delay <BR><BR>[Stack]<UL><LI>Max Depth = 336 + Unknown Stack Size
<LI>Call Chain = main &rArr; StateMachineHandler &rArr; Parking_Sensor_Interruption &rArr; Serial_Printf &rArr; vsnprintf &rArr; _printf_char_common &rArr; __printf
</UL>
<BR>[Calls]<UL><LI><a href="#[d6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Walking_SetDirection
<LI><a href="#[d7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Walking_Enable_Rotate
<LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Update_Motor_Status
<LI><a href="#[d0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Total_GPIO_Init
<LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Total_EXTI_Init
<LI><a href="#[d3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM3_CH2_Init
<LI><a href="#[d2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM3_CH1_Init
<LI><a href="#[d9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM2_Capture_Init
<LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;StateMachineHandler
<LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Print
<LI><a href="#[c5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Init
<LI><a href="#[c4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendTriggerSignal
<LI><a href="#[d4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Rotate_SetDirection
<LI><a href="#[d5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Rotate_Enable_Rotate
<LI><a href="#[be]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Pneumatic_Solenoid_Control
<LI><a href="#[b3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Delay
<LI><a href="#[d8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Configure_PE_Pin
<LI><a href="#[b2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Buzzer_On
<LI><a href="#[d1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy4
</UL>
<BR>[Called By]<UL><LI><a href="#[86]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry_main
</UL>
<P><STRONG><a name="[81]"></a>_get_lc_numeric</STRONG> (Thumb, 44 bytes, Stack size 8 bytes, lc_numeric_c.o(locale$$code))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = _get_lc_numeric
</UL>
<BR>[Calls]<UL><LI><a href="#[da]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;strcmp
</UL>
<BR>[Called By]<UL><LI><a href="#[80]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_lib_init_lc_numeric_2
</UL>
<P><STRONG><a name="[55]"></a>_get_lc_ctype</STRONG> (Thumb, 44 bytes, Stack size 8 bytes, lc_ctype_c.o(locale$$code))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = _get_lc_ctype
</UL>
<BR>[Calls]<UL><LI><a href="#[da]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;strcmp
</UL>
<BR>[Called By]<UL><LI><a href="#[7f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_lib_init_lc_ctype_2
</UL>
<BR>[Address Reference Count : 1]<UL><LI> rt_ctype_table.o(.text)
</UL>
<P><STRONG><a name="[c0]"></a>__aeabi_ddiv</STRONG> (Thumb, 0 bytes, Stack size 32 bytes, ddiv.o(x$fpl$ddiv))
<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = __aeabi_ddiv
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_Init <BR>[Called By]<UL><LI><a href="#[c3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RotateMotor_Decelerate
<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM3_Init <LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RotateMotor_Accelerate
<LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Set_Direction <LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Update_Motor_Status
<LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Init </UL>
<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Enable_Stepper
<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Delay <P><STRONG><a name="[db]"></a>_ddiv</STRONG> (Thumb, 552 bytes, Stack size 32 bytes, ddiv.o(x$fpl$ddiv), UNUSED)
<BR><BR>[Calls]<UL><LI><a href="#[dc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__fpl_dretinf
<LI><a href="#[dd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__fpl_dnaninf
</UL>
<P><STRONG><a name="[c1]"></a>__aeabi_d2uiz</STRONG> (Thumb, 0 bytes, Stack size 32 bytes, dfixu.o(x$fpl$dfixu))
<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = __aeabi_d2uiz
</UL>
<BR>[Called By]<UL><LI><a href="#[c3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RotateMotor_Decelerate
<LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RotateMotor_Accelerate
<LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Update_Motor_Status
</UL>
<P><STRONG><a name="[de]"></a>_dfixu</STRONG> (Thumb, 90 bytes, Stack size 32 bytes, dfixu.o(x$fpl$dfixu), UNUSED)
<BR><BR>[Calls]<UL><LI><a href="#[dd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__fpl_dnaninf
</UL>
<P><STRONG><a name="[b5]"></a>__aeabi_ui2d</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, dflt_clz.o(x$fpl$dfltu))
<BR><BR>[Called By]<UL><LI><a href="#[b4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;CalculateDistance
<LI><a href="#[c3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RotateMotor_Decelerate
<LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RotateMotor_Accelerate
<LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Update_Motor_Status
</UL>
<P><STRONG><a name="[10f]"></a>_dfltu</STRONG> (Thumb, 38 bytes, Stack size 0 bytes, dflt_clz.o(x$fpl$dfltu), UNUSED)
<P><STRONG><a name="[b6]"></a>__aeabi_dmul</STRONG> (Thumb, 0 bytes, Stack size 32 bytes, dmul.o(x$fpl$dmul))
<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = __aeabi_dmul
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__rt_entry_main <BR>[Called By]<UL><LI><a href="#[b4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;CalculateDistance
<LI><a href="#[c3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RotateMotor_Decelerate
<LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;RotateMotor_Accelerate
<LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Update_Motor_Status
</UL>
<P><STRONG><a name="[df]"></a>_dmul</STRONG> (Thumb, 332 bytes, Stack size 32 bytes, dmul.o(x$fpl$dmul), UNUSED)
<BR><BR>[Calls]<UL><LI><a href="#[dc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__fpl_dretinf
<LI><a href="#[dd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__fpl_dnaninf
</UL>
<P><STRONG><a name="[dd]"></a>__fpl_dnaninf</STRONG> (Thumb, 156 bytes, Stack size 16 bytes, dnaninf.o(x$fpl$dnaninf), UNUSED)
<BR><BR>[Called By]<UL><LI><a href="#[df]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_dmul
<LI><a href="#[de]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_dfixu
<LI><a href="#[db]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_ddiv
</UL>
<P><STRONG><a name="[dc]"></a>__fpl_dretinf</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, dretinf.o(x$fpl$dretinf), UNUSED)
<BR><BR>[Called By]<UL><LI><a href="#[df]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_dmul
<LI><a href="#[db]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_ddiv
</UL>
<P><STRONG><a name="[60]"></a>_printf_fp_dec</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, printf1.o(x$fpl$printf1))
<BR><BR>[Stack]<UL><LI>Max Depth = 320<LI>Call Chain = _printf_fp_dec &rArr; _printf_fp_dec_real &rArr; _fp_digits &rArr; _btod_etento &rArr; _btod_emul &rArr; _e2e
</UL>
<BR>[Calls]<UL><LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_dec_real
</UL>
<BR>[Called By]<UL><LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_g
<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_e
<LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_f
</UL>
<P><STRONG><a name="[64]"></a>_printf_fp_hex</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, printf2.o(x$fpl$printf2))
<BR><BR>[Stack]<UL><LI>Max Depth = 112<LI>Call Chain = _printf_fp_hex &rArr; _printf_fp_hex_real &rArr; _printf_fp_infnan &rArr; _printf_post_padding
</UL>
<BR>[Calls]<UL><LI><a href="#[a6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_hex_real
</UL>
<BR>[Called By]<UL><LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_a
</UL> </UL>
<P> <P>
<H3> <H3>
Local Symbols Local Symbols
</H3> </H3>
<P><STRONG><a name="[69]"></a>SetSysClock</STRONG> (Thumb, 8 bytes, Stack size 8 bytes, system_stm32f10x.o(i.SetSysClock)) <P><STRONG><a name="[cc]"></a>NVIC_EnableIRQ</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, common.o(i.NVIC_EnableIRQ))
<BR><BR>[Called By]<UL><LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Total_EXTI_Init
</UL>
<P><STRONG><a name="[cd]"></a>NVIC_SetPriority</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, common.o(i.NVIC_SetPriority))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = NVIC_SetPriority
</UL>
<BR>[Called By]<UL><LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Total_EXTI_Init
</UL>
<P><STRONG><a name="[c9]"></a>SetSysClock</STRONG> (Thumb, 8 bytes, Stack size 8 bytes, system_stm32f10x.o(i.SetSysClock))
<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = SetSysClock &rArr; SetSysClockTo72 <BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = SetSysClock &rArr; SetSysClockTo72
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SetSysClockTo72 <BR>[Calls]<UL><LI><a href="#[ca]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SetSysClockTo72
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemInit <BR>[Called By]<UL><LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemInit
</UL> </UL>
<P><STRONG><a name="[6a]"></a>SetSysClockTo72</STRONG> (Thumb, 214 bytes, Stack size 12 bytes, system_stm32f10x.o(i.SetSysClockTo72)) <P><STRONG><a name="[ca]"></a>SetSysClockTo72</STRONG> (Thumb, 214 bytes, Stack size 12 bytes, system_stm32f10x.o(i.SetSysClockTo72))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = SetSysClockTo72 <BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = SetSysClockTo72
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SetSysClock <BR>[Called By]<UL><LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SetSysClock
</UL>
<P><STRONG><a name="[54]"></a>_printf_input_char</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, _printf_char_common.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> _printf_char_common.o(.text)
</UL>
<P><STRONG><a name="[9e]"></a>_fp_digits</STRONG> (Thumb, 428 bytes, Stack size 96 bytes, _printf_fp_dec.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 216<LI>Call Chain = _fp_digits &rArr; _btod_etento &rArr; _btod_emul &rArr; _e2e
</UL>
<BR>[Calls]<UL><LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_btod_emul
<LI><a href="#[a1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_btod_ediv
<LI><a href="#[a0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_btod_d2e
<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_btod_etento
<LI><a href="#[99]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_ll_udiv10
</UL>
<BR>[Called By]<UL><LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_fp_dec_real
</UL> </UL>
<P> <P>
<H3> <H3>
......
--cpu Cortex-M3 --cpu Cortex-M3
".\objects\main.o" ".\objects\main.o"
".\objects\uart_log.o" ".\objects\uart_log.o"
".\objects\step_motor.o" ".\objects\rotate_motor.o"
".\objects\pneumatic_solenoid.o"
".\objects\parking_sensor.o"
".\objects\common.o"
".\objects\distance_switch.o"
".\objects\photoelectric_switch.o"
".\objects\onewire.o"
".\objects\temperature_sensor.o"
".\objects\emergency_stop.o"
".\objects\buzzer.o"
".\objects\walking_motor.o"
".\objects\ds18b20.o"
".\objects\startup_stm32f10x_hd.o" ".\objects\startup_stm32f10x_hd.o"
".\objects\system_stm32f10x.o" ".\objects\system_stm32f10x.o"
--strict --scatter ".\Objects\MotorControl.sct" --strict --scatter ".\Objects\MotorControl.sct"
......
Dependencies for Project 'MotorControl', Target 'PWM': (DO NOT MODIFY !) Dependencies for Project 'MotorControl', Target 'PWM': (DO NOT MODIFY !)
F (.\main.c)(0x66F677B1)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\main.o --omf_browse .\objects\main.crf --depend .\objects\main.d) F (.\main.c)(0x6720B343)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\main.o --omf_browse .\objects\main.crf --depend .\objects\main.d)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C) I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C)
I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000) I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h)(0x5714AE54) I (C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h)(0x5714AE54)
...@@ -8,10 +8,19 @@ I (C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h)(0x5714AE54) ...@@ -8,10 +8,19 @@ I (C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h)(0x5714AE54) I (C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h)(0x5714AE54) I (C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h)(0x5825386C) I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h)(0x5825386C)
I (.\Module\Inc\rotate_motor.h)(0x6718AEFF)
I (.\Module\Inc\motor_common.h)(0x6718AC7D)
I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x5475F300) I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x5475F300)
I (.\Module\Inc\walking_motor.h)(0x6719AF6C)
I (.\Module\Inc\uart_log.h)(0x66F3E910) I (.\Module\Inc\uart_log.h)(0x66F3E910)
I (.\Module\Inc\common.h)(0x671F8315)
I (.\Module\Inc\buzzer.h)(0x671A184C)
I (.\Module\Inc\pneumatic_solenoid.h)(0x6718D44F)
I (.\Module\Inc\temperature_sensor.h)(0x671226BD)
I (.\Module\Inc\ds18b20.h)(0x6720A65E)
I (.\Module\Inc\parking_sensor.h)(0x67209827)
F (.\Module\Inc\uart_log.h)(0x66F3E910)() F (.\Module\Inc\uart_log.h)(0x66F3E910)()
F (.\Module\Src\uart_log.c)(0x66F6776B)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\uart_log.o --omf_browse .\objects\uart_log.crf --depend .\objects\uart_log.d) F (.\Module\Src\uart_log.c)(0x67204CB8)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\uart_log.o --omf_browse .\objects\uart_log.crf --depend .\objects\uart_log.d)
I (.\Module\Inc\uart_log.h)(0x66F3E910) I (.\Module\Inc\uart_log.h)(0x66F3E910)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C) I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C)
I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000) I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000)
...@@ -24,8 +33,162 @@ I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x. ...@@ -24,8 +33,162 @@ I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.
I (C:\Keil_v5\ARM\ARMCC\include\stdarg.h)(0x5475F2FA) I (C:\Keil_v5\ARM\ARMCC\include\stdarg.h)(0x5475F2FA)
I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5475F300) I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5475F300)
I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5475F300) I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5475F300)
F (.\Module\Inc\step_motor.h)(0x66F67758)() F (.\Module\Inc\walking_motor.h)(0x6719AF6C)()
F (.\Module\Src\step_motor.c)(0x66F67758)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\step_motor.o --omf_browse .\objects\step_motor.crf --depend .\objects\step_motor.d) F (.\Module\Inc\rotate_motor.h)(0x6718AEFF)()
F (.\Module\Src\rotate_motor.c)(0x671B437F)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\rotate_motor.o --omf_browse .\objects\rotate_motor.crf --depend .\objects\rotate_motor.d)
I (.\Module\Inc\rotate_motor.h)(0x6718AEFF)
I (.\Module\Inc\motor_common.h)(0x6718AC7D)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5475F300)
I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x5475F300)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C)
I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h)(0x5825386C)
I (.\Module\Inc\common.h)(0x671F8315)
F (.\Module\Inc\pneumatic_solenoid.h)(0x6718D44F)()
F (.\Module\Src\pneumatic_solenoid.c)(0x671B05EE)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\pneumatic_solenoid.o --omf_browse .\objects\pneumatic_solenoid.crf --depend .\objects\pneumatic_solenoid.d)
I (.\Module\Inc\pneumatic_solenoid.h)(0x6718D44F)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5475F300)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C)
I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h)(0x5825386C)
I (.\Module\Inc\uart_log.h)(0x66F3E910)
F (.\Module\Src\parking_sensor.c)(0x6720B33E)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\parking_sensor.o --omf_browse .\objects\parking_sensor.crf --depend .\objects\parking_sensor.d)
I (.\Module\Inc\parking_sensor.h)(0x67209827)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C)
I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h)(0x5714AE54)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5475F300)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h)(0x5825386C)
I (.\Module\Inc\common.h)(0x671F8315)
I (.\Module\Inc\uart_log.h)(0x66F3E910)
F (.\Module\Inc\common.h)(0x671F8315)()
F (.\Module\Inc\parking_sensor.h)(0x67209827)()
F (.\Module\Src\common.c)(0x6720BD8F)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\common.o --omf_browse .\objects\common.crf --depend .\objects\common.d)
I (.\Module\Inc\common.h)(0x671F8315)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C)
I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h)(0x5714AE54)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5475F300)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h)(0x5825386C)
I (.\Module\Inc\parking_sensor.h)(0x67209827)
I (.\Module\Inc\distance_switch.h)(0x6718D48C)
I (.\Module\Inc\photoelectric_switch.h)(0x6719AC13)
I (.\Module\Inc\emergency_stop.h)(0x6718D4AA)
I (.\Module\Inc\uart_log.h)(0x66F3E910)
F (.\Module\Inc\distance_switch.h)(0x6718D48C)()
F (.\Module\Src\distance_switch.c)(0x6719FB3A)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\distance_switch.o --omf_browse .\objects\distance_switch.crf --depend .\objects\distance_switch.d)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C)
I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h)(0x5714AE54)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5475F300)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h)(0x5825386C)
I (.\Module\Inc\uart_log.h)(0x66F3E910)
I (.\Module\Inc\distance_switch.h)(0x6718D48C)
F (.\Module\Inc\photoelectric_switch.h)(0x6719AC13)()
F (.\Module\Src\photoelectric_switch.c)(0x6719E7CC)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\photoelectric_switch.o --omf_browse .\objects\photoelectric_switch.crf --depend .\objects\photoelectric_switch.d)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C)
I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h)(0x5714AE54)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5475F300)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h)(0x5825386C)
I (.\Module\Inc\photoelectric_switch.h)(0x6719AC13)
I (.\Module\Inc\uart_log.h)(0x66F3E910)
F (.\Module\Inc\temperature_sensor.h)(0x671226BD)()
F (.\Module\Inc\onewire.h)(0x671B0B89)()
F (.\Module\Src\onewire.c)(0x671B1061)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\onewire.o --omf_browse .\objects\onewire.crf --depend .\objects\onewire.d)
I (.\Module\Inc\onewire.h)(0x671B0B89)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C)
I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h)(0x5714AE54)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5475F300)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h)(0x5825386C)
I (.\Module\Inc\common.h)(0x671F8315)
F (.\Module\Src\temperature_sensor.c)(0x671B094E)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\temperature_sensor.o --omf_browse .\objects\temperature_sensor.crf --depend .\objects\temperature_sensor.d)
I (.\Module\Inc\temperature_sensor.h)(0x671226BD)
I (.\Module\Inc\onewire.h)(0x671B0B89)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C)
I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h)(0x5714AE54)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5475F300)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h)(0x5825386C)
I (.\Module\Inc\uart_log.h)(0x66F3E910)
I (C:\Keil_v5\ARM\ARMCC\include\stddef.h)(0x5475F300)
F (.\Module\Inc\emergency_stop.h)(0x6718D4AA)()
F (.\Module\Src\emergency_stop.c)(0x671A01AA)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\emergency_stop.o --omf_browse .\objects\emergency_stop.crf --depend .\objects\emergency_stop.d)
I (.\Module\Inc\emergency_stop.h)(0x6718D4AA)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C)
I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h)(0x5714AE54)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5475F300)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h)(0x5825386C)
I (.\Module\Inc\uart_log.h)(0x66F3E910)
F (.\Module\Inc\buzzer.h)(0x671A184C)()
F (.\Module\Src\buzzer.c)(0x671A183C)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\buzzer.o --omf_browse .\objects\buzzer.crf --depend .\objects\buzzer.d)
I (.\Module\Inc\buzzer.h)(0x671A184C)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C)
I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h)(0x5714AE54)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5475F300)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h)(0x5825386C)
I (.\Module\Inc\common.h)(0x671F8315)
F (.\Module\Inc\motor_common.h)(0x6718AC7D)()
F (.\Module\Src\walking_motor.c)(0x6719A2FF)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\walking_motor.o --omf_browse .\objects\walking_motor.crf --depend .\objects\walking_motor.d)
I (.\Module\Inc\walking_motor.h)(0x6719AF6C)
I (.\Module\Inc\motor_common.h)(0x6718AC7D)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5475F300)
I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x5475F300)
I (.\Module\Inc\common.h)(0x671F8315)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C)
I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h)(0x5825386C)
F (.\Module\Inc\ds18b20.h)(0x6720A65E)()
F (.\Module\Src\ds18b20.c)(0x6720A544)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\ds18b20.o --omf_browse .\objects\ds18b20.crf --depend .\objects\ds18b20.d)
I (.\Module\Inc\ds18b20.h)(0x6720A65E)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h)(0x5825386C)
I (D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h)(0x00000000)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h)(0x5714AE54)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5475F300)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h)(0x5714AE54)
I (C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h)(0x5825386C)
I (.\Module\Inc\common.h)(0x671F8315)
F (RTE\Device\STM32F103ZE\RTE_Device.h)(0x5FC04FEA)() F (RTE\Device\STM32F103ZE\RTE_Device.h)(0x5FC04FEA)()
F (RTE\Device\STM32F103ZE\startup_stm32f10x_hd.s)(0x61AD795E)(--cpu Cortex-M3 -g --apcs=interwork -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include --pd "__UVISION_VERSION SETA 514" --pd "_RTE_ SETA 1" --pd "STM32F10X_HD SETA 1" --list .\listings\startup_stm32f10x_hd.lst --xref -o .\objects\startup_stm32f10x_hd.o --depend .\objects\startup_stm32f10x_hd.d) F (RTE\Device\STM32F103ZE\startup_stm32f10x_hd.s)(0x61AD795E)(--cpu Cortex-M3 -g --apcs=interwork -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include --pd "__UVISION_VERSION SETA 514" --pd "_RTE_ SETA 1" --pd "STM32F10X_HD SETA 1" --list .\listings\startup_stm32f10x_hd.lst --xref -o .\objects\startup_stm32f10x_hd.o --depend .\objects\startup_stm32f10x_hd.d)
F (RTE\Device\STM32F103ZE\system_stm32f10x.c)(0x61AD795E)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\system_stm32f10x.o --omf_browse .\objects\system_stm32f10x.crf --depend .\objects\system_stm32f10x.d) F (RTE\Device\STM32F103ZE\system_stm32f10x.c)(0x61AD795E)(-c --cpu Cortex-M3 -g -O0 --apcs=interwork --split_sections -IC:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -I.\Module\Inc --locale=english --c99 -I D:\Ƕʽ\mcu\Motor_Control\RTE -I D:\Ƕʽ\mcu\Motor_Control\RTE\Device\STM32F103ZE -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1 -I C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -D_RTE_ -DSTM32F10X_HD -o .\objects\system_stm32f10x.o --omf_browse .\objects\system_stm32f10x.crf --depend .\objects\system_stm32f10x.d)
......
.\objects\buzzer.o: Module\Src\buzzer.c
.\objects\buzzer.o: .\Module\Inc\buzzer.h
.\objects\buzzer.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h
.\objects\buzzer.o: D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h
.\objects\buzzer.o: C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h
.\objects\buzzer.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\buzzer.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h
.\objects\buzzer.o: C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h
.\objects\buzzer.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h
.\objects\buzzer.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h
.\objects\buzzer.o: .\Module\Inc\common.h
.\objects\common.o: Module\Src\common.c
.\objects\common.o: .\Module\Inc\common.h
.\objects\common.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h
.\objects\common.o: D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h
.\objects\common.o: C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h
.\objects\common.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\common.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h
.\objects\common.o: C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h
.\objects\common.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h
.\objects\common.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h
.\objects\common.o: .\Module\Inc\parking_sensor.h
.\objects\common.o: .\Module\Inc\distance_switch.h
.\objects\common.o: .\Module\Inc\photoelectric_switch.h
.\objects\common.o: .\Module\Inc\emergency_stop.h
.\objects\common.o: .\Module\Inc\uart_log.h
.\objects\distance_switch.o: Module\Src\distance_switch.c
.\objects\distance_switch.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h
.\objects\distance_switch.o: D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h
.\objects\distance_switch.o: C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h
.\objects\distance_switch.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\distance_switch.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h
.\objects\distance_switch.o: C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h
.\objects\distance_switch.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h
.\objects\distance_switch.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h
.\objects\distance_switch.o: .\Module\Inc\uart_log.h
.\objects\distance_switch.o: .\Module\Inc\distance_switch.h
.\objects\ds18b20.o: Module\Src\ds18b20.c
.\objects\ds18b20.o: .\Module\Inc\ds18b20.h
.\objects\ds18b20.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h
.\objects\ds18b20.o: D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h
.\objects\ds18b20.o: C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h
.\objects\ds18b20.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\ds18b20.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h
.\objects\ds18b20.o: C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h
.\objects\ds18b20.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h
.\objects\ds18b20.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h
.\objects\ds18b20.o: .\Module\Inc\common.h
.\objects\emergency_stop.o: Module\Src\emergency_stop.c
.\objects\emergency_stop.o: .\Module\Inc\emergency_stop.h
.\objects\emergency_stop.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h
.\objects\emergency_stop.o: D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h
.\objects\emergency_stop.o: C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h
.\objects\emergency_stop.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\emergency_stop.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h
.\objects\emergency_stop.o: C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h
.\objects\emergency_stop.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h
.\objects\emergency_stop.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h
.\objects\emergency_stop.o: .\Module\Inc\uart_log.h
No preview for this file type
...@@ -7,5 +7,14 @@ ...@@ -7,5 +7,14 @@
.\objects\main.o: C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h .\objects\main.o: C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h
.\objects\main.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h .\objects\main.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h
.\objects\main.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h .\objects\main.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h
.\objects\main.o: .\Module\Inc\rotate_motor.h
.\objects\main.o: .\Module\Inc\motor_common.h
.\objects\main.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdbool.h .\objects\main.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdbool.h
.\objects\main.o: .\Module\Inc\walking_motor.h
.\objects\main.o: .\Module\Inc\uart_log.h .\objects\main.o: .\Module\Inc\uart_log.h
.\objects\main.o: .\Module\Inc\common.h
.\objects\main.o: .\Module\Inc\buzzer.h
.\objects\main.o: .\Module\Inc\pneumatic_solenoid.h
.\objects\main.o: .\Module\Inc\temperature_sensor.h
.\objects\main.o: .\Module\Inc\ds18b20.h
.\objects\main.o: .\Module\Inc\parking_sensor.h
No preview for this file type
.\objects\onewire.o: Module\Src\onewire.c
.\objects\onewire.o: .\Module\Inc\onewire.h
.\objects\onewire.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h
.\objects\onewire.o: D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h
.\objects\onewire.o: C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h
.\objects\onewire.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\onewire.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h
.\objects\onewire.o: C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h
.\objects\onewire.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h
.\objects\onewire.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h
.\objects\onewire.o: .\Module\Inc\common.h
.\objects\parking_sensor.o: Module\Src\parking_sensor.c
.\objects\parking_sensor.o: .\Module\Inc\parking_sensor.h
.\objects\parking_sensor.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h
.\objects\parking_sensor.o: D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h
.\objects\parking_sensor.o: C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h
.\objects\parking_sensor.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\parking_sensor.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h
.\objects\parking_sensor.o: C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h
.\objects\parking_sensor.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h
.\objects\parking_sensor.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h
.\objects\parking_sensor.o: .\Module\Inc\common.h
.\objects\parking_sensor.o: .\Module\Inc\uart_log.h
.\objects\photoelectric_switch.o: Module\Src\photoelectric_switch.c
.\objects\photoelectric_switch.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h
.\objects\photoelectric_switch.o: D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h
.\objects\photoelectric_switch.o: C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h
.\objects\photoelectric_switch.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\photoelectric_switch.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h
.\objects\photoelectric_switch.o: C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h
.\objects\photoelectric_switch.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h
.\objects\photoelectric_switch.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h
.\objects\photoelectric_switch.o: .\Module\Inc\photoelectric_switch.h
.\objects\photoelectric_switch.o: .\Module\Inc\uart_log.h
.\objects\pneumatic_solenoid.o: Module\Src\pneumatic_solenoid.c
.\objects\pneumatic_solenoid.o: .\Module\Inc\pneumatic_solenoid.h
.\objects\pneumatic_solenoid.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\pneumatic_solenoid.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h
.\objects\pneumatic_solenoid.o: D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h
.\objects\pneumatic_solenoid.o: C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h
.\objects\pneumatic_solenoid.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h
.\objects\pneumatic_solenoid.o: C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h
.\objects\pneumatic_solenoid.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h
.\objects\pneumatic_solenoid.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h
.\objects\pneumatic_solenoid.o: .\Module\Inc\uart_log.h
.\objects\rotate_motor.o: Module\Src\rotate_motor.c
.\objects\rotate_motor.o: .\Module\Inc\rotate_motor.h
.\objects\rotate_motor.o: .\Module\Inc\motor_common.h
.\objects\rotate_motor.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\rotate_motor.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdbool.h
.\objects\rotate_motor.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h
.\objects\rotate_motor.o: D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h
.\objects\rotate_motor.o: C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h
.\objects\rotate_motor.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h
.\objects\rotate_motor.o: C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h
.\objects\rotate_motor.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h
.\objects\rotate_motor.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h
.\objects\rotate_motor.o: .\Module\Inc\common.h
No preview for this file type
.\objects\step_motor.o: Module\Src\step_motor.c .\objects\step_motor.o: Module\Src\step_motor.c
.\objects\step_motor.o: .\Module\Inc\step_motor.h
.\objects\step_motor.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\step_motor.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdbool.h
.\objects\step_motor.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h
.\objects\step_motor.o: D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h
.\objects\step_motor.o: C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h
.\objects\step_motor.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h
.\objects\step_motor.o: C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h
.\objects\step_motor.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h
.\objects\step_motor.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h
No preview for this file type
.\objects\temperature_sensor.o: Module\Src\temperature_sensor.c
.\objects\temperature_sensor.o: .\Module\Inc\temperature_sensor.h
.\objects\temperature_sensor.o: .\Module\Inc\onewire.h
.\objects\temperature_sensor.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h
.\objects\temperature_sensor.o: D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h
.\objects\temperature_sensor.o: C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h
.\objects\temperature_sensor.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\temperature_sensor.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h
.\objects\temperature_sensor.o: C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h
.\objects\temperature_sensor.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h
.\objects\temperature_sensor.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h
.\objects\temperature_sensor.o: .\Module\Inc\uart_log.h
.\objects\temperature_sensor.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h
No preview for this file type
No preview for this file type
.\objects\walking_motor.o: Module\Src\walking_motor.c
.\objects\walking_motor.o: .\Module\Inc\walking_motor.h
.\objects\walking_motor.o: .\Module\Inc\motor_common.h
.\objects\walking_motor.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\walking_motor.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdbool.h
.\objects\walking_motor.o: .\Module\Inc\common.h
.\objects\walking_motor.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\stm32f10x.h
.\objects\walking_motor.o: D:\嵌入式\mcu\Motor_Control\RTE\RTE_Components.h
.\objects\walking_motor.o: C:\Keil_v5\ARM\CMSIS\Include\core_cm3.h
.\objects\walking_motor.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmInstr.h
.\objects\walking_motor.o: C:\Keil_v5\ARM\CMSIS\Include\cmsis_armcc.h
.\objects\walking_motor.o: C:\Keil_v5\ARM\CMSIS\Include\core_cmFunc.h
.\objects\walking_motor.o: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.2.0\Device\Include\system_stm32f10x.h
#include "stm32f10x.h" #include "stm32f10x.h"
#include "step_motor.h" #include "rotate_motor.h"
#include "walking_motor.h"
#include "uart_log.h"
#include "common.h"
#include "buzzer.h"
#include "pneumatic_solenoid.h"
#include "temperature_sensor.h"
#include "ds18b20.h"
#include "parking_sensor.h"
int main(void) { int main(void) {
// 初始化步进电机控制
StepperMotor_Init();
Total_GPIO_Init();
Total_EXTI_Init();
Serial_Init();
// 定义步进电机结构体 // 定义步进电机结构体
StepMotor motor = { RotateMotor motor = {
.base={
.stepcount = 0, // 初始步数 .stepcount = 0, // 初始步数
.direction = 1, // 初始方向(1:顺时针) .direction = 1, // 初始方向(1:顺时针)
.curSpeed = 0, // 初始速度为0 .curSpeed = 0, // 初始速度为0
.desSpeed = 0, // 目标速度 .desSpeed = 0, // 目标速度
.maxSpeed = 9375, // 最大转速(假设值) .maxSpeed = 9375, // 最大转速(假设值)
.speedStatus = SPEED_NONE, // 初始速度状态 .speedStatus = SPEED_NONE, // 初始速度状态
.stepcountMode = 0, // 脉冲计数模式 .stepcountMode =ABSOLUTE_COUNT, // 脉冲计数模式
.curlocation = 0, // 当前位置 .curlocation = 0, // 当前位置
.deslocation = 0, // 目标位置 .deslocation = 0, // 目标位置
.acceleration = 1000, // 加速度 (步/秒^2) .acceleration = 1000, // 加速度 (步/秒^2)
.deceleration = 1000, // 减速度 (步/秒^2) .deceleration = 1000, // 减速度 (步/秒^2)
.psc = 71, // 预分频器 .psc = 71, // 预分频器
.arr = 999 // 自动重装载寄存器 .arr = 999 // 自动重装载寄存器
}
}; };
// 初始化定时器 TIM3 // 初始化定时器 TIM3
TIM3_Init(motor.psc, motor.arr); TIM3_CH1_Init(motor.base.psc, motor.base.arr);
TIM3_CH2_Init(motor.base.psc, motor.base.arr);
SystemState currentState = STATE_IDLE;
// 设置初始方向(例如顺时针) // 设置初始方向(例如顺时针)
Set_Direction(motor.direction); Rotate_SetDirection(motor.base.direction);
// 使能步进电机 // 使能步进电机
Enable_Stepper(true); Rotate_Enable_Rotate(true);
Walking_SetDirection(motor.base.direction);
// 使能或禁用旋转电机
Walking_Enable_Rotate(true);
Pneumatic_Solenoid_Control(0,1);
Buzzer_On();
// 配置 PE14 为推挽输出
Configure_PE_Pin(14, 0x3);
// 初始化 TIM2 捕获模式
TIM2_Capture_Init();
SendTriggerSignal();
//
// DS18B20_Init(); // 初始化 DS18B20
// uint32_t data=0;
// while (data<=0) {
// Serial_Printf("temperature = %02d\r\n\n",DS18B20_GetTemperture());
// data = DS18B20_GetTemperture() * 100;
// Serial_Printf("temperature = %d.%02d\r\n\n", data/100, data % 100);
//
// Delay(1000, 'm'); // 延时 1 秒
// }
;
// 主循环 // 主循环
while (1) { while (1) {
StateMachineHandler(currentState);
Serial_Print("main: 启动\n");
// GPIOC->ODR |= (1 << 4); // 设置低电平
// Delay(2000); // 延时1秒
GPIOC->ODR &= ~(1 << 4); //设置高电平
// Delay(2000); // 延时1秒
// GPIOC->ODR |= (1 << 4); // 设置高电平
// Delay(2000); // 延时1秒
// GPIOC->ODR &= ~(1 << 4);
// Delay(2000); // 延时1秒
// GPIOC->ODR |= (1 << 4); // 设置高电平
// Delay(2000); // 延时1秒
// GPIOC->ODR &= ~(1 << 4);
// Delay(2000); // 延时1秒
// GPIOC->ODR |= (1 << 4); // 设置高电平
// Delay(2000); // 延时1秒
// 例子:加速到目标速度 // 例子:加速到目标速度
Update_Motor_Status(&motor, SPEED_ACC, 9375, 1000); // 以1000 RPM/s的加速度加速到9375 RPM Update_Motor_Status(&motor, SPEED_ACC, 9375, 1000); // 以1000 RPM/s的加速度加速到9375 RPM
// 保持匀速一段时间 // 保持匀速一段时间
Delay(5000); // 延时5秒 Delay(5000,'s'); // 延时5秒
// 例子:减速到停止 // 例子:减速到停止
Update_Motor_Status(&motor, SPEED_DEC, 0, 1000); // 以1000 RPM/s的减速度减速到停止 Update_Motor_Status(&motor, SPEED_DEC, 0, 1000); // 以1000 RPM/s的减速度减速到停止
// 保持停止一段时间 // 保持停止一段时间
Delay(5000); // 延时5秒 Delay(5000,'s'); // 延时5秒
} }
} }
#include "stm32f10x.h"
#include "rotate_motor.h"
#include "walking_motor.h"
#include "uart_log.h"
#include "common.h"
#include "buzzer.h"
#include "pneumatic_solenoid.h"
#include "temperature_sensor.h"
#include "ds18b20.h"
#include "parking_sensor.h"
int main(void) {
Total_GPIO_Init();
Total_EXTI_Init();
Serial_Init();
// 定义步进电机结构体
RotateMotor motor = {
.base={
.stepcount = 0, // 初始步数
.direction = 1, // 初始方向(1:顺时针)
.curSpeed = 0, // 初始速度为0
.desSpeed = 0, // 目标速度
.maxSpeed = 9375, // 最大转速(假设值)
.speedStatus = SPEED_NONE, // 初始速度状态
.stepcountMode =ABSOLUTE_COUNT, // 脉冲计数模式
.curlocation = 0, // 当前位置
.deslocation = 0, // 目标位置
.acceleration = 1000, // 加速度 (步/秒^2)
.deceleration = 1000, // 减速度 (步/秒^2)
.psc = 71, // 预分频器
.arr = 999 // 自动重装载寄存器
}
};
// 初始化定时器 TIM3
TIM3_CH1_Init(motor.base.psc, motor.base.arr);
TIM3_CH2_Init(motor.base.psc, motor.base.arr);
SystemState currentState = STATE_IDLE;
// 设置初始方向(例如顺时针)
Rotate_SetDirection(motor.base.direction);
// 使能步进电机
Rotate_Enable_Rotate(true);
Walking_SetDirection(motor.base.direction);
// 使能或禁用旋转电机
Walking_Enable_Rotate(true);
Pneumatic_Solenoid_Control(0,1);
Buzzer_On();
Serial_Print("main: Before TIM2_Init\n");
TIM2_Init();
Serial_Print("main: Before Delay\n");
Delay(1000, 'm');
Serial_Print("main: Before Start_Measurement\n");
Start_Measurement(1 << 14);
Serial_Print("main: After Start_Measurement\n");
Serial_Print("main: DS18B20_Init\n");
// 初始化DS18B20
if (DS18B20_Init() == 0)
{
// 检测到DS18B20的情况可以进行一些处理,例如点亮一个LED
// 或者在开发板上的屏幕显示“DS18B20 Detected!”之类的信息
}
else
{
// 没有检测到DS18B20,可能需要给出错误处理
Serial_Printf("没有检测到DS18B20,可能需要给出错误处理");
}
uint32_t data = DS18B20_GetTemperture() * 100;
Serial_Printf("temperature = %d.%02d\r\n\n", data/100, data % 100);
// 主循环
while (1) {
StateMachineHandler(currentState);
Serial_Print("main: 启动\n");
// GPIOC->ODR |= (1 << 4); // 设置低电平
// Delay(2000); // 延时1秒
GPIOC->ODR &= ~(1 << 4); //设置高电平
// Delay(2000); // 延时1秒
// GPIOC->ODR |= (1 << 4); // 设置高电平
// Delay(2000); // 延时1秒
// GPIOC->ODR &= ~(1 << 4);
// Delay(2000); // 延时1秒
// GPIOC->ODR |= (1 << 4); // 设置高电平
// Delay(2000); // 延时1秒
// GPIOC->ODR &= ~(1 << 4);
// Delay(2000); // 延时1秒
// GPIOC->ODR |= (1 << 4); // 设置高电平
// Delay(2000); // 延时1秒
// 例子:加速到目标速度
Update_Motor_Status(&motor, SPEED_ACC, 9375, 1000); // 以1000 RPM/s的加速度加速到9375 RPM
// 保持匀速一段时间
Delay(5000,'s'); // 延时5秒
// 例子:减速到停止
Update_Motor_Status(&motor, SPEED_DEC, 0, 1000); // 以1000 RPM/s的减速度减速到停止
// 保持停止一段时间
Delay(5000,'s'); // 延时5秒
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment