From 7d4463bd6937a604e043b976234922895be5c663 Mon Sep 17 00:00:00 2001 From: cgy Date: Mon, 9 Feb 2026 17:29:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=8A=9F=E8=83=BD=E5=8A=A0?= =?UTF-8?q?=E5=85=A8=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HARDWARE/LED/led.c | 56 +++++ HARDWARE/SPI/spi.c | 94 +++++++- HARDWARE/TIMER/timer.c | 141 ++++++++++++ OBJ/USART.axf | Bin 357552 -> 385976 bytes OBJ/USART.build_log.htm | 8 +- OBJ/USART.htm | 471 +++++++++++++++++++++++++++++----------- OBJ/USART_USART.dep | 46 ++-- OBJ/led.crf | Bin 434327 -> 434915 bytes OBJ/main.crf | Bin 439677 -> 443042 bytes OBJ/spi.crf | Bin 435216 -> 436551 bytes OBJ/timer.crf | Bin 435933 -> 438301 bytes OBJ/usart.crf | Bin 443695 -> 446308 bytes SYSTEM/usart/usart.c | 262 ++++++++++++++++++---- SYSTEM/usart/usart.h | 7 +- USER/USART.uvguix.cgy | 45 +++- USER/USART.uvoptx | 2 +- USER/USART.uvprojx | 2 +- USER/main.c | 187 +++++++++++++++- 18 files changed, 1108 insertions(+), 213 deletions(-) diff --git a/HARDWARE/LED/led.c b/HARDWARE/LED/led.c index ab4a3fc..9ad8d61 100644 --- a/HARDWARE/LED/led.c +++ b/HARDWARE/LED/led.c @@ -33,6 +33,62 @@ void LED_Init(void) } +void gpio_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + // spi1 chip-select + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOF时钟 + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式 + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 + GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化 + + // spi2 chip-select + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOF时钟 + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输出模式 +// GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 + GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化 + + + // micro_move switch + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOF时钟 + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输出模式 + // GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 + GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化 + + + // position_move sensor + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOF时钟 + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输出模式 + // GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 + GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化 + + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOF时钟 + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输出模式 + // GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 + GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 + +} diff --git a/HARDWARE/SPI/spi.c b/HARDWARE/SPI/spi.c index a4c93a1..475c117 100644 --- a/HARDWARE/SPI/spi.c +++ b/HARDWARE/SPI/spi.c @@ -10,7 +10,7 @@ //以下是SPI模块的初始化代码,配置成主机模式 //SPI口初始化 //这里针是对SPI1的初始化 -void SPI1_Init(void) +void motor_spi1_init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; @@ -19,16 +19,16 @@ void SPI1_Init(void) RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);//使能SPI1时钟 //GPIOFB3,4,5初始化设置 - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;//PB3~5复用功能输出 + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//PB3~5复用功能输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 - GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化 + GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 - GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_SPI1); //PB3复用为 SPI1 - GPIO_PinAFConfig(GPIOB,GPIO_PinSource4,GPIO_AF_SPI1); //PB4复用为 SPI1 - GPIO_PinAFConfig(GPIOB,GPIO_PinSource5,GPIO_AF_SPI1); //PB5复用为 SPI1 + GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_SPI1); //PB3复用为 SPI1 + GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_SPI1); //PB4复用为 SPI1 + GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_SPI1); //PB5复用为 SPI1 //这里只针对SPI口初始化 RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,ENABLE);//复位SPI1 @@ -83,6 +83,88 @@ u8 spi1_read_write_byte(u8 TxData) +//以下是SPI模块的初始化代码,配置成主机模式 +//SPI口初始化 +//这里针是对SPI2的初始化 +void motor_spi2_init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + SPI_InitTypeDef SPI_InitStructure; + + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOA时钟 + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOA时钟 + + RCC_APB2PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);//使能SPI1时钟 + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能 + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 + GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化 + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能 + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 + GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化 + + GPIO_PinAFConfig(GPIOC,GPIO_PinSource2,GPIO_AF_SPI2); //PB3复用为 SPI1 + GPIO_PinAFConfig(GPIOC,GPIO_PinSource3,GPIO_AF_SPI2); //PB4复用为 SPI1 + GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_SPI2); //PB5复用为 SPI1 + + //这里只针对SPI口初始化 + RCC_APB2PeriphResetCmd(RCC_APB1Periph_SPI2,ENABLE);//复位SPI1 + RCC_APB2PeriphResetCmd(RCC_APB1Periph_SPI2,DISABLE);//停止复位SPI1 + + SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工 + SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置SPI工作模式:设置为主SPI + SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //设置SPI的数据大小:SPI发送接收8位帧结构 + SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //串行同步时钟的空闲状态为高电平 + SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //串行同步时钟的第二个跳变沿(上升或下降)数据被采样 + SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制 + SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //定义波特率预分频的值:波特率预分频值为256 + SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始 + SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值计算的多项式 + SPI_Init(SPI2, &SPI_InitStructure); //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器 + + SPI_Cmd(SPI2, ENABLE); //使能SPI外设 + + SPI1_ReadWriteByte(0xff);//启动传输 +} +//SPI1速度设置函数 +//SPI速度=fAPB2/分频系数 +//@ref SPI_BaudRate_Prescaler:SPI_BaudRatePrescaler_2~SPI_BaudRatePrescaler_256 +//fAPB2时钟一般为84Mhz: +void SPI2_SetSpeed(u8 SPI_BaudRatePrescaler) +{ + assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));//判断有效性 + SPI2->CR1&=0XFFC7;//位3-5清零,用来设置波特率 + SPI2->CR1|=SPI_BaudRatePrescaler; //设置SPI1速度 + SPI_Cmd(SPI2,ENABLE); //使能SPI1 +} +//SPI1 读写一个字节 +//TxData:要写入的字节 +//返回值:读取到的字节 +u8 SPI2_ReadWriteByte(u8 TxData) +{ + + while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET){}//等待发送区空 + + SPI_I2S_SendData(SPI2, TxData); //通过外设SPIx发送一个byte 数据 + + while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET){} //等待接收完一个byte + + return SPI_I2S_ReceiveData(SPI2); //返回通过SPIx最近接收的数据 + +} + +u8 spi2_read_write_byte(u8 TxData) +{ + SPI2_ReadWriteByte(TxData); +} + diff --git a/HARDWARE/TIMER/timer.c b/HARDWARE/TIMER/timer.c index 97edaa2..0d912cb 100644 --- a/HARDWARE/TIMER/timer.c +++ b/HARDWARE/TIMER/timer.c @@ -13,6 +13,55 @@ //All rights reserved ////////////////////////////////////////////////////////////////////////////////// +void TIM1_PWM_Init(u16 arr,u16 psc) +{ + GPIO_InitTypeDef GPIO_InitStructure; + TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; + TIM_OCInitTypeDef TIM_OCInitStructure; + + + RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); ///使能TIM1时钟 + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE); + + GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_TIM1); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(GPIOE,&GPIO_InitStructure); + + GPIO_ResetBits(GPIOE, GPIO_Pin_9); + + TIM_TimeBaseInitStructure.TIM_Period = arr; //自动重装载值 + TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定时器分频 + TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式 + TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; + + TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);//初始化TIM3 + + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; + TIM_OCInitStructure.TIM_Pulse = 100; + + TIM_OC1Init(TIM1, &TIM_OCInitStructure); + + TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); + + TIM_ARRPreloadConfig(TIM1,ENABLE); + + //TIM_Cmd(TIM3, ENABLE); + +} + +//定时器3中断服务函数 +void TIM1_IRQHandler(void) +{ +} + + void TIM2_Int_Init(u16 arr,u16 psc) { @@ -115,6 +164,49 @@ void TIM2_IRQHandler(void) } +void TIM2_PWM_Init(u16 arr,u16 psc) +{ + GPIO_InitTypeDef GPIO_InitStructure; + TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; + TIM_OCInitTypeDef TIM_OCInitStructure; + + + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); ///使能TIM1时钟 + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); + + GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_TIM1); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(GPIOB,&GPIO_InitStructure); + + GPIO_ResetBits(GPIOB, GPIO_Pin_9); + + TIM_TimeBaseInitStructure.TIM_Period = arr; //自动重装载值 + TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定时器分频 + TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式 + TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; + + TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);//初始化TIM3 + + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; + TIM_OCInitStructure.TIM_Pulse = 100; + + TIM_OC1Init(TIM2, &TIM_OCInitStructure); + + TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); + + TIM_ARRPreloadConfig(TIM2,ENABLE); + + //TIM_Cmd(TIM3, ENABLE); + +} + //通用定时器3中断初始化 @@ -170,3 +262,52 @@ void TIM3_PWM_Init(u16 arr,u16 psc) void TIM3_IRQHandler(void) { } + +void TIM4_PWM_Init(u16 arr,u16 psc) +{ + GPIO_InitTypeDef GPIO_InitStructure; + TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; + TIM_OCInitTypeDef TIM_OCInitStructure; + + + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); ///使能TIM3时钟 + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE); + + GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_TIM3); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(GPIOD,&GPIO_InitStructure); + + GPIO_ResetBits(GPIOD, GPIO_Pin_15); + + TIM_TimeBaseInitStructure.TIM_Period = arr; //自动重装载值 + TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定时器分频 + TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式 + TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; + + TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);//初始化TIM3 + + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; + TIM_OCInitStructure.TIM_Pulse = 100; + + TIM_OC1Init(TIM4, &TIM_OCInitStructure); + + TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); + + TIM_ARRPreloadConfig(TIM4,ENABLE); + + //TIM_Cmd(TIM3, ENABLE); + +} + +//定时器3中断服务函数 +void TIM4_IRQHandler(void) +{ +} + diff --git a/OBJ/USART.axf b/OBJ/USART.axf index fc31afaba499ecc045e725253c83288b8dfb1a9c..b70baa6a5858d9df8c93179e6cc858fed673e76f 100644 GIT binary patch delta 35719 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 E52fONIsgCw delta 14737 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 diff --git a/OBJ/USART.build_log.htm b/OBJ/USART.build_log.htm index fe50764..a8a334d 100644 --- a/OBJ/USART.build_log.htm +++ b/OBJ/USART.build_log.htm @@ -27,11 +27,9 @@ Project File Date: 02/09/2026

Output:

*** Using Compiler 'V5.05 update 2 (build 169)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin' Build target 'USART' -compiling stm32f4xx_adc.c... -compiling stm32f4xx_spi.c... -compiling stm32f4xx_tim.c... +compiling timer.c... linking... -Program Size: Code=2844 RO-data=424 RW-data=32 ZI-data=1832 +Program Size: Code=5328 RO-data=424 RW-data=112 ZI-data=1632 FromELF: creating hex file... "..\OBJ\USART.axf" - 0 Error(s), 0 Warning(s). @@ -47,7 +45,7 @@ Package Vendor: Keil C:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include

Collection of Component Files used:

-Build Time Elapsed: 00:00:02 +Build Time Elapsed: 00:00:01 diff --git a/OBJ/USART.htm b/OBJ/USART.htm index c1fa90a..3c7a535 100644 --- a/OBJ/USART.htm +++ b/OBJ/USART.htm @@ -3,7 +3,7 @@ Static Call Graph - [..\OBJ\USART.axf]

Static Call Graph for image ..\OBJ\USART.axf


-

#<CALLGRAPH># ARM Linker, 5050169: Last Updated: Mon Feb 09 11:13:49 2026 +

#<CALLGRAPH># ARM Linker, 5050169: Last Updated: Mon Feb 09 17:26:42 2026

Maximum Stack Usage = 128 bytes + Unknown(Functions without stacksize, Cycles, Untraceable Function Pointers)

Call chain for Maximum Stack Depth:

@@ -101,7 +101,7 @@ Function Pointers
  • TIM1_UP_TIM10_IRQHandler from startup_stm32f40_41xxx.o(.text) referenced from startup_stm32f40_41xxx.o(RESET)
  • TIM2_IRQHandler from timer.o(i.TIM2_IRQHandler) referenced from startup_stm32f40_41xxx.o(RESET)
  • TIM3_IRQHandler from timer.o(i.TIM3_IRQHandler) referenced from startup_stm32f40_41xxx.o(RESET) -
  • TIM4_IRQHandler from startup_stm32f40_41xxx.o(.text) referenced from startup_stm32f40_41xxx.o(RESET) +
  • TIM4_IRQHandler from timer.o(i.TIM4_IRQHandler) referenced from startup_stm32f40_41xxx.o(RESET)
  • TIM5_IRQHandler from startup_stm32f40_41xxx.o(.text) referenced from startup_stm32f40_41xxx.o(RESET)
  • TIM6_DAC_IRQHandler from startup_stm32f40_41xxx.o(.text) referenced from startup_stm32f40_41xxx.o(RESET)
  • TIM7_IRQHandler from startup_stm32f40_41xxx.o(.text) referenced from startup_stm32f40_41xxx.o(RESET) @@ -138,9 +138,9 @@ Global Symbols

    [Calls]
    • >>   __rt_entry
    -

    __scatterload_rt2_thumb_only (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED) +

    __scatterload_rt2_thumb_only (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED) -

    __scatterload_null (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED) +

    __scatterload_null (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED)

    __scatterload_copy (Thumb, 26 bytes, Stack size unknown bytes, __scatter_copy.o(!!handler_copy), UNUSED)

    [Calls]

    • >>   __scatterload_copy @@ -148,7 +148,7 @@ Global Symbols
      [Called By]
      • >>   __scatterload_copy
      -

      __scatterload_zeroinit (Thumb, 28 bytes, Stack size unknown bytes, __scatter_zi.o(!!handler_zi), UNUSED) +

      __scatterload_zeroinit (Thumb, 28 bytes, Stack size unknown bytes, __scatter_zi.o(!!handler_zi), UNUSED)

      __rt_lib_init (Thumb, 0 bytes, Stack size unknown bytes, libinit.o(.ARM.Collect$$libinit$$00000000))

      [Called By]

      • >>   __rt_entry_li @@ -158,68 +158,68 @@ Global Symbols

        [Calls]
        • >>   _fp_init
        -

        __rt_lib_init_alloca_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002E)) +

        __rt_lib_init_alloca_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002E)) -

        __rt_lib_init_argv_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002C)) +

        __rt_lib_init_argv_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002C)) -

        __rt_lib_init_atexit_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001B)) +

        __rt_lib_init_atexit_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001B)) -

        __rt_lib_init_clock_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000021)) +

        __rt_lib_init_clock_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000021)) -

        __rt_lib_init_cpp_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000032)) +

        __rt_lib_init_cpp_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000032)) -

        __rt_lib_init_exceptions_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000030)) +

        __rt_lib_init_exceptions_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000030)) -

        __rt_lib_init_fp_trap_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001F)) +

        __rt_lib_init_fp_trap_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001F)) -

        __rt_lib_init_getenv_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000023)) +

        __rt_lib_init_getenv_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000023)) -

        __rt_lib_init_heap_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000A)) +

        __rt_lib_init_heap_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000A)) -

        __rt_lib_init_lc_collate_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000011)) +

        __rt_lib_init_lc_collate_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000011)) -

        __rt_lib_init_lc_ctype_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000013)) +

        __rt_lib_init_lc_ctype_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000013)) -

        __rt_lib_init_lc_monetary_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000015)) +

        __rt_lib_init_lc_monetary_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000015)) -

        __rt_lib_init_lc_numeric_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000017)) +

        __rt_lib_init_lc_numeric_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000017)) -

        __rt_lib_init_lc_time_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000019)) +

        __rt_lib_init_lc_time_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000019)) -

        __rt_lib_init_preinit_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000004)) +

        __rt_lib_init_preinit_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000004)) -

        __rt_lib_init_rand_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000E)) +

        __rt_lib_init_rand_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000E)) -

        __rt_lib_init_return (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000033)) +

        __rt_lib_init_return (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000033)) -

        __rt_lib_init_signal_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001D)) +

        __rt_lib_init_signal_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001D)) -

        __rt_lib_init_stdio_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000025)) +

        __rt_lib_init_stdio_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000025)) -

        __rt_lib_init_user_alloc_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000C)) +

        __rt_lib_init_user_alloc_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000C))

        __rt_lib_shutdown (Thumb, 0 bytes, Stack size unknown bytes, libshutdown.o(.ARM.Collect$$libshutdown$$00000000))

        [Called By]

        • >>   __rt_exit_ls
        -

        __rt_lib_shutdown_fp_trap_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000006)) +

        __rt_lib_shutdown_fp_trap_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000006)) -

        __rt_lib_shutdown_heap_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000E)) +

        __rt_lib_shutdown_heap_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000E)) -

        __rt_lib_shutdown_return (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F)) +

        __rt_lib_shutdown_return (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F)) -

        __rt_lib_shutdown_signal_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000009)) +

        __rt_lib_shutdown_signal_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000009)) -

        __rt_lib_shutdown_stdio_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000003)) +

        __rt_lib_shutdown_stdio_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000003)) -

        __rt_lib_shutdown_user_alloc_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000B)) +

        __rt_lib_shutdown_user_alloc_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000B))

        __rt_entry (Thumb, 0 bytes, Stack size unknown bytes, __rtentry.o(.ARM.Collect$$rtentry$$00000000))

        [Called By]

        • >>   __scatterload_rt2
        • >>   __main
        -

        __rt_entry_presh_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000002)) +

        __rt_entry_presh_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000002))

        __rt_entry_sh (Thumb, 0 bytes, Stack size unknown bytes, __rtentry4.o(.ARM.Collect$$rtentry$$00000004))

        [Stack]

        • Max Depth = 8 + Unknown Stack Size @@ -232,7 +232,7 @@ Global Symbols

          [Calls]
          • >>   __rt_lib_init
          -

          __rt_entry_postsh_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000009)) +

          __rt_entry_postsh_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000009))

          __rt_entry_main (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000D))

          [Stack]

          • Max Depth = 128 + Unknown Stack Size @@ -242,7 +242,7 @@ Global Symbols
          • >>   exit
          -

          __rt_entry_postli_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000C)) +

          __rt_entry_postli_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000C))

          __rt_exit (Thumb, 0 bytes, Stack size unknown bytes, rtexit.o(.ARM.Collect$$rtexit$$00000000))

          [Called By]

          • >>   exit @@ -252,7 +252,7 @@ Global Symbols

            [Calls]
            • >>   __rt_lib_shutdown
            -

            __rt_exit_prels_1 (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000002)) +

            __rt_exit_prels_1 (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000002))

            __rt_exit_exit (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000004))

            [Calls]

            • >>   _sys_exit @@ -460,9 +460,6 @@ Global Symbols

              TIM1_UP_TIM10_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f40_41xxx.o(.text))
              [Address Reference Count : 1]

              • startup_stm32f40_41xxx.o(RESET)
              -

              TIM4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f40_41xxx.o(.text)) -
              [Address Reference Count : 1]

              • startup_stm32f40_41xxx.o(RESET) -

              TIM5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f40_41xxx.o(.text))
              [Address Reference Count : 1]

              • startup_stm32f40_41xxx.o(RESET)
              @@ -491,7 +488,7 @@ Global Symbols

              [Called By]
              • >>   __user_setup_stackheap
              -

              __use_no_semihosting (Thumb, 2 bytes, Stack size 0 bytes, use_no_semi_2.o(.text), UNUSED) +

              __use_no_semihosting (Thumb, 2 bytes, Stack size 0 bytes, use_no_semi_2.o(.text), UNUSED)

              __2printf (Thumb, 20 bytes, Stack size 24 bytes, noretval__2printf.o(.text))

              [Stack]

              • Max Depth = 128
              • Call Chain = __2printf ⇒ _printf_char_file ⇒ _printf_char_common ⇒ __printf @@ -501,15 +498,15 @@ Global Symbols
                [Called By]
                • >>   main
                -

                __use_two_region_memory (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) +

                __use_two_region_memory (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) -

                __rt_heap_escrow$2region (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) +

                __rt_heap_escrow$2region (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) -

                __rt_heap_expand$2region (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) +

                __rt_heap_expand$2region (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) -

                __I$use$semihosting (Thumb, 0 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED) +

                __I$use$semihosting (Thumb, 0 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED) -

                __use_no_semihosting_swi (Thumb, 2 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED) +

                __use_no_semihosting_swi (Thumb, 2 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED)

                _printf_char_file (Thumb, 32 bytes, Stack size 16 bytes, _printf_char_file.o(.text))

                [Stack]

                • Max Depth = 104
                • Call Chain = _printf_char_file ⇒ _printf_char_common ⇒ __printf @@ -554,13 +551,13 @@ Global Symbols
                  [Called By]
                  • >>   __rt_entry_main
                  -

                  __user_libspace (Thumb, 8 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED) +

                  __user_libspace (Thumb, 8 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED)

                  __user_perproc_libspace (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text))

                  [Called By]

                  • >>   __user_setup_stackheap
                  -

                  __user_perthread_libspace (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED) +

                  __user_perthread_libspace (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED)

                  BusFault_Handler (Thumb, 4 bytes, Stack size 0 bytes, stm32f4xx_it.o(i.BusFault_Handler))
                  [Address Reference Count : 1]

                  • startup_stm32f40_41xxx.o(RESET) @@ -568,80 +565,135 @@ Global Symbols

                    DebugMon_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f4xx_it.o(i.DebugMon_Handler))
                    [Address Reference Count : 1]

                    • startup_stm32f40_41xxx.o(RESET)
                    -

                    GPIO_Init (Thumb, 144 bytes, Stack size 20 bytes, stm32f4xx_gpio.o(i.GPIO_Init)) +

                    GPIO_Init (Thumb, 144 bytes, Stack size 20 bytes, stm32f4xx_gpio.o(i.GPIO_Init))

                    [Stack]

                    • Max Depth = 20
                    • Call Chain = GPIO_Init
                    -
                    [Called By]
                    • >>   uart1_init -
                    • >>   LED_Init +
                      [Called By]
                      • >>   uart1_init +
                      • >>   motor_spi2_init +
                      • >>   motor_spi1_init +
                      • >>   gpio_Init +
                      • >>   TIM4_PWM_Init +
                      • >>   TIM2_PWM_Init +
                      • >>   TIM1_PWM_Init
                      -

                      GPIO_PinAFConfig (Thumb, 70 bytes, Stack size 20 bytes, stm32f4xx_gpio.o(i.GPIO_PinAFConfig)) +

                      GPIO_PinAFConfig (Thumb, 70 bytes, Stack size 20 bytes, stm32f4xx_gpio.o(i.GPIO_PinAFConfig))

                      [Stack]

                      • Max Depth = 20
                      • Call Chain = GPIO_PinAFConfig
                      -
                      [Called By]
                      • >>   uart1_init +
                        [Called By]
                        • >>   uart1_init +
                        • >>   motor_spi2_init +
                        • >>   motor_spi1_init +
                        • >>   TIM4_PWM_Init +
                        • >>   TIM2_PWM_Init +
                        • >>   TIM1_PWM_Init
                        -

                        GPIO_ResetBits (Thumb, 4 bytes, Stack size 0 bytes, stm32f4xx_gpio.o(i.GPIO_ResetBits)) -

                        [Called By]

                        • >>   TIM2_IRQHandler +

                          GPIO_ResetBits (Thumb, 4 bytes, Stack size 0 bytes, stm32f4xx_gpio.o(i.GPIO_ResetBits)) +

                          [Called By]

                          • >>   TIM4_PWM_Init +
                          • >>   TIM2_PWM_Init +
                          • >>   TIM1_PWM_Init +
                          • >>   TIM2_IRQHandler
                          -

                          GPIO_SetBits (Thumb, 4 bytes, Stack size 0 bytes, stm32f4xx_gpio.o(i.GPIO_SetBits)) +

                          GPIO_SetBits (Thumb, 4 bytes, Stack size 0 bytes, stm32f4xx_gpio.o(i.GPIO_SetBits))

                          [Called By]

                          • >>   TIM2_IRQHandler -
                          • >>   LED_Init

                          HardFault_Handler (Thumb, 4 bytes, Stack size 0 bytes, stm32f4xx_it.o(i.HardFault_Handler))
                          [Address Reference Count : 1]

                          • startup_stm32f40_41xxx.o(RESET)
                          -

                          LED_Init (Thumb, 60 bytes, Stack size 16 bytes, led.o(i.LED_Init)) -

                          [Stack]

                          • Max Depth = 36
                          • Call Chain = LED_Init ⇒ GPIO_Init -
                          -
                          [Calls]
                          • >>   RCC_AHB1PeriphClockCmd -
                          • >>   GPIO_SetBits -
                          • >>   GPIO_Init -
                          -
                          [Called By]
                          • >>   main -
                          -

                          MemManage_Handler (Thumb, 4 bytes, Stack size 0 bytes, stm32f4xx_it.o(i.MemManage_Handler))
                          [Address Reference Count : 1]

                          • startup_stm32f40_41xxx.o(RESET)

                          NMI_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f4xx_it.o(i.NMI_Handler))
                          [Address Reference Count : 1]

                          • startup_stm32f40_41xxx.o(RESET)
                          -

                          NVIC_Init (Thumb, 106 bytes, Stack size 16 bytes, misc.o(i.NVIC_Init)) +

                          NVIC_Init (Thumb, 106 bytes, Stack size 16 bytes, misc.o(i.NVIC_Init))

                          [Stack]

                          • Max Depth = 16
                          • Call Chain = NVIC_Init
                          -
                          [Called By]
                          • >>   uart1_init +
                            [Called By]
                            • >>   uart1_init
                            -

                            NVIC_PriorityGroupConfig (Thumb, 10 bytes, Stack size 0 bytes, misc.o(i.NVIC_PriorityGroupConfig)) +

                            NVIC_PriorityGroupConfig (Thumb, 10 bytes, Stack size 0 bytes, misc.o(i.NVIC_PriorityGroupConfig))

                            [Called By]

                            • >>   main

                            PendSV_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f4xx_it.o(i.PendSV_Handler))
                            [Address Reference Count : 1]

                            • startup_stm32f40_41xxx.o(RESET)
                            -

                            RCC_AHB1PeriphClockCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f4xx_rcc.o(i.RCC_AHB1PeriphClockCmd)) -

                            [Called By]

                            • >>   uart1_init -
                            • >>   LED_Init +

                              RCC_AHB1PeriphClockCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f4xx_rcc.o(i.RCC_AHB1PeriphClockCmd)) +

                              [Called By]

                              • >>   uart1_init +
                              • >>   motor_spi2_init +
                              • >>   motor_spi1_init +
                              • >>   gpio_Init +
                              • >>   TIM4_PWM_Init +
                              • >>   TIM2_PWM_Init +
                              • >>   TIM1_PWM_Init
                              -

                              RCC_APB2PeriphClockCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f4xx_rcc.o(i.RCC_APB2PeriphClockCmd)) -

                              [Called By]

                              • >>   uart1_init +

                                RCC_APB1PeriphClockCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f4xx_rcc.o(i.RCC_APB1PeriphClockCmd)) +

                                [Called By]

                                • >>   TIM4_PWM_Init +
                                • >>   TIM2_PWM_Init
                                -

                                RCC_GetClocksFreq (Thumb, 214 bytes, Stack size 20 bytes, stm32f4xx_rcc.o(i.RCC_GetClocksFreq)) +

                                RCC_APB2PeriphClockCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f4xx_rcc.o(i.RCC_APB2PeriphClockCmd)) +

                                [Called By]

                                • >>   uart1_init +
                                • >>   motor_spi2_init +
                                • >>   motor_spi1_init +
                                • >>   TIM1_PWM_Init +
                                + +

                                RCC_APB2PeriphResetCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f4xx_rcc.o(i.RCC_APB2PeriphResetCmd)) +

                                [Called By]

                                • >>   motor_spi2_init +
                                • >>   motor_spi1_init +
                                + +

                                RCC_GetClocksFreq (Thumb, 214 bytes, Stack size 20 bytes, stm32f4xx_rcc.o(i.RCC_GetClocksFreq))

                                [Stack]

                                • Max Depth = 20
                                • Call Chain = RCC_GetClocksFreq
                                -
                                [Called By]
                                • >>   USART_Init +
                                  [Called By]
                                  • >>   USART_Init +
                                  + +

                                  SPI1_ReadWriteByte (Thumb, 50 bytes, Stack size 8 bytes, spi.o(i.SPI1_ReadWriteByte)) +

                                  [Stack]

                                  • Max Depth = 8
                                  • Call Chain = SPI1_ReadWriteByte +
                                  +
                                  [Calls]
                                  • >>   SPI_I2S_SendData +
                                  • >>   SPI_I2S_ReceiveData +
                                  • >>   SPI_I2S_GetFlagStatus +
                                  +
                                  [Called By]
                                  • >>   motor_spi2_init +
                                  • >>   motor_spi1_init +
                                  + +

                                  SPI_Cmd (Thumb, 24 bytes, Stack size 0 bytes, stm32f4xx_spi.o(i.SPI_Cmd)) +

                                  [Called By]

                                  • >>   motor_spi2_init +
                                  • >>   motor_spi1_init +
                                  + +

                                  SPI_I2S_GetFlagStatus (Thumb, 18 bytes, Stack size 0 bytes, stm32f4xx_spi.o(i.SPI_I2S_GetFlagStatus)) +

                                  [Called By]

                                  • >>   SPI1_ReadWriteByte +
                                  + +

                                  SPI_I2S_ReceiveData (Thumb, 6 bytes, Stack size 0 bytes, stm32f4xx_spi.o(i.SPI_I2S_ReceiveData)) +

                                  [Called By]

                                  • >>   SPI1_ReadWriteByte +
                                  + +

                                  SPI_I2S_SendData (Thumb, 4 bytes, Stack size 0 bytes, stm32f4xx_spi.o(i.SPI_I2S_SendData)) +

                                  [Called By]

                                  • >>   SPI1_ReadWriteByte +
                                  + +

                                  SPI_Init (Thumb, 60 bytes, Stack size 8 bytes, stm32f4xx_spi.o(i.SPI_Init)) +

                                  [Stack]

                                  • Max Depth = 8
                                  • Call Chain = SPI_Init +
                                  +
                                  [Called By]
                                  • >>   motor_spi2_init +
                                  • >>   motor_spi1_init

                                  SVC_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f4xx_it.o(i.SVC_Handler))
                                  [Address Reference Count : 1]

                                  • startup_stm32f40_41xxx.o(RESET)
                                  -

                                  SysTick_CLKSourceConfig (Thumb, 40 bytes, Stack size 0 bytes, misc.o(i.SysTick_CLKSourceConfig)) -

                                  [Called By]

                                  • >>   delay_init +

                                    SysTick_CLKSourceConfig (Thumb, 40 bytes, Stack size 0 bytes, misc.o(i.SysTick_CLKSourceConfig)) +

                                    [Called By]

                                    • >>   delay_init

                                    SysTick_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f4xx_it.o(i.SysTick_Handler)) @@ -654,70 +706,200 @@ Global Symbols


                                  [Address Reference Count : 1]
                                  • startup_stm32f40_41xxx.o(.text)
                                  +

                                  TIM1_PWM_Init (Thumb, 156 bytes, Stack size 56 bytes, timer.o(i.TIM1_PWM_Init)) +

                                  [Stack]

                                  • Max Depth = 76
                                  • Call Chain = TIM1_PWM_Init ⇒ GPIO_Init +
                                  +
                                  [Calls]
                                  • >>   RCC_APB2PeriphClockCmd +
                                  • >>   RCC_AHB1PeriphClockCmd +
                                  • >>   GPIO_Init +
                                  • >>   GPIO_ResetBits +
                                  • >>   TIM_TimeBaseInit +
                                  • >>   TIM_OC1PreloadConfig +
                                  • >>   TIM_OC1Init +
                                  • >>   TIM_ARRPreloadConfig +
                                  • >>   GPIO_PinAFConfig +
                                  +
                                  [Called By]
                                  • >>   main +
                                  +

                                  TIM2_IRQHandler (Thumb, 80 bytes, Stack size 8 bytes, timer.o(i.TIM2_IRQHandler))

                                  [Stack]

                                  • Max Depth = 20
                                  • Call Chain = TIM2_IRQHandler ⇒ TIM_GetITStatus
                                  -
                                  [Calls]
                                  • >>   TIM_GetITStatus -
                                  • >>   TIM_ClearITPendingBit -
                                  • >>   GPIO_ResetBits -
                                  • >>   GPIO_SetBits +
                                    [Calls]
                                    • >>   GPIO_SetBits +
                                    • >>   GPIO_ResetBits +
                                    • >>   TIM_GetITStatus +
                                    • >>   TIM_ClearITPendingBit

                                    [Address Reference Count : 1]
                                    • startup_stm32f40_41xxx.o(RESET)
                                    +

                                    TIM2_PWM_Init (Thumb, 156 bytes, Stack size 56 bytes, timer.o(i.TIM2_PWM_Init)) +

                                    [Stack]

                                    • Max Depth = 76
                                    • Call Chain = TIM2_PWM_Init ⇒ GPIO_Init +
                                    +
                                    [Calls]
                                    • >>   RCC_AHB1PeriphClockCmd +
                                    • >>   GPIO_Init +
                                    • >>   GPIO_ResetBits +
                                    • >>   TIM_TimeBaseInit +
                                    • >>   TIM_OC1PreloadConfig +
                                    • >>   TIM_OC1Init +
                                    • >>   TIM_ARRPreloadConfig +
                                    • >>   RCC_APB1PeriphClockCmd +
                                    • >>   GPIO_PinAFConfig +
                                    +
                                    [Called By]
                                    • >>   main +
                                    +

                                    TIM3_IRQHandler (Thumb, 2 bytes, Stack size 0 bytes, timer.o(i.TIM3_IRQHandler))
                                    [Address Reference Count : 1]

                                    • startup_stm32f40_41xxx.o(RESET)
                                    -

                                    TIM_ClearITPendingBit (Thumb, 6 bytes, Stack size 0 bytes, stm32f4xx_tim.o(i.TIM_ClearITPendingBit)) +

                                    TIM4_IRQHandler (Thumb, 2 bytes, Stack size 0 bytes, timer.o(i.TIM4_IRQHandler)) +
                                    [Address Reference Count : 1]

                                    • startup_stm32f40_41xxx.o(RESET) +
                                    +

                                    TIM4_PWM_Init (Thumb, 156 bytes, Stack size 56 bytes, timer.o(i.TIM4_PWM_Init)) +

                                    [Stack]

                                    • Max Depth = 76
                                    • Call Chain = TIM4_PWM_Init ⇒ GPIO_Init +
                                    +
                                    [Calls]
                                    • >>   RCC_AHB1PeriphClockCmd +
                                    • >>   GPIO_Init +
                                    • >>   GPIO_ResetBits +
                                    • >>   TIM_TimeBaseInit +
                                    • >>   TIM_OC1PreloadConfig +
                                    • >>   TIM_OC1Init +
                                    • >>   TIM_ARRPreloadConfig +
                                    • >>   RCC_APB1PeriphClockCmd +
                                    • >>   GPIO_PinAFConfig +
                                    +
                                    [Called By]
                                    • >>   main +
                                    + +

                                    TIM_ARRPreloadConfig (Thumb, 24 bytes, Stack size 0 bytes, stm32f4xx_tim.o(i.TIM_ARRPreloadConfig)) +

                                    [Called By]

                                    • >>   TIM4_PWM_Init +
                                    • >>   TIM2_PWM_Init +
                                    • >>   TIM1_PWM_Init +
                                    + +

                                    TIM_ClearITPendingBit (Thumb, 6 bytes, Stack size 0 bytes, stm32f4xx_tim.o(i.TIM_ClearITPendingBit))

                                    [Called By]

                                    • >>   TIM2_IRQHandler
                                    -

                                    TIM_GetITStatus (Thumb, 34 bytes, Stack size 12 bytes, stm32f4xx_tim.o(i.TIM_GetITStatus)) +

                                    TIM_Cmd (Thumb, 24 bytes, Stack size 0 bytes, stm32f4xx_tim.o(i.TIM_Cmd)) +

                                    [Called By]

                                    • >>   main +
                                    + +

                                    TIM_GetITStatus (Thumb, 34 bytes, Stack size 12 bytes, stm32f4xx_tim.o(i.TIM_GetITStatus))

                                    [Stack]

                                    • Max Depth = 12
                                    • Call Chain = TIM_GetITStatus

                                    [Called By]
                                    • >>   TIM2_IRQHandler
                                    +

                                    TIM_OC1Init (Thumb, 114 bytes, Stack size 16 bytes, stm32f4xx_tim.o(i.TIM_OC1Init)) +

                                    [Stack]

                                    • Max Depth = 16
                                    • Call Chain = TIM_OC1Init +
                                    +
                                    [Called By]
                                    • >>   TIM4_PWM_Init +
                                    • >>   TIM2_PWM_Init +
                                    • >>   TIM1_PWM_Init +
                                    + +

                                    TIM_OC1PreloadConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f4xx_tim.o(i.TIM_OC1PreloadConfig)) +

                                    [Called By]

                                    • >>   TIM4_PWM_Init +
                                    • >>   TIM2_PWM_Init +
                                    • >>   TIM1_PWM_Init +
                                    + +

                                    TIM_TimeBaseInit (Thumb, 104 bytes, Stack size 0 bytes, stm32f4xx_tim.o(i.TIM_TimeBaseInit)) +

                                    [Called By]

                                    • >>   TIM4_PWM_Init +
                                    • >>   TIM2_PWM_Init +
                                    • >>   TIM1_PWM_Init +
                                    +

                                    UART4_IRQHandler (Thumb, 2 bytes, Stack size 0 bytes, usart.o(i.UART4_IRQHandler))
                                    [Address Reference Count : 1]

                                    • startup_stm32f40_41xxx.o(RESET)

                                    UART5_IRQHandler (Thumb, 2 bytes, Stack size 0 bytes, usart.o(i.UART5_IRQHandler))
                                    [Address Reference Count : 1]

                                    • startup_stm32f40_41xxx.o(RESET)
                                    -

                                    USART1_IRQHandler (Thumb, 2 bytes, Stack size 0 bytes, usart.o(i.USART1_IRQHandler)) +

                                    USART1_IRQHandler (Thumb, 144 bytes, Stack size 8 bytes, usart.o(i.USART1_IRQHandler)) +

                                    [Stack]

                                    • Max Depth = 24
                                    • Call Chain = USART1_IRQHandler ⇒ USART_GetITStatus +
                                    +
                                    [Calls]
                                    • >>   USART_ReceiveData +
                                    • >>   USART_GetITStatus +
                                    • >>   USART_ClearITPendingBit +

                                    [Address Reference Count : 1]
                                    • startup_stm32f40_41xxx.o(RESET)
                                    -

                                    USART2_IRQHandler (Thumb, 2 bytes, Stack size 0 bytes, usart.o(i.USART2_IRQHandler)) +

                                    USART2_IRQHandler (Thumb, 144 bytes, Stack size 8 bytes, usart.o(i.USART2_IRQHandler)) +

                                    [Stack]

                                    • Max Depth = 24
                                    • Call Chain = USART2_IRQHandler ⇒ USART_GetITStatus +
                                    +
                                    [Calls]
                                    • >>   USART_ReceiveData +
                                    • >>   USART_GetITStatus +
                                    • >>   USART_ClearITPendingBit +

                                    [Address Reference Count : 1]
                                    • startup_stm32f40_41xxx.o(RESET)
                                    -

                                    USART3_IRQHandler (Thumb, 2 bytes, Stack size 0 bytes, usart.o(i.USART3_IRQHandler)) +

                                    USART3_IRQHandler (Thumb, 144 bytes, Stack size 8 bytes, usart.o(i.USART3_IRQHandler)) +

                                    [Stack]

                                    • Max Depth = 24
                                    • Call Chain = USART3_IRQHandler ⇒ USART_GetITStatus +
                                    +
                                    [Calls]
                                    • >>   USART_ReceiveData +
                                    • >>   USART_GetITStatus +
                                    • >>   USART_ClearITPendingBit +

                                    [Address Reference Count : 1]
                                    • startup_stm32f40_41xxx.o(RESET)
                                    -

                                    USART6_IRQHandler (Thumb, 2 bytes, Stack size 0 bytes, usart.o(i.USART6_IRQHandler)) +

                                    USART6_IRQHandler (Thumb, 144 bytes, Stack size 8 bytes, usart.o(i.USART6_IRQHandler)) +

                                    [Stack]

                                    • Max Depth = 24
                                    • Call Chain = USART6_IRQHandler ⇒ USART_GetITStatus +
                                    +
                                    [Calls]
                                    • >>   USART_ReceiveData +
                                    • >>   USART_GetITStatus +
                                    • >>   USART_ClearITPendingBit +

                                    [Address Reference Count : 1]
                                    • startup_stm32f40_41xxx.o(RESET)
                                    -

                                    USART_Cmd (Thumb, 24 bytes, Stack size 0 bytes, stm32f4xx_usart.o(i.USART_Cmd)) -

                                    [Called By]

                                    • >>   uart1_init +

                                      USART_ClearITPendingBit (Thumb, 30 bytes, Stack size 8 bytes, stm32f4xx_usart.o(i.USART_ClearITPendingBit)) +

                                      [Stack]

                                      • Max Depth = 8
                                      • Call Chain = USART_ClearITPendingBit +
                                      +
                                      [Called By]
                                      • >>   USART6_IRQHandler +
                                      • >>   USART3_IRQHandler +
                                      • >>   USART2_IRQHandler +
                                      • >>   USART1_IRQHandler
                                      -

                                      USART_GetFlagStatus (Thumb, 26 bytes, Stack size 0 bytes, stm32f4xx_usart.o(i.USART_GetFlagStatus)) +

                                      USART_Cmd (Thumb, 24 bytes, Stack size 0 bytes, stm32f4xx_usart.o(i.USART_Cmd)) +

                                      [Called By]

                                      • >>   uart1_init +
                                      + +

                                      USART_GetFlagStatus (Thumb, 26 bytes, Stack size 0 bytes, stm32f4xx_usart.o(i.USART_GetFlagStatus))

                                      [Called By]

                                      • >>   main
                                      -

                                      USART_ITConfig (Thumb, 74 bytes, Stack size 20 bytes, stm32f4xx_usart.o(i.USART_ITConfig)) +

                                      USART_GetITStatus (Thumb, 84 bytes, Stack size 16 bytes, stm32f4xx_usart.o(i.USART_GetITStatus)) +

                                      [Stack]

                                      • Max Depth = 16
                                      • Call Chain = USART_GetITStatus +
                                      +
                                      [Called By]
                                      • >>   USART6_IRQHandler +
                                      • >>   USART3_IRQHandler +
                                      • >>   USART2_IRQHandler +
                                      • >>   USART1_IRQHandler +
                                      + +

                                      USART_ITConfig (Thumb, 74 bytes, Stack size 20 bytes, stm32f4xx_usart.o(i.USART_ITConfig))

                                      [Stack]

                                      • Max Depth = 20
                                      • Call Chain = USART_ITConfig
                                      -
                                      [Called By]
                                      • >>   uart1_init +
                                        [Called By]
                                        • >>   uart1_init
                                        -

                                        USART_Init (Thumb, 204 bytes, Stack size 48 bytes, stm32f4xx_usart.o(i.USART_Init)) +

                                        USART_Init (Thumb, 204 bytes, Stack size 48 bytes, stm32f4xx_usart.o(i.USART_Init))

                                        [Stack]

                                        • Max Depth = 68
                                        • Call Chain = USART_Init ⇒ RCC_GetClocksFreq
                                        -
                                        [Calls]
                                        • >>   RCC_GetClocksFreq +
                                          [Calls]
                                          • >>   RCC_GetClocksFreq
                                          -
                                          [Called By]
                                          • >>   uart1_init +
                                            [Called By]
                                            • >>   uart1_init
                                            -

                                            USART_SendData (Thumb, 8 bytes, Stack size 0 bytes, stm32f4xx_usart.o(i.USART_SendData)) +

                                            USART_ReceiveData (Thumb, 10 bytes, Stack size 0 bytes, stm32f4xx_usart.o(i.USART_ReceiveData)) +

                                            [Called By]

                                            • >>   USART6_IRQHandler +
                                            • >>   USART3_IRQHandler +
                                            • >>   USART2_IRQHandler +
                                            • >>   USART1_IRQHandler +
                                            + +

                                            USART_SendData (Thumb, 8 bytes, Stack size 0 bytes, stm32f4xx_usart.o(i.USART_SendData))

                                            [Called By]

                                            • >>   main
                                            @@ -728,55 +910,100 @@ Global Symbols

                                            [Called By]
                                            • >>   __rt_exit_exit
                                            -

                                            delay_init (Thumb, 52 bytes, Stack size 8 bytes, delay.o(i.delay_init)) +

                                            delay_init (Thumb, 52 bytes, Stack size 8 bytes, delay.o(i.delay_init))

                                            [Stack]

                                            • Max Depth = 8
                                            • Call Chain = delay_init
                                            -
                                            [Calls]
                                            • >>   SysTick_CLKSourceConfig +
                                              [Calls]
                                              • >>   SysTick_CLKSourceConfig

                                              [Called By]
                                              • >>   main
                                              -

                                              delay_ms (Thumb, 56 bytes, Stack size 16 bytes, delay.o(i.delay_ms)) +

                                              delay_ms (Thumb, 56 bytes, Stack size 16 bytes, delay.o(i.delay_ms))

                                              [Stack]

                                              • Max Depth = 16
                                              • Call Chain = delay_ms
                                              -
                                              [Calls]
                                              • >>   delay_xms +
                                                [Calls]
                                                • >>   delay_xms

                                                [Called By]
                                                • >>   main
                                                -

                                                delay_xms (Thumb, 72 bytes, Stack size 0 bytes, delay.o(i.delay_xms)) -

                                                [Called By]

                                                • >>   delay_ms +

                                                  delay_xms (Thumb, 72 bytes, Stack size 0 bytes, delay.o(i.delay_xms)) +

                                                  [Called By]

                                                  • >>   delay_ms
                                                  -

                                                  fputc (Thumb, 22 bytes, Stack size 0 bytes, usart.o(i.fputc)) +

                                                  fputc (Thumb, 24 bytes, Stack size 0 bytes, usart.o(i.fputc))
                                                  [Address Reference Count : 1]

                                                  • _printf_char_file.o(.text)
                                                  -

                                                  main (Thumb, 184 bytes, Stack size 0 bytes, main.o(i.main)) +

                                                  gpio_Init (Thumb, 200 bytes, Stack size 16 bytes, led.o(i.gpio_Init)) +

                                                  [Stack]

                                                  • Max Depth = 36
                                                  • Call Chain = gpio_Init ⇒ GPIO_Init +
                                                  +
                                                  [Calls]
                                                  • >>   RCC_AHB1PeriphClockCmd +
                                                  • >>   GPIO_Init +
                                                  +
                                                  [Called By]
                                                  • >>   main +
                                                  + +

                                                  main (Thumb, 242 bytes, Stack size 0 bytes, main.o(i.main))

                                                  [Stack]

                                                  • Max Depth = 128
                                                  • Call Chain = main ⇒ __2printf ⇒ _printf_char_file ⇒ _printf_char_common ⇒ __printf
                                                  -
                                                  [Calls]
                                                  • >>   uart1_init -
                                                  • >>   delay_ms -
                                                  • >>   delay_init -
                                                  • >>   USART_SendData -
                                                  • >>   USART_GetFlagStatus -
                                                  • >>   NVIC_PriorityGroupConfig -
                                                  • >>   LED_Init +
                                                    [Calls]
                                                    • >>   uart1_init +
                                                    • >>   motor_spi2_init +
                                                    • >>   motor_spi1_init +
                                                    • >>   gpio_Init +
                                                    • >>   delay_ms +
                                                    • >>   delay_init +
                                                    • >>   USART_SendData +
                                                    • >>   USART_GetFlagStatus +
                                                    • >>   TIM_Cmd +
                                                    • >>   TIM4_PWM_Init +
                                                    • >>   TIM2_PWM_Init +
                                                    • >>   TIM1_PWM_Init +
                                                    • >>   NVIC_PriorityGroupConfig
                                                    • >>   __2printf

                                                    [Called By]
                                                    • >>   __rt_entry_main
                                                    -

                                                    uart1_init (Thumb, 164 bytes, Stack size 40 bytes, usart.o(i.uart1_init)) +

                                                    motor_spi1_init (Thumb, 186 bytes, Stack size 32 bytes, spi.o(i.motor_spi1_init)) +

                                                    [Stack]

                                                    • Max Depth = 52
                                                    • Call Chain = motor_spi1_init ⇒ GPIO_Init +
                                                    +
                                                    [Calls]
                                                    • >>   RCC_APB2PeriphResetCmd +
                                                    • >>   RCC_APB2PeriphClockCmd +
                                                    • >>   RCC_AHB1PeriphClockCmd +
                                                    • >>   GPIO_Init +
                                                    • >>   SPI_Init +
                                                    • >>   SPI_Cmd +
                                                    • >>   SPI1_ReadWriteByte +
                                                    • >>   GPIO_PinAFConfig +
                                                    +
                                                    [Called By]
                                                    • >>   main +
                                                    + +

                                                    motor_spi2_init (Thumb, 232 bytes, Stack size 32 bytes, spi.o(i.motor_spi2_init)) +

                                                    [Stack]

                                                    • Max Depth = 52
                                                    • Call Chain = motor_spi2_init ⇒ GPIO_Init +
                                                    +
                                                    [Calls]
                                                    • >>   RCC_APB2PeriphResetCmd +
                                                    • >>   RCC_APB2PeriphClockCmd +
                                                    • >>   RCC_AHB1PeriphClockCmd +
                                                    • >>   GPIO_Init +
                                                    • >>   SPI_Init +
                                                    • >>   SPI_Cmd +
                                                    • >>   SPI1_ReadWriteByte +
                                                    • >>   GPIO_PinAFConfig +
                                                    +
                                                    [Called By]
                                                    • >>   main +
                                                    + +

                                                    uart1_init (Thumb, 164 bytes, Stack size 40 bytes, usart.o(i.uart1_init))

                                                    [Stack]

                                                    • Max Depth = 108
                                                    • Call Chain = uart1_init ⇒ USART_Init ⇒ RCC_GetClocksFreq
                                                    -
                                                    [Calls]
                                                    • >>   NVIC_Init -
                                                    • >>   GPIO_PinAFConfig -
                                                    • >>   RCC_APB2PeriphClockCmd -
                                                    • >>   RCC_AHB1PeriphClockCmd -
                                                    • >>   GPIO_Init -
                                                    • >>   USART_Init -
                                                    • >>   USART_ITConfig -
                                                    • >>   USART_Cmd +
                                                      [Calls]
                                                      • >>   RCC_APB2PeriphClockCmd +
                                                      • >>   RCC_AHB1PeriphClockCmd +
                                                      • >>   GPIO_Init +
                                                      • >>   USART_Init +
                                                      • >>   USART_ITConfig +
                                                      • >>   USART_Cmd +
                                                      • >>   NVIC_Init +
                                                      • >>   GPIO_PinAFConfig

                                                      [Called By]
                                                      • >>   main
                                                      @@ -785,9 +1012,9 @@ Global Symbols

                                                      [Called By]
                                                      • >>   __rt_lib_init_fp_1
                                                      -

                                                      __fplib_config_fpu_vfp (Thumb, 0 bytes, Stack size unknown bytes, fpinit.o(x$fpl$fpinit), UNUSED) +

                                                      __fplib_config_fpu_vfp (Thumb, 0 bytes, Stack size unknown bytes, fpinit.o(x$fpl$fpinit), UNUSED) -

                                                      __fplib_config_pureend_doubles (Thumb, 0 bytes, Stack size unknown bytes, fpinit.o(x$fpl$fpinit), UNUSED) +

                                                      __fplib_config_pureend_doubles (Thumb, 0 bytes, Stack size unknown bytes, fpinit.o(x$fpl$fpinit), UNUSED)

                                                      Local Symbols diff --git a/OBJ/USART_USART.dep b/OBJ/USART_USART.dep index 0227e3d..945bc6e 100644 --- a/OBJ/USART_USART.dep +++ b/OBJ/USART_USART.dep @@ -1,5 +1,5 @@ Dependencies for Project 'USART', Target 'USART': (DO NOT MODIFY !) -F (.\main.c)(0x6989375A)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\main.o --omf_browse ..\obj\main.crf --depend ..\obj\main.d) +F (.\main.c)(0x6989A803)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\main.o --omf_browse ..\obj\main.crf --depend ..\obj\main.d) I (..\SYSTEM\sys\sys.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) I (..\CORE\core_cm4.h)(0x69893236) @@ -36,12 +36,12 @@ I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) I (..\SYSTEM\delay\delay.h)(0x69893236) -I (..\SYSTEM\usart\usart.h)(0x69893742) +I (..\SYSTEM\usart\usart.h)(0x698981C6) I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x54C245B8) I (..\HARDWARE\LED\led.h)(0x69893236) I (..\HARDWARE\BEEP\beep.h)(0x69893236) I (..\HARDWARE\KEY\key.h)(0x69893236) -F (.\stm32f4xx_it.c)(0x69893236)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_it.o --omf_browse ..\obj\stm32f4xx_it.crf --depend ..\obj\stm32f4xx_it.d) +F (.\stm32f4xx_it.c)(0x69893236)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_it.o --omf_browse ..\obj\stm32f4xx_it.crf --depend ..\obj\stm32f4xx_it.d) I (stm32f4xx_it.h)(0x69893236) I (stm32f4xx.h)(0x69893236) I (..\CORE\core_cm4.h)(0x69893236) @@ -78,7 +78,7 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -F (.\system_stm32f4xx.c)(0x69893236)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\system_stm32f4xx.o --omf_browse ..\obj\system_stm32f4xx.crf --depend ..\obj\system_stm32f4xx.d) +F (.\system_stm32f4xx.c)(0x69893236)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\system_stm32f4xx.o --omf_browse ..\obj\system_stm32f4xx.crf --depend ..\obj\system_stm32f4xx.d) I (stm32f4xx.h)(0x69893236) I (..\CORE\core_cm4.h)(0x69893236) I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x54C245B8) @@ -114,7 +114,7 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -F (..\HARDWARE\LED\led.c)(0x69893236)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\led.o --omf_browse ..\obj\led.crf --depend ..\obj\led.d) +F (..\HARDWARE\LED\led.c)(0x6989A3D4)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\led.o --omf_browse ..\obj\led.crf --depend ..\obj\led.d) I (..\HARDWARE\LED\led.h)(0x69893236) I (..\SYSTEM\sys\sys.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) @@ -151,7 +151,7 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -F (..\HARDWARE\BEEP\beep.c)(0x69893236)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\beep.o --omf_browse ..\obj\beep.crf --depend ..\obj\beep.d) +F (..\HARDWARE\BEEP\beep.c)(0x69893236)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\beep.o --omf_browse ..\obj\beep.crf --depend ..\obj\beep.d) I (..\HARDWARE\BEEP\beep.h)(0x69893236) I (..\SYSTEM\sys\sys.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) @@ -188,7 +188,7 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -F (..\HARDWARE\KEY\key.c)(0x69893236)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\key.o --omf_browse ..\obj\key.crf --depend ..\obj\key.d) +F (..\HARDWARE\KEY\key.c)(0x69893236)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\key.o --omf_browse ..\obj\key.crf --depend ..\obj\key.d) I (..\HARDWARE\KEY\key.h)(0x69893236) I (..\SYSTEM\sys\sys.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) @@ -226,7 +226,7 @@ I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) I (..\SYSTEM\delay\delay.h)(0x69893236) -F (..\HARDWARE\ADC\adc.c)(0x5D6CE04A)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\adc.o --omf_browse ..\obj\adc.crf --depend ..\obj\adc.d) +F (..\HARDWARE\ADC\adc.c)(0x5D6CE04A)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\adc.o --omf_browse ..\obj\adc.crf --depend ..\obj\adc.d) I (..\HARDWARE\ADC\adc.h)(0x53BCE05A) I (..\SYSTEM\sys\sys.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) @@ -264,7 +264,7 @@ I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) I (..\SYSTEM\delay\delay.h)(0x69893236) -F (..\HARDWARE\elemachinery\elemachinery.c)(0x69894A89)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\elemachinery.o --omf_browse ..\obj\elemachinery.crf --depend ..\obj\elemachinery.d) +F (..\HARDWARE\elemachinery\elemachinery.c)(0x69894A89)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\elemachinery.o --omf_browse ..\obj\elemachinery.crf --depend ..\obj\elemachinery.d) I (..\HARDWARE\elemachinery\elemachinery.h)(0x69894E01) I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x54C245B8) I (..\SYSTEM\sys\sys.h)(0x69893236) @@ -301,7 +301,7 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -F (..\HARDWARE\TIMER\timer.c)(0x69894DBC)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\timer.o --omf_browse ..\obj\timer.crf --depend ..\obj\timer.d) +F (..\HARDWARE\TIMER\timer.c)(0x6989A84B)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\timer.o --omf_browse ..\obj\timer.crf --depend ..\obj\timer.d) I (..\HARDWARE\TIMER\timer.h)(0x5B67C8C3) I (..\SYSTEM\sys\sys.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) @@ -339,7 +339,7 @@ I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) I (..\HARDWARE\LED\led.h)(0x69893236) -F (..\HARDWARE\SPI\spi.c)(0x69894ACF)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\spi.o --omf_browse ..\obj\spi.crf --depend ..\obj\spi.d) +F (..\HARDWARE\SPI\spi.c)(0x698989CA)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\spi.o --omf_browse ..\obj\spi.crf --depend ..\obj\spi.d) I (..\HARDWARE\SPI\spi.h)(0x55E55127) I (..\SYSTEM\sys\sys.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) @@ -376,7 +376,7 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -F (..\SYSTEM\delay\delay.c)(0x69893236)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\delay.o --omf_browse ..\obj\delay.crf --depend ..\obj\delay.d) +F (..\SYSTEM\delay\delay.c)(0x69893236)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\delay.o --omf_browse ..\obj\delay.crf --depend ..\obj\delay.d) I (..\SYSTEM\delay\delay.h)(0x69893236) I (..\SYSTEM\sys\sys.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) @@ -413,7 +413,7 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -F (..\SYSTEM\sys\sys.c)(0x69893236)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\sys.o --omf_browse ..\obj\sys.crf --depend ..\obj\sys.d) +F (..\SYSTEM\sys\sys.c)(0x69893236)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\sys.o --omf_browse ..\obj\sys.crf --depend ..\obj\sys.d) I (..\SYSTEM\sys\sys.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) I (..\CORE\core_cm4.h)(0x69893236) @@ -449,7 +449,7 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -F (..\SYSTEM\usart\usart.c)(0x698937EA)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\usart.o --omf_browse ..\obj\usart.crf --depend ..\obj\usart.d) +F (..\SYSTEM\usart\usart.c)(0x6989938B)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\usart.o --omf_browse ..\obj\usart.crf --depend ..\obj\usart.d) I (..\SYSTEM\sys\sys.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) I (..\CORE\core_cm4.h)(0x69893236) @@ -485,10 +485,10 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -I (..\SYSTEM\usart\usart.h)(0x69893742) +I (..\SYSTEM\usart\usart.h)(0x698981C6) I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x54C245B8) F (..\CORE\startup_stm32f40_41xxx.s)(0x69893236)(--cpu Cortex-M4.fp -g --apcs=interwork -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include --pd "__UVISION_VERSION SETA 525" --pd "STM32F407xx SETA 1" --list ..\obj\startup_stm32f40_41xxx.lst --xref -o ..\obj\startup_stm32f40_41xxx.o --depend ..\obj\startup_stm32f40_41xxx.d) -F (..\FWLIB\src\misc.c)(0x69893236)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\misc.o --omf_browse ..\obj\misc.crf --depend ..\obj\misc.d) +F (..\FWLIB\src\misc.c)(0x69893236)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\misc.o --omf_browse ..\obj\misc.crf --depend ..\obj\misc.d) I (..\FWLIB\inc\misc.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) I (..\CORE\core_cm4.h)(0x69893236) @@ -523,7 +523,7 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -F (..\FWLIB\src\stm32f4xx_gpio.c)(0x69893236)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_gpio.o --omf_browse ..\obj\stm32f4xx_gpio.crf --depend ..\obj\stm32f4xx_gpio.d) +F (..\FWLIB\src\stm32f4xx_gpio.c)(0x69893236)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_gpio.o --omf_browse ..\obj\stm32f4xx_gpio.crf --depend ..\obj\stm32f4xx_gpio.d) I (..\FWLIB\inc\stm32f4xx_gpio.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) I (..\CORE\core_cm4.h)(0x69893236) @@ -558,7 +558,7 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -F (..\FWLIB\src\stm32f4xx_rcc.c)(0x69893236)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_rcc.o --omf_browse ..\obj\stm32f4xx_rcc.crf --depend ..\obj\stm32f4xx_rcc.d) +F (..\FWLIB\src\stm32f4xx_rcc.c)(0x69893236)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_rcc.o --omf_browse ..\obj\stm32f4xx_rcc.crf --depend ..\obj\stm32f4xx_rcc.d) I (..\FWLIB\inc\stm32f4xx_rcc.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) I (..\CORE\core_cm4.h)(0x69893236) @@ -593,7 +593,7 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -F (..\FWLIB\src\stm32f4xx_syscfg.c)(0x69893236)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_syscfg.o --omf_browse ..\obj\stm32f4xx_syscfg.crf --depend ..\obj\stm32f4xx_syscfg.d) +F (..\FWLIB\src\stm32f4xx_syscfg.c)(0x69893236)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_syscfg.o --omf_browse ..\obj\stm32f4xx_syscfg.crf --depend ..\obj\stm32f4xx_syscfg.d) I (..\FWLIB\inc\stm32f4xx_syscfg.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) I (..\CORE\core_cm4.h)(0x69893236) @@ -628,7 +628,7 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -F (..\FWLIB\src\stm32f4xx_usart.c)(0x69893236)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_usart.o --omf_browse ..\obj\stm32f4xx_usart.crf --depend ..\obj\stm32f4xx_usart.d) +F (..\FWLIB\src\stm32f4xx_usart.c)(0x69893236)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_usart.o --omf_browse ..\obj\stm32f4xx_usart.crf --depend ..\obj\stm32f4xx_usart.d) I (..\FWLIB\inc\stm32f4xx_usart.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) I (..\CORE\core_cm4.h)(0x69893236) @@ -663,7 +663,7 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -F (..\FWLIB\src\stm32f4xx_adc.c)(0x69893236)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_adc.o --omf_browse ..\obj\stm32f4xx_adc.crf --depend ..\obj\stm32f4xx_adc.d) +F (..\FWLIB\src\stm32f4xx_adc.c)(0x69893236)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_adc.o --omf_browse ..\obj\stm32f4xx_adc.crf --depend ..\obj\stm32f4xx_adc.d) I (..\FWLIB\inc\stm32f4xx_adc.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) I (..\CORE\core_cm4.h)(0x69893236) @@ -698,7 +698,7 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -F (..\FWLIB\src\stm32f4xx_tim.c)(0x69893236)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_tim.o --omf_browse ..\obj\stm32f4xx_tim.crf --depend ..\obj\stm32f4xx_tim.d) +F (..\FWLIB\src\stm32f4xx_tim.c)(0x69893236)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_tim.o --omf_browse ..\obj\stm32f4xx_tim.crf --depend ..\obj\stm32f4xx_tim.d) I (..\FWLIB\inc\stm32f4xx_tim.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) I (..\CORE\core_cm4.h)(0x69893236) @@ -733,7 +733,7 @@ I (..\FWLIB\inc\stm32f4xx_can.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dac.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_dcmi.h)(0x69893236) I (..\FWLIB\inc\stm32f4xx_fsmc.h)(0x69893236) -F (..\FWLIB\src\stm32f4xx_spi.c)(0x69893236)(-c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_spi.o --omf_browse ..\obj\stm32f4xx_spi.crf --depend ..\obj\stm32f4xx_spi.d) +F (..\FWLIB\src\stm32f4xx_spi.c)(0x69893236)(--c99 -c --cpu Cortex-M4.fp -g -W -O0 --apcs=interwork --split_sections -I ..\CORE -I ..\SYSTEM\delay -I ..\SYSTEM\sys -I ..\SYSTEM\usart -I ..\FWLIB\STM32F4xx_StdPeriph_Driver\inc -I ..\USER -I ..\HARDWARE\LED -I ..\HARDWARE\BEEP -I ..\HARDWARE\KEY -I ..\FWLIB\inc -I ..\HARDWARE -I.\RTE\_USART -IC:\Keil_v5\ARM\PACK\Keil\STM32F4xx_DFP\2.14.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F407xx -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER -o ..\obj\stm32f4xx_spi.o --omf_browse ..\obj\stm32f4xx_spi.crf --depend ..\obj\stm32f4xx_spi.d) I (..\FWLIB\inc\stm32f4xx_spi.h)(0x69893236) I (..\USER\stm32f4xx.h)(0x69893236) I (..\CORE\core_cm4.h)(0x69893236) diff --git a/OBJ/led.crf b/OBJ/led.crf index 6970b94df44bb23299eaafbb0d4f999955780c08..377ee29bae76936664a2be6b590457176e322d02 100644 GIT binary patch delta 1216 zcmaJ>U1(HC6h1Te?oBk=b(uBWY)s;q>Y?eHtP&FvnU=NLSW>NtCSfBKeF!3&yWFP%&)6$nxXnRe4N&081v6TK;@j?+56$Kw!BWi!_H`^_gf?fF7JLi1o zo4MyZa|<&ySHG;Oytsf!3gW3eUH`E1MQ`B`XC~)7!f)UHA@AUjCjbdJ!I0-}JKlOp zQM^7Ph!*Y~9p1IQ`_*~ac zCuu_PQeSWyXa%w*Y{0)ozb`fiw?1{}t5#>|@Za1<#8&|=z*^v0pbO{*dVwv#R$q(< zH@|g%YFoCHZkId0tGNnsTWjlVjpc*e9?X?RPRCPE(7uYIuGO@9Rtq}Ug9Fu()p4A4 zHtI}PXs$!tp4pz^KioBi*{33VLH#l6O#eSM8f9Fsf5?8{Tpqun`#WMR^#blSbt< zrw~}_i%elK;XNIX(R)VqYOX=F$rrVSLkZ95diubqZJL)L+6=S?_cr2?a^yp)wcIqQ|_{6APdOWPBz^GBpwGhex9Y7A~0S0}MDx?>C{ja5H+Nc9U zbG78O0IPjHGN5Qm1 zj^Q2-6LiL?V~G4S`iLHcFSAA+7kWLOzBcNF&^gqeHR>doY1HCUj06j+ymL;2ruUyw z7aRobRFT`;31*F|9LL|EnYX$#JK576++C%g9R{*LY=^q^g2hB42s$LI!KPY>`thJ)+0FuDfx+Fb)`t3xD5y)8a1=zV!( zHHzL_@hN@mwK2apVv)~P+&93B`gB5fR+;%4y(?xWYc_8pg$Tc6f!F9)66GMX%{+_c zw-G-2zx-4;HJgoWcZg&i{>y^SQixn}_-_k3kghuXj|J^WIfwf;%pvtU{JagXbY_S7 zhGT9Sb2cpF%s0&0@D*tVb2fZITE$!hP9m*gE&?a?&7|2^jtVlUTXC6+EDR~(s#+p!`DVaq{umsAuk~x$(t4Eno z@)}A5lcgw`RPs6n`HuTk&g09g_31Dk?75PC6b>OxDcMiqAW}ie0SawMFO(dlV6`Gn zD>+1=ML%-I40mjDe}ARfzdyuue_ZrP{G974cbdTxF5gJGGYmc=eNVYX1|N`qq}*8s pi%36H?n?&mb^A{7B!tcKE$*y=o5G8*u9JI2+o{lkfp?B<{R{2SyRHBL diff --git a/OBJ/main.crf b/OBJ/main.crf index 50bbe0d4aeb9f950f879a0333335245ec007ec06..113b701b2328209acbe4b49ac7337c3774ad84a7 100644 GIT binary patch delta 4891 zcmZu#33!yn8J_vGy9vqe=HMm;hbtr*4haE8rGg=t2qa+>*jek-ebQtT7DGZe8%#^f zF5m?!q1bk-f>ohnLBW8qksFa9cz~cByHKzYkV64QMOtj%nLUyad7k<5{@?q}cg*qa zJlwk2>$N9RjmJ6>qEW)1w-J4#af%_ndBN)+83_KJdcM-o6u;nL_%mTaM(k4=u@pnY zi1BB{>T*_3=t7DJp@bNx7LT)(*mDc)7D0HRYglcvhzF)ln2>8J&VM+Ubb&tUK7=!v zLgp4>2Tg+hWsSNe)C0DU9?ndYg}o$ya+W>6+UX|S0^P!TbFRx(fTx3`K5^mM zI>aY41IF;8wFu2gM$6AIugxI$!*%4dQ+Vsk$-QljoMde4Emjp_>8s1-;aM9k$a6JZ z(Vl2USECi3m)A62L*0>Gn}`6RTdJ$5swBJRS&Nef-QQF^)Km#y!=;3lbvLfz&?BH%h#M`nC-V`Oh z?QZAIQ$Hf&?nVc9*%5ayb#SLB>F&LD?&`B6-hSxdZDhpTi*3AlLQAeV>26nhcOxV2 zzVF~}RK(p2ZQO;tDN1_V+1}fzh_~+ortnqsWpB_Wc^26;H))98fJHW){7Kk}yBw$P z@*?p4J*PPJhk92k? z$K$lGV;G(0r2~<2+5p%i>doLUNFYwT62k`KE3F^2vYH{S32_oQu!q;1E{=+aLN zb|Z&P+79ScIniM2gFVS-CT(Y%Fwwoa9E>HOo3vdCtRQG4M@-uLVVBJyj+(SR2`mr9 zF_YE|LhkS`5XVic=8x3V!AA0}Njnn`_zZ~aChcqjGX|5%cP6a`L^O%7e5*$3uMJBi zi_MzX7%lh>OlmM|^Nj2eCM_{*^T9>4`M4Jm{~RYcOcg-YiI6CXiGHjHx z+`o6e;pm{dlgLw6+PlqSe;7<6Pg`l9HmZG4Ews`*+Nk#W4z4x~O-UjRR+`pEzu9MA zW7rG*>sC6UjedczWsPCs{YJ9UDlaYHhdfSVPc~WQ6`zJx@+-tIfoKBJWR)GEIG8}* zRfwa{-sfNSrs1Y;*bwrqb+SuN6f zGubcrDoLs?+bEIht*WcahPpIpAZtWgAJ!BcK;9H-s9SYq)sR&$R&7`{VA*>oA<4Id z@_T~P@xjhytx!$t2&McO#%Zbz33_75Iw3pUBozC$LVQ1F9|*>iMv)GbuCYE?>GdML zOPiIOhio>8^sda0Re49G%O_*)KR_d<3>4*Go4;@uA>-86O2jzLz#a@sZ&D7#|Bov6sFC#m9p8 zXZ&6$3cPd$B77qF0JaFs0l^0{J{rtKFI@@dpx|lD^CYNG1s}xt7*JDi8L>=<1W#x3 zS8fjM4hx>aya1mG&e0i)z zX$y=_30}tT0XQweXn-#yxI5U1{96KEL0^ONjNmiaFo3fX48`$m5!_S5_;MVH<1jua zIKJws7x=uwb#y*f<4c9-QCbV)g8FdL1t2ae{4AvvxDuBHcVTu6pG!GxF*N=pjp0jy z{|xM-^kEcoS@1f>>+o8LL8wd*j{R4H&tZHH9zrqOVez%VYlvZ94CWzbcXCDGX~Zz( z6Di~oUaw&ht_r+3*j3bWO(E1m`{L`H=of?4w}QVy*?FMr0*?UJf=>LM;44tK#|!+u z;46XW0{$RW7x+Ek4WXV!^?*ML^+1{pcvGlrUkmsjp_;`k!2b&Mc&Y}xCDa?O3h*bP zUTRLj{|WW5ss!}f)YI)O;5?g0b(t@K=iAh)>lEMun|jin1bp1aWd{lXK4DWYvSWZx z+SEhu2;fsT_1rrQ__R&E);;}Havb94`4F_SjqsF@_PXL<$m)iINz)gV9+xS7icaG`spJAlm{{bnVl#c)a delta 1468 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 diff --git a/OBJ/timer.crf b/OBJ/timer.crf index 04fc1ec3ae410e2c578fea8b37caebc7a198679b..c2e27d01c353476b78f35e09a1550eaba260cf69 100644 GIT binary patch delta 5021 zcmbVQ3v?7k7Ok%CX#>oRp@ER3VW=QlhL0V4))DT!*Ko((-$K7>i z#n0{@J`r7ek>&qOKoeb&;fVYLB7}&7h|{7di-N2I8h+~P-q#ZX8RI$b=A8HDRlVw} z_g=kvbt{MVWY0gG9X!~GF|IIq*kK!A2|lVf-o1B4mCo?@>GTr)=@MN5agZ7>(Y5Cn z2fL0L=G;EUp7g*}Hqq@?s$JEnHA`#NR$*!D-N|KIizZ7F?UEhA^=?U-)+%>*B9iQA zzTRm*!oGdX(0=rJ!PF_!il$DRQp^S>GFf^gpfHvWb=NWW9m8+CZ_?Na#Z%Y{H>*@@ zd(~D)yKl-A<|M+bV;F03bWDD@h>fgUYpcIjPGzFj8f~l7Y{*EvpKs}1-D1_r)$=d!pw$OmTr90R>H6$CbEmQmCaUUd$c-&I)OTax`XmTgF(YUw8R9^B+$d4X`okWf!B#` z1bf*lpoun7dmFJzV%v%BBK8@vFNvMbC;m0Dv&7C3J5TIC#GWT>=M!5DHpy#6(=MU* z3SujXl@fai>`45s4cfn3L|dYr8B^wa{a8sd7&+)6A3K1$g2u`K=(;ziG<7>Q3OuYKA{X3cjRHU1mCsJ3sWDB+ z+VIu|@M7>r;=@Z}LLe@WLwz61y)?|``|?hFSL47x(+5({=ERh}p2Z$-;%^qE7^PQA zz*8bxKU&-3bIri;pklixWT164b-z>hnlhNO*WX0!$eCdMtyE;)hF!K*4eUsTcLh5e zRLdKSzL3rZ)r!WVw->kD2VPR6{n*Zsx}u5j&n0|pFcnixOF3ZIA`N$jQe*Mceh^Z3K-)ly9Eulq3Ivp_maHbE9>JItN9Vc^bPk+~)=%$ey$m)ptp0%E z^^ZXZxH2oO{@6s^i6OJYYAh&HD#rzwQxaDH1V!!Py8Kw(hzXtvtB(goHKaLVb$U=# zc~`{Cy9Aah(e7+RSlx*)|A!qPfb}+p)wl3f1Hp+yyD6;hg0_L+oQ4gX!|Lv!7zt^M zTiP{n4v|WP)uZ?zB~le`X}6z5sw2Yi4I+i%^&_6xA={vPE$NOEn~MRf-SsVX3j-=FW3-SFbiYQrW5oWB0WY{(rryEMVrwj;xS;{F zJe|E}8RNy@Agr~Fhr|poi^VNtvXBCk#A&84h`oU69&rmZ^%2nww%IbCQiN>9acy&4 z#vJ!7ACKs4v5db!(VD{*4o^57;bWlKY8f-2h;UfQVIYTn+<{`7Wz2@64ToD`+(W$#%=IdpY6W1hPyOCN}J4p~Mu6qHNL-7B;8h<}w&z{Hx33O4ZEpumN>$%sbvs0GwV{({3@jT3N z+A?BXz-__ zx6En7Hsu>j3M#CuK{R86{9yxnu3IZ+j5rgmhWK^RGZ*SpYQom_&8R>hfX1Woo4e_w z0|UdA2`(_s1}4)fs^t-Zrtaie~Bp2;fnGWODti>oDJ7|lEjcw>8B#yilig193o zmSOoflOnBkG~WFt{XpAjCR=Qqy@b4m%RyXjK<1tTE#f@K%VbMz(-Km0na_cAxjYS8 z%y}kMOKr2akXLhQbNL3kPl6V59)W6^ZT1tgJ(q(yKrsj2`Au5 zHirmvdRjE5m`|j^jb@{pkiK# z{xaLVTgXlvxSIn~a{y&tfDc#M<~^ttE!b+?yjRFBT<(DK0;r7hJoLY4n_Y^8?92hy zIdC`!x`sk$FWKfe@n;C-w)vo#4xz#}CyB?rZtmVfT{LSB^H!6M9}$}cL+_8DDb%l4 zT4l2;+pIy>cZ9-!4ER8w@Vo1_AEi$h5tgvc3ZxD_JO+dOcZ2^XAgF)T-7rdTgHa#Z z<_3(yL&blN&_e_92cx&aLHDasdTv%WJ8GMIF{(5A{RfBtm?-7$4WsoNV9W{IJO(wr zZ7S(o|G`1;h-m!L(Rz)Ne({AEkp1GNe0ib$tAIy@P^eK9+CJq;d2H@qw}rj|tirxQl+R7u|%% z$jeC7uk+1kF|G{aH%YM+S5-|?^j|VQ=FLT?aKo_%(>C7nLb0I$IQN zEVTO^98?kYO9qt(I_Ojdb}CwLEVkdl(@>yzDX*dRUb1ycQC`K;2OM0{!Uqh54G0F% zjZc^R2}SFV$=`QSsp#uu(WL4~wXR0dIzfBTL3t250kA$Tp0v&4mkh|ba(qOg%AmW55gI89@oZU!H*o&OhHwc w>Ngc?D!Txn+Vu?Tj~!GhK}C}aB$Ya delta 2707 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//循环发送,直到发送完毕 - USART1->DR = (u8) ch; + while((UART4->SR&0X40)==0);//循环发送,直到发送完毕 + UART4->DR = (u8) ch; return ch; } #endif @@ -66,6 +66,58 @@ u8 USART_RX_BUF[USART_REC_LEN]; // //bit13~0, 接收到的有效字节数目 u16 USART_RX_STA=0; //接收状态标记 + + +/* 接收缓冲, 最大USART_REC_LEN个字节. */ +uint8_t g_usart1_rx_buf[USART_REC_LEN]; + +uint16_t g_usart1_rx_sta = 0; +uint16_t g_usart1_rx_state = 0; +uint16_t g_usart2_rx_state = 0; +uint16_t g_usart3_rx_state = 0; +uint16_t g_usart4_rx_state = 0; +uint16_t g_usart5_rx_state = 0; +uint16_t g_usart6_rx_state = 0; + + +uint8_t g_rx1_buffer[RXBUFFERSIZE]; /* HAL库使用的串口接收缓冲 */ +/* 接收缓冲, 最大USART_REC_LEN个字节. */ +uint8_t g_usart2_rx_buf[USART_REC_LEN]; + +uint16_t g_usart2_rx_sta = 0; + +uint8_t g_rx2_buffer[RXBUFFERSIZE]; /* HAL库使用的串口接收缓冲 */ +/* 接收缓冲, 最大USART_REC_LEN个字节. */ +uint8_t g_usart3_rx_buf[USART_REC_LEN]; + +uint16_t g_usart3_rx_sta = 0; + +uint8_t g_rx3_buffer[RXBUFFERSIZE]; /* HAL库使用的串口接收缓冲 */ +/* 接收缓冲, 最大USART_REC_LEN个字节. */ +uint8_t g_usart4_rx_buf[USART_REC_LEN]; + +uint16_t g_usart4_rx_sta = 0; + +uint8_t g_rx4_buffer[RXBUFFERSIZE]; /* HAL库使用的串口接收缓冲 */ +/* 接收缓冲, 最大USART_REC_LEN个字节. */ +uint8_t g_usart5_rx_buf[USART_REC_LEN]; + +uint16_t g_usart5_rx_sta = 0; + +uint8_t g_rx5_buffer[RXBUFFERSIZE]; /* HAL库使用的串口接收缓冲 */ + +/* 接收缓冲, 最大USART_REC_LEN个字节. */ +uint8_t g_usart6_rx_buf[USART_REC_LEN]; + +uint16_t g_usart6_rx_sta = 0; + +uint8_t g_rx6_buffer[RXBUFFERSIZE]; /* HAL库使用的串口接收缓冲 */ + + +char receive_buffer1[RXBUFFERSIZE]={0}; +char receive_buffer2[RXBUFFERSIZE]={0}; +char receive_buffer3[RXBUFFERSIZE]={0}; + //初始化IO 串口1 //bound:波特率 void uart1_init(u32 bound){ @@ -117,7 +169,36 @@ void uart1_init(u32 bound){ void USART1_IRQHandler(void) //串口1中断服务程序 { - u8 Res; + u8 uart1_data; + if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断 + { + USART_ClearITPendingBit(USART1, USART_IT_RXNE); + uart1_data =USART_ReceiveData(USART1); //读取接收到的数据 + g_rx1_buffer[0] = uart1_data; + //USART_ClearITPendingBit(USART1, USART_IT_RXNE); + if ( g_usart1_rx_sta == 0 && g_rx1_buffer[0] == 0xBB ) + { + g_usart1_rx_buf[0] = g_rx1_buffer[0]; + g_usart1_rx_sta = 1; + } + else if( g_usart1_rx_sta != 0 ) + { + g_usart1_rx_buf[g_usart1_rx_sta & 0X3FFF] = g_rx1_buffer[0]; + g_usart1_rx_sta++; + if(g_usart1_rx_sta > (USART_REC_LEN - 1)) + { + g_usart1_rx_sta = 0; + g_usart1_rx_state = 1; + // memset(g_usart1_rx_buf, 0x0, 6); + // g_rx1_buffer[0] = 0x0; + } + } + + } + else if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET) + { + USART_ClearITPendingBit(USART1, USART_IT_TXE); + } } @@ -129,14 +210,14 @@ void uart2_init(u32 bound){ NVIC_InitTypeDef NVIC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟 - RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟 + RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART1时钟 //串口1对应引脚复用映射 - GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9复用为USART1 - GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10复用为USART1 + GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); //GPIOA9复用为USART1 + GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2); //GPIOA10复用为USART1 //USART1端口配置 - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10 + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; //GPIOA9与GPIOA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出 @@ -157,7 +238,7 @@ void uart2_init(u32 bound){ //USART_ClearFlag(USART1, USART_FLAG_TC); - USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启相关中断 + USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启相关中断 //Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;//串口1中断通道 @@ -171,7 +252,36 @@ void uart2_init(u32 bound){ void USART2_IRQHandler(void) //串口1中断服务程序 { - u8 Res; + u8 uart1_data; + if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断 + { + USART_ClearITPendingBit(USART2, USART_IT_RXNE); + uart1_data =USART_ReceiveData(USART2); //读取接收到的数据 + g_rx2_buffer[0] = uart1_data; + //USART_ClearITPendingBit(USART1, USART_IT_RXNE); + if ( g_usart2_rx_sta == 0 && g_rx2_buffer[0] == 0xBB ) + { + g_usart2_rx_buf[0] = g_rx2_buffer[0]; + g_usart2_rx_sta = 1; + } + else if( g_usart2_rx_sta != 0 ) + { + g_usart2_rx_buf[g_usart2_rx_sta & 0X3FFF] = g_rx2_buffer[0]; + g_usart2_rx_sta++; + if(g_usart2_rx_sta > (USART_REC_LEN - 1)) + { + g_usart2_rx_sta = 0; + g_usart2_rx_state = 1; + // memset(g_usart1_rx_buf, 0x0, 6); + // g_rx1_buffer[0] = 0x0; + } + } + + } + else if(USART_GetITStatus(USART2, USART_IT_TXE) != RESET) + { + USART_ClearITPendingBit(USART2, USART_IT_TXE); + } } @@ -181,12 +291,12 @@ void uart3_init(u32 bound){ USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟 - RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟 + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE); //使能GPIOA时钟 + RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//使能USART1时钟 //串口1对应引脚复用映射 - GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9复用为USART1 - GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10复用为USART1 + GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_USART3); //GPIOA9复用为USART1 + GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART3); //GPIOA10复用为USART1 //USART1端口配置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10 @@ -194,7 +304,7 @@ void uart3_init(u32 bound){ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 - GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10 + GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化PA9,PA10 //USART1 初始化设置 USART_InitStructure.USART_BaudRate = bound;//波特率设置 @@ -210,7 +320,7 @@ void uart3_init(u32 bound){ //USART_ClearFlag(USART1, USART_FLAG_TC); - USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启相关中断 + USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启相关中断 //Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;//串口1中断通道 @@ -224,7 +334,36 @@ void uart3_init(u32 bound){ void USART3_IRQHandler(void) //串口1中断服务程序 { - u8 Res; + u8 uart1_data; + if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中断 + { + USART_ClearITPendingBit(USART3, USART_IT_RXNE); + uart1_data =USART_ReceiveData(USART3); //读取接收到的数据 + g_rx3_buffer[0] = uart1_data; + //USART_ClearITPendingBit(USART1, USART_IT_RXNE); + if ( g_usart3_rx_sta == 0 && g_rx3_buffer[0] == 0xBB ) + { + g_usart3_rx_buf[0] = g_rx3_buffer[0]; + g_usart3_rx_sta = 1; + } + else if( g_usart3_rx_sta != 0 ) + { + g_usart3_rx_buf[g_usart3_rx_sta & 0X3FFF] = g_rx3_buffer[0]; + g_usart3_rx_sta++; + if(g_usart3_rx_sta > (USART_REC_LEN - 1)) + { + g_usart3_rx_sta = 0; + g_usart3_rx_state = 1; + // memset(g_usart1_rx_buf, 0x0, 6); + // g_rx1_buffer[0] = 0x0; + } + } + + } + else if(USART_GetITStatus(USART3, USART_IT_TXE) != RESET) + { + USART_ClearITPendingBit(USART3, USART_IT_TXE); + } } @@ -235,14 +374,14 @@ void uart4_init(u32 bound){ NVIC_InitTypeDef NVIC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟 - RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟 + RCC_APB2PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE);//使能USART1时钟 //串口1对应引脚复用映射 - GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9复用为USART1 - GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10复用为USART1 + GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_USART1); //GPIOA9复用为USART1 + GPIO_PinAFConfig(GPIOA,GPIO_PinSource1,GPIO_AF_USART1); //GPIOA10复用为USART1 //USART1端口配置 - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10 + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; //GPIOA9与GPIOA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出 @@ -256,14 +395,14 @@ void uart4_init(u32 bound){ USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式 - USART_Init(USART1, &USART_InitStructure); //初始化串口1 + USART_Init(UART4, &USART_InitStructure); //初始化串口1 - USART_Cmd(USART1, ENABLE); //使能串口1 + USART_Cmd(UART4, ENABLE); //使能串口1 //USART_ClearFlag(USART1, USART_FLAG_TC); - USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启相关中断 + USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);//开启相关中断 //Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;//串口1中断通道 @@ -287,20 +426,30 @@ void uart5_init(u32 bound){ USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟 - RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟 + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE); //使能GPIOA时钟 + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE); //使能GPIOA时钟 + + RCC_APB2PeriphClockCmd(RCC_APB1Periph_UART5,ENABLE);//使能USART1时钟 //串口1对应引脚复用映射 - GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9复用为USART1 - GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10复用为USART1 + GPIO_PinAFConfig(GPIOC,GPIO_PinSource12,GPIO_AF_UART5); //GPIOA9复用为USART1 + GPIO_PinAFConfig(GPIOD,GPIO_PinSource2,GPIO_AF_UART5); //GPIOA10复用为USART1 //USART1端口配置 - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10 + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 ; //GPIOA9与GPIOA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 - GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10 + GPIO_Init(GPIOC,&GPIO_InitStructure); //初始化PA9,PA10 + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ; //GPIOA9与GPIOA10 + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能 + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz + //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出 + //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 + GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化PA9,PA10 + //USART1 初始化设置 USART_InitStructure.USART_BaudRate = bound;//波特率设置 @@ -309,14 +458,14 @@ void uart5_init(u32 bound){ USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式 - USART_Init(USART1, &USART_InitStructure); //初始化串口1 + USART_Init(UART5, &USART_InitStructure); //初始化串口1 - USART_Cmd(USART1, ENABLE); //使能串口1 + USART_Cmd(UART5, ENABLE); //使能串口1 //USART_ClearFlag(USART1, USART_FLAG_TC); - USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启相关中断 + USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);//开启相关中断 //Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;//串口1中断通道 @@ -340,20 +489,20 @@ void uart6_init(u32 bound){ USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟 - RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟 + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE); //使能GPIOA时钟 + RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6,ENABLE);//使能USART1时钟 //串口1对应引脚复用映射 - GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9复用为USART1 - GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10复用为USART1 + GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_USART1); //GPIOA9复用为USART1 + GPIO_PinAFConfig(GPIOC,GPIO_PinSource7,GPIO_AF_USART1); //GPIOA10复用为USART1 //USART1端口配置 - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10 + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; //GPIOA9与GPIOA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 - GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10 + GPIO_Init(GPIOC,&GPIO_InitStructure); //初始化PA9,PA10 //USART1 初始化设置 USART_InitStructure.USART_BaudRate = bound;//波特率设置 @@ -362,14 +511,14 @@ void uart6_init(u32 bound){ USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式 - USART_Init(USART1, &USART_InitStructure); //初始化串口1 + USART_Init(USART6, &USART_InitStructure); //初始化串口1 - USART_Cmd(USART1, ENABLE); //使能串口1 + USART_Cmd(USART6, ENABLE); //使能串口1 //USART_ClearFlag(USART1, USART_FLAG_TC); - USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启相关中断 + USART_ITConfig(USART6, USART_IT_RXNE, ENABLE);//开启相关中断 //Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART6_IRQn;//串口1中断通道 @@ -383,7 +532,36 @@ void uart6_init(u32 bound){ void USART6_IRQHandler(void) //串口1中断服务程序 { - u8 Res; + u8 uart1_data; + if(USART_GetITStatus(USART6, USART_IT_RXNE) != RESET) //接收中断 + { + USART_ClearITPendingBit(USART6, USART_IT_RXNE); + uart1_data =USART_ReceiveData(USART6); //读取接收到的数据 + g_rx6_buffer[0] = uart1_data; + //USART_ClearITPendingBit(USART1, USART_IT_RXNE); + if ( g_usart2_rx_sta == 0 && g_rx6_buffer[0] == 0xBB ) + { + g_usart6_rx_buf[0] = g_rx6_buffer[0]; + g_usart6_rx_sta = 1; + } + else if( g_usart6_rx_sta != 0 ) + { + g_usart6_rx_buf[g_usart6_rx_sta & 0X3FFF] = g_rx6_buffer[0]; + g_usart6_rx_sta++; + if(g_usart6_rx_sta > (USART_REC_LEN - 1)) + { + g_usart6_rx_sta = 0; + g_usart6_rx_state = 1; + // memset(g_usart1_rx_buf, 0x0, 6); + // g_rx1_buffer[0] = 0x0; + } + } + + } + else if(USART_GetITStatus(USART6, USART_IT_TXE) != RESET) + { + USART_ClearITPendingBit(USART6, USART_IT_TXE); + } } diff --git a/SYSTEM/usart/usart.h b/SYSTEM/usart/usart.h index fd45bc8..507e474 100644 --- a/SYSTEM/usart/usart.h +++ b/SYSTEM/usart/usart.h @@ -26,9 +26,10 @@ //3,增加了USART_REC_LEN,用于定义串口最大允许接收的字节数(不大于2的14次方) //4,修改了EN_USART1_RX的使能方式 ////////////////////////////////////////////////////////////////////////////////// -#define USART_REC_LEN 200 //定义最大接收字节数 200 -#define EN_USART1_RX 1 //使能(1)/禁止(0)串口1接收 - +#define USART_REC_LEN 6 /* 定义最大接收字节数 200 */ +#define USART_EN_RX 1 /* 使能(1)/禁止(0)串口1接收 */ +#define RXBUFFERSIZE 1 /* 缓存大小 */ + extern u8 USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符 extern u16 USART_RX_STA; //接收状态标记 //如果想串口中断接收,请不要注释以下宏定义 diff --git a/USER/USART.uvguix.cgy b/USER/USART.uvguix.cgy index d453340..48d6b19 100644 --- a/USER/USART.uvguix.cgy +++ b/USER/USART.uvguix.cgy @@ -100,8 +100,8 @@ 0 - 1038 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000008000000070000000100000060443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C48415244574152455C656C656D616368696E6572795C656C656D616368696E6572792E63000000000E656C656D616368696E6572792E6300000000C5D4F200FFFFFFFF4E443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C48415244574152455C4144435C6164632E6300000000056164632E6300000000FFDC7800FFFFFFFF52443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C48415244574152455C54494D45525C74696D65722E63000000000774696D65722E6300000000BECEA100FFFFFFFF4E443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C48415244574152455C5350495C7370692E6300000000057370692E6300000000F0A0A100FFFFFFFF4E443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C48415244574152455C5350495C7370692E6800000000057370692E6800000000BCA8E100FFFFFFFF60443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C48415244574152455C656C656D616368696E6572795C656C656D616368696E6572792E68000000000E656C656D616368696E6572792E68000000009CC1B600FFFFFFFF4E443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C48415244574152455C4144435C6164632E6800000000056164632E6800000000F7B88600FFFFFFFF4C443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C53595354454D5C7379735C7379732E6800000000057379732E6800000000D9ADC200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000004A010000660000008007000071020000 + 1356 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000B000000020000000100000060443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C48415244574152455C656C656D616368696E6572795C656C656D616368696E6572792E63000000000E656C656D616368696E6572792E6300000000C5D4F200FFFFFFFF4E443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C48415244574152455C4144435C6164632E6300000000056164632E6300000000FFDC7800FFFFFFFF52443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C48415244574152455C54494D45525C74696D65722E63000000000774696D65722E6300000000BECEA100FFFFFFFF4E443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C48415244574152455C5350495C7370692E6300000000057370692E6300000000F0A0A100FFFFFFFF4E443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C48415244574152455C5350495C7370692E6800000000057370692E6800000000BCA8E100FFFFFFFF60443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C48415244574152455C656C656D616368696E6572795C656C656D616368696E6572792E68000000000E656C656D616368696E6572792E68000000009CC1B600FFFFFFFF4E443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C48415244574152455C4144435C6164632E6800000000056164632E6800000000F7B88600FFFFFFFF4C443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C53595354454D5C7379735C7379732E6800000000057379732E6800000000D9ADC200FFFFFFFF50443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C53595354454D5C75736172745C75736172742E63000000000775736172742E6300000000A5C2D700FFFFFFFF47443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C555345525C6D61696E2E6300000000066D61696E2E6300000000B3A6BE00FFFFFFFF55443A5C666967687465727465616D5C70726F6A6563745C67755C6D616B655C636F64655C73656E736F725F323032365C73656E736F725F323032365C46574C49425C7372635C73746D3332663478785F7263632E63000000000F73746D3332663478785F7263632E6300000000EAD6A300FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000004A010000660000008007000071020000 @@ -1796,7 +1796,7 @@ File 2419 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000056874696D3296000000000000000D00056874696D321253797374656D436C6F636B5F436F6E6669670E55534152545F53656E64446174610564656C61790B67496D6167655F6D6F6E6F085350495F53454E440D5365745F4261636B6C6967687404766F69640E5365745F426C61636B6C696768740F4755495F436C65616E53637265656E084C43445F496E6974074C4344544553540E48414C5F4F50414D505F496E697400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65B9030000 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000056874696D3296000000000000000D00056874696D321253797374656D436C6F636B5F436F6E6669670E55534152545F53656E64446174610564656C61790B67496D6167655F6D6F6E6F085350495F53454E440D5365745F4261636B6C6967687404766F69640E5365745F426C61636B6C696768740F4755495F436C65616E53637265656E084C43445F496E6974074C4344544553540E48414C5F4F50414D505F496E697400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65B9030000 1423 @@ -1812,7 +1812,7 @@ Build 970 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000005555341525496000000000000000100055553415254000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000005555341525496000000000000000100055553415254000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -1852,7 +1852,7 @@ 0 100 - 7 + 2 ..\HARDWARE\elemachinery\elemachinery.c 28 @@ -1874,17 +1874,17 @@ ..\HARDWARE\TIMER\timer.c 0 - 44 - 45 + 184 + 211 1 0 ..\HARDWARE\SPI\spi.c - 0 + 14 1 - 1 + 13 1 0 @@ -1925,6 +1925,33 @@ 0 + + ..\SYSTEM\usart\usart.c + 15 + 111 + 137 + 1 + + 0 + + + .\main.c + 0 + 90 + 117 + 1 + + 0 + + + ..\FWLIB\src\stm32f4xx_rcc.c + 0 + 79 + 1 + 1 + + 0 + diff --git a/USER/USART.uvoptx b/USER/USART.uvoptx index 1de4792..1344bc4 100644 --- a/USER/USART.uvoptx +++ b/USER/USART.uvoptx @@ -338,7 +338,7 @@ 3 12 1 - 1 + 0 0 0 ..\SYSTEM\sys\sys.c diff --git a/USER/USART.uvprojx b/USER/USART.uvprojx index 4307ef4..8f75358 100644 --- a/USER/USART.uvprojx +++ b/USER/USART.uvprojx @@ -323,7 +323,7 @@ 1 0 0 - 0 + 1 0 0 1 diff --git a/USER/main.c b/USER/main.c index 78b771f..c3cd9be 100644 --- a/USER/main.c +++ b/USER/main.c @@ -13,6 +13,183 @@ //广州市星翼电子科技有限公司 //作者:正点原子 @ALIENTEK +void MX_TIM2_Init(void); +//void PWM_SetPulseWidth(uint16_t pulseWidth); +//void PWM_SetSpeed(int16_t speed); +void Error_Handler(void); + +typedef uint32_t u32; +typedef uint16_t u16; +typedef uint8_t u8; +// 定义TMC2240寄存器地址 +#define REG_MICROSTEPS 0x03 +#define REG_CURRENT 0x05 +#define EG_STATUS 0x0F + + +extern volatile u16 rx_len; // 接收计数 +extern volatile u8 rx_flag; // 接收完成标志 +#define GCONF 0x00 +#define IHOLD_IRUN 0x10 +#define TPOWERDOWN 0x11 +#define TPWMTHRS 0x13 +#define TCOOLTHRS 0x14 +#define CHOPCONF 0x6C +#define COOLCONF 0x6D +#define DRV_CONF 0x0A +#define DRV_STATUS 0x6F +#define PWMCONF 0x70 + +#define SOFT_SPI_DR_PORT GPIOD +#define SOFT_SPI_DR_PIN GPIO_Pin_3 +//forward and reverse +#define D3_DR_forward() GPIO_SetBits(SOFT_SPI_DR_PORT, SOFT_SPI_DR_PIN) +#define D3_DR_reverse() GPIO_ResetBits(SOFT_SPI_DR_PORT, SOFT_SPI_DR_PIN) + +void TMC2240_Init_rotating() { + // 启用电压补偿和PWM模式 + TMC2240_WriteReg(GCONF, 0x000000C4); + + // 电流设置:IHOLD=0.5A, IRUN=1.2A + TMC2240_WriteReg(IHOLD_IRUN, 0x00180C10); + + // 16微步(MRES=4),TOFF=3 + TMC2240_WriteReg(CHOPCONF, 0x030000C3); + // 设置速度阈值500Hz(低于此值切StealthChop2) + TMC2240_WriteReg(TPWMTHRS, 200); + // 驱动配置(根据需求调整) + TMC2240_WriteReg(DRV_CONF, 0x00000001); + + // 停机电流延时 + TMC2240_WriteReg(TPOWERDOWN, 10); +} + +void TMC2240_Init() { + // 启用StealthChop2自动调谐 + SpreadCycle动态切换 + TMC2240_WriteReg(GCONF, 0x000000C4 | (1 << 7)); // bit7=1 + + // 电流设置:IRUN=1.2A, IHOLD=0.8A(公式计算值) + //TMC2240_WriteReg(IHOLD_IRUN, 0x00190C10); + TMC2240_WriteReg(IHOLD_IRUN, 0x04090101); //可能运行电流太大,发热,这里调小试试 + // 降低微步分辨率(例如从256微步改为16微步) + TMC2240_WriteReg(CHOPCONF, 0x070080C3 ); // MRES=4(16微步) + + // 设置速度阈值500Hz(低于此值切StealthChop2) + TMC2240_WriteReg(TPWMTHRS, 50); + + // 其他配置保持不变 + TMC2240_WriteReg(DRV_CONF, 0x00000001); + + TMC2240_WriteReg(TPOWERDOWN, 10); +} +// 检查驱动器状态 +void CheckDriverStatus() { + uint32_t status = TMC2240_ReadReg(DRV_STATUS);// + if (status & (1 << 26)) { // 检查短路到地 + printf("Short to ground detected\n"); + } + if (status & (1 << 25)) { // 检查过温 + printf("Overtemperature detected\n"); + } + if (status & (1 << 24)) { // 检查失速 + printf("Motor stall detected\n"); + } +} + +void motor_steps(uint8_t num, uint8_t dir, uint16_t steps) +{ + GPIO_SetBits(GPIOD, GPIO_Pin_4); //TMS2240 - 2使能信号 + delay_us(steps); + GPIO_ResetBits(GPIOD, GPIO_Pin_4); //TMS2240 - 1使能信号 +} + +void motor_stop(uint8_t num) +{ +} + + +uint8_t crc8_calculate(const uint8_t *data, uint32_t length, uint8_t poly, uint8_t init_val, uint8_t ref_out) +{ + // 1. 初始化 CRC 寄存器 + uint8_t crc = init_val; + + // 2. 遍历每个字节 + for (uint32_t i = 0; i < length; i++) + { + // 3. 将当前字节与 CRC 寄存器异或(核心步骤) + crc ^= data[i]; + + // 4. 遍历当前字节的每一位(8 位) + for (uint8_t j = 0; j < 8; j++) + { + // 5. 判断最高位是否为 1,决定是否异或多项式 + if (crc & 0x80) + { + // 左移 1 位,再异或多项式(等价于多项式除法) + crc = (crc << 1) ^ poly; + } + else + { + // 最高位为 0,仅左移 1 位 + crc <<= 1; + } + } + } + + // 6. 输出反转(若需要) + if (ref_out) + { + // 按位反转 CRC 结果(如 0x12 → 0x48) + uint8_t reversed = 0; + for (uint8_t i = 0; i < 8; i++) + { + reversed |= ((crc >> i) & 0x01) << (7 - i); + } + crc = reversed; + } + + return crc; +} + +uint8_t crc8_standard(const uint8_t *data, uint32_t length) +{ + // 适配 CRC-8/MAXIM/ITU 标准:poly=0x07, init=0x00, ref_out=0 + return crc8_calculate(data, length, 0x07, 0x00, 0); +} + +uint32_t status ; +u8 flg=0; + +extern int flag_microswitch_left; // 光电开关left 限位 +extern int flag_microswitch_right; // 光电开关right 限位 + + +extern uint8_t g_usart1_rx_buf[USART_REC_LEN]; +extern uint16_t g_usart1_rx_sta; +extern uint16_t g_usart1_rx_state; + +extern uint8_t g_rx1_buffer[RXBUFFERSIZE]; /* HAL库使用的串口接收缓冲 */ +/* 接收缓冲, 最大USART_REC_LEN个字节. */ +extern uint8_t g_usart2_rx_buf[USART_REC_LEN]; +extern uint16_t g_usart2_rx_sta; +extern uint8_t g_rx2_buffer[RXBUFFERSIZE]; /* HAL库使用的串口接收缓冲 */ +/* 接收缓冲, 最大USART_REC_LEN个字节. */ +extern uint8_t g_usart3_rx_buf[USART_REC_LEN]; +extern uint16_t g_usart3_rx_sta; +extern uint8_t g_rx3_buffer[RXBUFFERSIZE]; /* HAL库使用的串口接收缓冲 */ +/* 接收缓冲, 最大USART_REC_LEN个字节. */ +extern uint8_t g_usart4_rx_buf[USART_REC_LEN]; +extern uint16_t g_usart4_rx_sta; +extern uint8_t g_rx4_buffer[RXBUFFERSIZE]; /* HAL库使用的串口接收缓冲 */ +/* 接收缓冲, 最大USART_REC_LEN个字节. */ +extern uint8_t g_usart5_rx_buf[USART_REC_LEN]; +extern uint16_t g_usart5_rx_sta; +extern uint8_t g_rx5_buffer[RXBUFFERSIZE]; /* HAL库使用的串口接收缓冲 */ +/* 接收缓冲, 最大USART_REC_LEN个字节. */ +extern uint8_t g_usart6_rx_buf[USART_REC_LEN]; +extern uint16_t g_usart6_rx_sta; +extern uint8_t g_rx6_buffer[RXBUFFERSIZE]; /* HAL库使用的串口接收缓冲 */ + int main(void) { @@ -23,7 +200,15 @@ int main(void) NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 delay_init(168); //延时初始化 uart1_init(115200); //串口初始化波特率为115200 - LED_Init(); //初始化与LED连接的硬件接口 + gpio_Init(); //初始化gpio + motor_spi1_init(); + motor_spi2_init(); + TIM1_PWM_Init(16, 32); + TIM2_PWM_Init(16, 32); + TIM4_PWM_Init(16, 32); + TIM_Cmd(TIM1, DISABLE); + TIM_Cmd(TIM2, DISABLE); + TIM_Cmd(TIM4, DISABLE); while(1) { if(USART_RX_STA&0x8000)