diff --git "a/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266.zip" "b/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266.zip" index 50ffa24..e783ccc 100644 Binary files "a/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266.zip" and "b/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266.zip" differ diff --git "a/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266/IAP\347\212\266\346\200\201\345\233\276.drawio" "b/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266/IAP\347\212\266\346\200\201\345\233\276.drawio" index cba8df4..8db4718 100644 --- "a/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266/IAP\347\212\266\346\200\201\345\233\276.drawio" +++ "b/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266/IAP\347\212\266\346\200\201\345\233\276.drawio" @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git "a/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266/IAP\347\212\266\346\200\201\345\233\276.png" "b/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266/IAP\347\212\266\346\200\201\345\233\276.png" index e305535..1ec3f67 100644 Binary files "a/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266/IAP\347\212\266\346\200\201\345\233\276.png" and "b/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266/IAP\347\212\266\346\200\201\345\233\276.png" differ diff --git "a/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266/IAP\347\212\266\346\200\201\345\233\276.svg" "b/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266/IAP\347\212\266\346\200\201\345\233\276.svg" index 175dfba..e6123d1 100644 --- "a/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266/IAP\347\212\266\346\200\201\345\233\276.svg" +++ "b/STM32F4DSP_HAL_IAP/\346\226\271\346\241\210\346\217\217\350\277\260\346\226\207\344\273\266/IAP\347\212\266\346\200\201\345\233\276.svg" @@ -1,3 +1,3 @@ -
不需要更新APP程序
不需要更新APP程序
检测是否要更新程序(可以是检测IO电平或者是通讯接口的一个命令等等)
检测是否要更新程序(可以是检测IO电平或者是通讯接口的一个命令等等)
选择串口方式
选择串口方式
选择VCP方式
选择VCP方式
选择Device MSC方式
选择Device MSC方式
在SRAM中运行
在SRAM中运行
在FLASH中运行
在FLASH中运行
选择SD卡方式
选择SD卡方式
选择HOST MSC方式
选择HOST MSC方式
在五种更新APP方式中选择一种?
是否在SRAM运行?
编程进MCU的FLASH?
编程进外部SPI FLASH?
是否在FLASH运行?
在五种更新APP方式中选择一种?...
检查
APP程序可能存在的位置(暂列以下四个位置):
(以下按照查找的优先级排列)
(对这四项是否存在APP程序做标志位记录)
  1. MCU内部预先规划给APP程序的FLASH区域,如果有则直接执行FLASH里的APP程序
  2. 外部SPI驱动的SPI FLASH是否存在,如果存在再用FATFS查看是否有预先规定的APP程序的.bin文件,如果有则读出APP程序到SRAM里面,在SRAM里面执行
  3. 外部SPI或者SDIO驱动的SD卡是否存在,如果有则步骤同上
  4. USB HOST是否外接了U盘,如果有则步骤同上
检查APP程序可能存在的位置(暂列以下四个位置):...
APP程序接收所通过通讯接口(暂列以下五个个位置):
  1. 串口1、2、3,通过预编译选择一个
  2. USB Device VCP 模拟串口
  3. USB Device MSC 把内部FLASH和外部SPI FLASH(如果有)和SD卡(如果有)模拟成U盘,当USB接入电脑后,拖拽固件
  4. 外部SPI或者SDIO驱动的SD卡
  5. USB HOST MSC外接的U盘
APP程序接收所通过通讯接口(暂列以下五个个位置):...
如果在1找到
如果在1找到
没有APP程序
没有APP程序
如果在2、3或者4找到
如果在2、3或者4找到
检查四个位置是否至少存在一处有APP程序,根据“检查”步骤的标志位
检查四个位置是否至少存在一处有APP程序,根据“检查”步骤的标志位
非法APP
非法APP
关闭IAP的中断和外设并反初始化
跳转进在FLASH运行的APP程序
关闭IAP的中断和外设并反初始化...
检查完毕
检查完毕
IAP上电运行,第一步“检查
IAP上电运行,第一步“检查”
接收到帧头
接收到帧头
超时
超时
等待接收预定的帧头
等待接收预定的帧头
接收到帧头
接收到帧头
初始化完毕
初始化完毕
初始化
USB Device VCP
初始化 USB Device VCP
初始化
USB Device MSC
初始化 USB Device MSC
接收到帧尾
接收到帧尾
超时
超时
接收数据存入缓冲区
接收数据存入缓冲区
接收到帧尾
接收到帧尾
超时
超时


接收数据存入缓冲区


接收数据存入缓冲区...
超时
超时
等待接收预定的帧头
等待接收预定的帧头
初始化完毕
初始化完毕
USB已经拔出
USB已经拔出
等待用户拔出USB
等待用户拔出USB
编程进MCU
编程进MCU
编程进SPI FLASH
编程进SPI FLASH
3、4这两个,仅限于用户手动地把APP程序的.bin文件存入SD卡或者U盘内,不提供对这两个编程
3、4这两个,仅限于用户手动地把APP程序的.bin文件存入SD卡或者U盘内,不提供对这两个编程
非法APP
非法APP
关闭IAP的中断和外设并反初始化
跳转进在SRAM运行的APP程序
关闭IAP的中断和外设并反初始化...
非法APP
非法APP
检查是不是FLASH运行的APP,编程进MCU的FLASH
检查是不是FLASH运行的APP,编程进MCU的FLASH
非法APP
非法APP
检查是不是SRAM运行的APP,编程进外部SPI FLASH
检查是不是SRAM运行的APP,编程进外部SPI FLASH
超时
超时
若外部SD卡存在,并且存在APP程序文件
若外部SD卡存在,并且存在APP程序文件
用FATFS读取APP程序文件存入缓冲区
用FATFS读取APP程序文件存入缓冲区
超时
超时
若外部U盘存在,并且存在APP程序文件
若外部U盘存在,并且存在APP程序文件
用FATFS读取APP程序文件存入缓冲区
用FATFS读取APP程序文件存入缓冲区
初始化
USB HOST MSC
初始化 USB HOST MSC
完成
完成
状态转移箭头带有方框的(举例如下),都是在转移后要反馈给用户的提示信息
状态转移箭头带有方框的(举例如下),都是在转移后要反馈给用户的提示信息
完成
完成
超时
超时
非法APP
非法APP
完成
完成
反初始化
USB Device MSC
反初始化 USB Device MSC
完成
完成
反初始化
USB HOST MSC
反初始化 USB HOST MSC
编程Tips:
  • 紫色框框——用户选择步骤,共有九个选择,可用模板的menu框架
  • 强烈推荐下面的状态图用模板的fsm状态机框架实现
  • 下面的更新方式中,USB HOST和USB Device应用预编译控制用哪一个,不能共存
编程Tips:...
Viewer does not support full SVG 1.1
\ No newline at end of file +
不需要更新APP程序
不需要更新APP程序
检测是否要更新程序(可以是检测IO电平或者是通讯接口的一个命令等等)
检测是否要更新程序(可以是检测IO电平或者是通讯接口的一个命令等等)
选择串口方式
选择串口方式
选择VCP方式
选择VCP方式
选择Device MSC方式
选择Device MSC方式
在SRAM中运行
在SRAM中运行
在FLASH中运行
在FLASH中运行
选择SD卡方式
选择SD卡方式
选择HOST MSC方式
选择HOST MSC方式
要修改启动优先级
要修改启动优先级
在五种更新APP方式中选择一种?
是否在SRAM运行?
编程进MCU的FLASH?
编程进外部SPI FLASH?
是否在FLASH运行?
是否要修改启动优先级?
在五种更新APP方式中选择一种?...
检查
APP程序可能存在的位置(暂列以下四个位置):
(下面四项的优先级,根据用户存在FLASH的记录)
  1. MCU内部预先规划给APP程序的FLASH区域,如果有则直接执行FLASH里的APP程序
  2. 外部SPI驱动的SPI FLASH是否存在,如果存在再用FATFS查看是否有预先规定的APP程序的.bin文件,如果有则读出APP程序到SRAM里面,在SRAM里面执行
  3. 外部SPI或者SDIO驱动的SD卡是否存在,如果有则步骤同上
  4. USB HOST是否外接了U盘,如果有则步骤同上
检查APP程序可能存在的位置(暂列以下四个位置):...
APP程序接收所通过通讯接口(暂列以下五个个位置):
  1. 串口1、2、3,通过预编译选择一个
  2. USB Device VCP 模拟串口
  3. USB Device MSC 把外部SPI FLASH(如果有)和SD卡(如果有)模拟成U盘,当USB接入电脑后,拖拽固件
  4. 外部SPI或者SDIO驱动的SD卡
  5. USB HOST MSC外接的U盘
APP程序接收所通过通讯接口(暂列以下五个个位置):...
如果在1找到
如果在1找到
没有APP程序
没有APP程序
如果在2、3或者4找到
如果在2、3或者4找到
根据“检查”步骤的标志位,检查四个位置是否至少存在一处有APP程序,并根据用户定义的优先级选择最高级的那个APP程序
根据“检查”步骤的标志位,检查四个位置是否至少存在一处有APP程序,并根据用户定义的优先级选择最高级的那个APP程序
非法APP
非法APP
检查APP头地址是否正确
关闭IAP所用到的所有中断和外设和IO口并反初始化,
跳转进在FLASH运行的APP程序
检查APP头地址是否正确...
检查完毕
检查完毕
执行“检查”,对存在APP程序固件的位置做标志位记录,对不存在的,关闭并反初始化其外设
执行“检查”,对存在APP程序固件的位置做标志位记录,对不存在的,关闭并反初始化其外设
接收到帧头
接收到帧头
超时
超时
等待接收预定的帧头
等待接收预定的帧头
接收到帧头
接收到帧头
初始化完毕
初始化完毕
初始化
USB Device VCP
初始化 USB Device VCP
初始化
USB Device MSC
初始化 USB Device MSC
超时
超时
接收到帧尾
接收到帧尾
接收数据存入缓冲区
接收数据存入缓冲区
超时
超时
接收到帧尾
接收到帧尾


接收数据存入缓冲区


接收数据存入缓冲区...
超时
超时
等待接收预定的帧头
等待接收预定的帧头
初始化完毕
初始化完毕
USB已经拔出
USB已经拔出
等待用户拖拽复制固件成功后,拔出USB
等待用户拖拽复制固件成功后,拔出USB
编程进MCU
编程进MCU
编程进SPI FLASH
编程进SPI FLASH
3、4这两个,仅限于用户手动地把APP程序的.bin文件存入SD卡或者U盘内,不提供对这两个编程
3、4这两个,仅限于用户手动地把APP程序的.bin文件存入SD卡或者U盘内,不提供对这两个编程
非法APP
非法APP
检查APP头地址是否正确
关闭IAP所用到的所有中断和外设和IO口并反初始化,
跳转进在SRAM运行的APP程序
检查APP头地址是否正确...
非法APP
非法APP
完成
完成
检查是不是FLASH运行的APP,编程进MCU的FLASH
检查是不是FLASH运行的APP,编程进MCU的FLASH
非法APP
非法APP
完成
完成
检查是不是SRAM运行的APP,编程进外部SPI FLASH
检查是不是SRAM运行的APP,编程进外部SPI FLASH
超时
超时
等待外部SD卡接入,并检查是否存在APP程序文件
等待外部SD卡接入,并检查是否存在APP程序文件
用FATFS读取APP程序文件存入缓冲区
用FATFS读取APP程序文件存入缓冲区
超时
超时
等待外部U盘接入,并检查是否存在APP程序文件
等待外部U盘接入,并检查是否存在APP程序文件
用FATFS读取APP程序文件存入缓冲区
用FATFS读取APP程序文件存入缓冲区
初始化
USB HOST MSC
初始化 USB HOST MSC
完成
完成
状态转移箭头带有方框的(举例如下),都是在转移后要反馈给用户的提示信息
状态转移箭头带有方框的(举例如下),都是在转移后要反馈给用户的提示信息
完成
完成
超时
超时
非法APP
非法APP
完成
完成
反初始化
USB Device MSC
反初始化 USB Device MSC
完成
完成
反初始化
USB HOST MSC
反初始化 USB HOST MSC
编程Tips:
  • 紫色框框——用户选择步骤,共有九个选择,可用模板的menu框架
  • 强烈推荐下面的状态图用模板的fsm状态机框架实现
  • 下面的更新方式中,USB HOST和USB Device应用预编译控制用哪一个,不能共存
编程Tips:...
完成
完成
用户修改启动位置的顺序,并存在FLSH靠后的一个字节做记录
用户修改启动位置的顺序,并存在FLSH靠后的一个字节做记录
反初始化SDIO
反初始化SDIO
初始化SDIO
初始化SDIO
初始化串口
初始化串口
完成
完成
反初始化串口
反初始化串口
完成
完成
反初始化
USB Device VCP
反初始化USB Device VCP...
上电初始化:
SPI FLASH
SDIO SD卡
USB HOST MSC U盘
上电初始化:SPI FLASH...
有点乱,抱歉
有点乱,抱歉
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/STM32F4DSP_HAL_freeRTOS_Framework/CONFIG/PeriphConfig.c b/STM32F4DSP_HAL_freeRTOS_Framework/CONFIG/PeriphConfig.c index 300510a..138b07b 100644 --- a/STM32F4DSP_HAL_freeRTOS_Framework/CONFIG/PeriphConfig.c +++ b/STM32F4DSP_HAL_freeRTOS_Framework/CONFIG/PeriphConfig.c @@ -254,43 +254,87 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) /*_________________________________________PeriphConfigCore.h_________________________________________________________*/ #if SYSTEM_CAN1_ENABLE -CAN_HandleTypeDef CAN1_Handler; +CAN_HandleTypeDef CAN1_Handler; + +//CANʼĬCAN1FIFO0 +//tsjw:ͬԾʱ䵥Ԫ.Χ:CAN_SJW_1tq~ CAN_SJW_4tq +//tbs2:ʱ2ʱ䵥Ԫ. Χ:CAN_BS2_1tq~CAN_BS2_8tq; +//tbs1:ʱ1ʱ䵥Ԫ. Χ:CAN_BS1_1tq ~CAN_BS1_16tq +//brp :ʷƵ.Χ:1~1024; tq=(brp)*tpclk1 +//=Fpclk1/((tbs1+1+tbs2+1+1)*brp); +//mode:CAN_Mode_Normal,ͨģʽ;CAN_Mode_LoopBack,ػģʽ; +//Fpclk1ʱڳʼʱΪ42M +// +// CAN1_Mode_Init(CAN_SJW_1TQ,CAN_BS1_6TQ,CAN_BS2_7TQ,6,CAN_MODE_NORMAL); //42M裬500Kbps +// CAN1_Mode_Init(CAN_SJW_1TQ,CAN_BS1_7TQ,CAN_BS2_8TQ,21,CAN_MODE_NORMAL); //42M裬125Kbps +void CAN1_Mode_Init(uint32_t tsjw, uint32_t tbs1, uint32_t tbs2, uint32_t brp, uint32_t mode) +{ + CAN_FilterTypeDef CAN_FilterInit_Handler; + + CAN1_Handler.Instance = CAN1; + CAN1_Handler.Init.Prescaler = brp; //ƵϵдǷƵƵAPB1 42MHZ + CAN1_Handler.Init.Mode = mode; //ģʽ -void sys_CAN1_Init(void) -{ + CAN1_Handler.Init.SyncJumpWidth = tsjw; //ͬԾ(Tsjw)Ϊtsjw+1ʱ䵥λ CAN_SJW_1TQ ~ CAN_SJW_4TQ + CAN1_Handler.Init.TimeSeg1 = tbs1; //CAN_BS1_1TQ ~ CAN_BS1_16TQ + CAN1_Handler.Init.TimeSeg2 = tbs2; //CAN_BS2_1TQ ~ CAN_BS2_8TQ - CAN1_Handler.Instance = CAN1; - CAN1_Handler.Init.Prescaler = 6; //1~1024ƵAPB1 42MHZ - CAN1_Handler.Init.Mode = CAN_MODE_NORMAL; //趯 - - //CANƵΪ42MhzʱƼƵϵ(brp+1)Ϊ6ηֱΪ1tq\7tq\6tqCAN1 500Kbps - CAN1_Handler.Init.SyncJumpWidth = CAN_SJW_1TQ; //CAN_SJW_1TQ ~ CAN_SJW_4TQ - CAN1_Handler.Init.TimeSeg1 = CAN_BS1_7TQ; //CAN_BS1_1TQ ~ CAN_BS1_16TQ - CAN1_Handler.Init.TimeSeg2 = CAN_BS2_6TQ; //CAN_BS2_1TQ ~ CAN_BS2_8TQ - - CAN1_Handler.Init.TimeTriggeredMode = DISABLE; //ʱ䴥ͨģʽ - CAN1_Handler.Init.AutoBusOff = DISABLE; //Զ߹ - CAN1_Handler.Init.AutoWakeUp = DISABLE; //˯ģʽͨ - CAN1_Handler.Init.AutoRetransmission = ENABLE; //Զͣö + CAN1_Handler.Init.TimeTriggeredMode = DISABLE; //ʱ䴥ͨģʽ 0=ʱ䴥ͨѶʹãĬ + CAN1_Handler.Init.AutoBusOff = DISABLE; //Զ߹ 0=߶Ͽ״̬󣬱Ĭ + CAN1_Handler.Init.AutoWakeUp = DISABLE; //˯ģʽͨ(CAN->MCRSLEEPλ)Ĭ + CAN1_Handler.Init.AutoRetransmission = ENABLE; //Զͣö //ENABLECAN hardware will automatically retransmit the message until it has been successfully transmitted according to the CAN standard. - CAN1_Handler.Init.ReceiveFifoLocked = DISABLE; //IJ,µĸǾɵ - CAN1_Handler.Init.TransmitFifoPriority = DISABLE;//ȼɱıʶ + CAN1_Handler.Init.ReceiveFifoLocked = DISABLE; //IJ,µĸǾɵ + CAN1_Handler.Init.TransmitFifoPriority = DISABLE; //ȼɱıʶ HAL_CAN_Init(&CAN1_Handler); - -} + + CAN_FilterInit_Handler.FilterBank = 0; //0 + /*For single CAN instance(14 dedicated filter banks), + this parameter must be a number between Min_Data = 0 and Max_Data = 13. + For dual CAN instances(28 filter banks shared), + this parameter must be a number between Min_Data = 0 and Max_Data = 27.*/ + CAN_FilterInit_Handler.FilterMode = CAN_FILTERMODE_IDMASK; //λģʽ + CAN_FilterInit_Handler.FilterScale = CAN_FILTERSCALE_32BIT; + CAN_FilterInit_Handler.FilterIdHigh = 0x0000; + CAN_FilterInit_Handler.FilterIdLow = 0x0000; + CAN_FilterInit_Handler.FilterMaskIdHigh = 0x0000; //32λMASK 0ʾضĽID߶ջɽպ趨 + CAN_FilterInit_Handler.FilterMaskIdLow = 0x0000; + CAN_FilterInit_Handler.FilterFIFOAssignment = CAN_FILTER_FIFO0; //0FIFO0 + CAN_FilterInit_Handler.FilterActivation = CAN_FILTER_ENABLE; //0 + + HAL_CAN_ConfigFilter(&CAN1_Handler, &CAN_FilterInit_Handler); //˲ʼ + + #if CAN1_RX0_INT_ENABLE + //FIFO 0 message pending Interrupt + HAL_CAN_ActivateNotification(&CAN1_Handler, CAN_IT_RX_FIFO0_MSG_PENDING); + //CAN1 RX0 Interrupt + HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 2, 0); + HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn); + #endif + + #if CAN1_TX_INT_ENABLE + //Transmit mailbox empty Interrupt + HAL_CAN_ActivateNotification(&CAN1_Handler, CAN_IT_TX_MAILBOX_EMPTY); + //CAN1 TX Interrupt + HAL_NVIC_SetPriority(CAN1_TX_IRQn, 2, 0); + HAL_NVIC_EnableIRQ(CAN1_TX_IRQn); + #endif + + //CAN1 + HAL_CAN_Start(&CAN1_Handler); -void CAN_Config(void); +} void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle) { GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(canHandle->Instance==CAN1) + if(canHandle->Instance == CAN1) { /* CAN1 clock enable */ __HAL_RCC_CAN1_CLK_ENABLE(); - + __HAL_RCC_GPIOB_CLK_ENABLE(); /**CAN1 GPIO Configuration PB8 ------> CAN1_RX @@ -309,16 +353,6 @@ void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle) GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF9_CAN1; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - #if CAN1_RX0_INT_ENABLE - /* CAN1 interrupt Init */ - HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 2, 0); //ĬʹFIFO0FIFO0ж - HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn); -// HAL_NVIC_SetPriority(CAN1_RX1_IRQn, 2, 0); //ĬϲFIFO1ж -// HAL_NVIC_EnableIRQ(CAN1_RX1_IRQn); - #endif - - CAN_Config(); } } @@ -333,7 +367,7 @@ void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle) HAL_CAN_IRQHandler(&CAN1_Handler); } - //Receive FIFO 0 message pending interrupt + //Receive FIFO 0 message pending interrupt callback void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) { if(hcan == (&CAN1_Handler)) @@ -342,97 +376,138 @@ void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle) HAL_CAN_GetRxMessage(&CAN1_Handler, CAN_RX_FIFO0, &CAN1_IT_RxMessage, CAN1_IT_Rxdata); } } - - #endif //void CAN1_RX1_IRQHandler(void) //{ // HAL_CAN_IRQHandler(&CAN1_Handler); //} + -void CAN_Config(void) -{ - CAN_FilterTypeDef sFilterConfig; - - /*CAN*/ - sFilterConfig.FilterBank = 0; //0 - sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; //λģʽ - sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; - sFilterConfig.FilterIdHigh = 0x0000; //32λID - sFilterConfig.FilterIdLow = 0x0000; - sFilterConfig.FilterMaskIdHigh = 0x0000; //32λMASK0ʾضĽID - sFilterConfig.FilterMaskIdLow = 0x0000; - sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;//0FIFO0 - sFilterConfig.FilterActivation = ENABLE; //˲0 - sFilterConfig.SlaveStartFilterBank = 14; - - // - HAL_CAN_ConfigFilter(&CAN1_Handler, &sFilterConfig); - - //CANΧ豸 - HAL_CAN_Start(&CAN1_Handler); +#if CAN1_TX_INT_ENABLE + CAN_TxHeaderTypeDef CAN1_IT_TxMessage; //CAN1жϷݵĽṹ + u8 CAN1_IT_TxMessage_flag; //CAN1ϱ־λ + u8 CAN1_IT_TxMessage_data[8]; //CAN1жϵ8λ + u32 CAN1_IT_TxMessage_id; //CAN1жϵid + + //Transmit mailbox empty Interrupt + void CAN1_TX_IRQHandler(void) + { + HAL_CAN_IRQHandler(&CAN1_Handler); + } + + //Transmission Mailbox 0 complete callback + void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) + { + if(hcan == (&CAN1_Handler)) + { + CAN1_IT_TxMessage_flag = 1; + //رշжϣȴһûֶ + HAL_CAN_DeactivateNotification(&CAN1_Handler,CAN_IT_TX_MAILBOX_EMPTY); + } + } + + //Transmission Mailbox 1 complete callback + void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan) + { + if(hcan == (&CAN1_Handler)) + { + CAN1_IT_TxMessage_flag = 1; + //رշжϣȴһûֶ + HAL_CAN_DeactivateNotification(&CAN1_Handler,CAN_IT_TX_MAILBOX_EMPTY); + } + } + + //Transmission Mailbox 2 complete callback + void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan) + { + if(hcan == (&CAN1_Handler)) + { + CAN1_IT_TxMessage_flag = 1; + //رշжϣȴһûֶ + HAL_CAN_DeactivateNotification(&CAN1_Handler,CAN_IT_TX_MAILBOX_EMPTY); + } + } + +#endif - #if CAN1_RX0_INT_ENABLE - //RX֪ͨʹж - HAL_CAN_ActivateNotification(&CAN1_Handler, CAN_IT_RX_FIFO0_MSG_PENDING); - #endif -} //ض֡IDϢ //care0ʾκIDգ1ʾֻFilterIdһµIDϢ +//FilterNumberҪõ˲ţIt ranges from 0 to 13 //frameType֡ͣ0Ϊ׼֡IDΪ11λ1Ϊչ֡IDΪ29λ -//FilterIdյID +//ExceptIdյID //ĬϢΪ֡ -void CAN1_setExceptId(u8 care,u8 frameType,u32 FilterId) +void CAN1_setExceptId(u8 care,u8 FilterNumber,u8 frameType,u32 ExceptId) { CAN_FilterTypeDef sFilterConfig; //ù if(care == 0) { - sFilterConfig.FilterBank = 0; //0 - sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; //λģʽ + sFilterConfig.FilterBank = FilterNumber; // + sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; //λģʽ sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; - sFilterConfig.FilterIdHigh = 0x0000; //32λID + sFilterConfig.FilterIdHigh = 0x0000; //32λID sFilterConfig.FilterIdLow = 0x0000; - sFilterConfig.FilterMaskIdHigh = 0x0000; //32λMASK0ʾضĽID + sFilterConfig.FilterMaskIdHigh = 0x0000; //32λMASK0ʾضĽID sFilterConfig.FilterMaskIdLow = 0x0000; - sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;//0FIFO0 - sFilterConfig.FilterActivation = ENABLE; //˲0 - sFilterConfig.SlaveStartFilterBank = 14; + sFilterConfig.FilterFIFOAssignment = CAN_FILTER_FIFO0; //0FIFO0 + sFilterConfig.FilterActivation = CAN_FILTER_ENABLE; //˲0 HAL_CAN_ConfigFilter(&CAN1_Handler, &sFilterConfig); + }else { if(frameType == CAN_ID_STD) //ֻܱ׼֡ { - sFilterConfig.FilterBank=0; + sFilterConfig.FilterBank=FilterNumber; sFilterConfig.FilterMode=CAN_FILTERMODE_IDMASK; sFilterConfig.FilterScale=CAN_FILTERSCALE_32BIT; - sFilterConfig.FilterIdHigh = ((FilterId << 21) & 0xffff0000) >> 16; - sFilterConfig.FilterIdLow = ((FilterId << 21) | CAN_ID_STD | CAN_RTR_DATA) & 0xffff; + sFilterConfig.FilterIdHigh = ((ExceptId << 21) & 0xffff0000) >> 16; + sFilterConfig.FilterIdLow = ((ExceptId << 21) | CAN_ID_STD | CAN_RTR_DATA) & 0xffff; sFilterConfig.FilterMaskIdHigh = 0xFFFF; sFilterConfig.FilterMaskIdLow = 0xFFFF; - sFilterConfig.FilterFIFOAssignment=CAN_RX_FIFO0; - sFilterConfig.FilterActivation=ENABLE; + sFilterConfig.FilterFIFOAssignment=CAN_FILTER_FIFO0; + sFilterConfig.FilterActivation=CAN_FILTER_ENABLE; HAL_CAN_ConfigFilter(&CAN1_Handler, &sFilterConfig); }else //ֻչ֡ { - sFilterConfig.FilterBank=0; + sFilterConfig.FilterBank=FilterNumber; sFilterConfig.FilterMode=CAN_FILTERMODE_IDMASK; sFilterConfig.FilterScale=CAN_FILTERSCALE_32BIT; - sFilterConfig.FilterIdHigh = ((FilterId << 3) & 0xffff0000) >> 16; - sFilterConfig.FilterIdLow = ((FilterId << 3) | CAN_ID_EXT | CAN_RTR_DATA) & 0xffff; + sFilterConfig.FilterIdHigh = ((ExceptId << 3) & 0xffff0000) >> 16; + sFilterConfig.FilterIdLow = ((ExceptId << 3) | CAN_ID_EXT | CAN_RTR_DATA) & 0xffff; sFilterConfig.FilterMaskIdHigh = 0xFFFF; sFilterConfig.FilterMaskIdLow = 0xFFFF; - sFilterConfig.FilterFIFOAssignment=CAN_RX_FIFO0; - sFilterConfig.FilterActivation=ENABLE; + sFilterConfig.FilterFIFOAssignment=CAN_FILTER_FIFO0; + sFilterConfig.FilterActivation=CAN_FILTER_ENABLE; HAL_CAN_ConfigFilter(&CAN1_Handler, &sFilterConfig); } - } } +/* + *TxMessageݣ +أ0ȷ +*/ +u8 CAN1_Set_Msg(CAN_TxHeaderTypeDef* TxMessage,u8 len,u8 frameType,u32 id) +{ + if((len <= 0) || (len > 8) || (TxMessage == NULL))return 1; + + if(frameType == CAN_ID_STD) + { + TxMessage->IDE=CAN_ID_STD; // ʹñ׼ʶ + TxMessage->StdId = id; // ñ׼ʶ 11λ + }else{ + TxMessage->IDE=CAN_ID_EXT; // ʹչʶ + TxMessage->ExtId = id; // չʾ 29λ + } + + TxMessage->RTR=CAN_RTR_DATA; // ϢΪ֡ ֡ң֡CAN_RTR_Data CAN_RTR_Remote + TxMessage->DLC=len; // ͼֽϢ Сڵ8 + + return 0; +} -//canһ +//жģʽcanһ //msg:ָ,Ϊ8ֽ //len:ݳ(Ϊ8) //frameType:֡ͣ0Ϊ׼֡IDΪ11λ1Ϊչ֡IDΪ29λ @@ -447,7 +522,7 @@ u8 CAN1_Send_Msg(u8* msg,u8 len,u8 frameType,u32 id) CAN_TxHeaderTypeDef TxHeader; //ݽṹ u32 TxMailbox; - if((msg == NULL) || (len == 0) || (len > 8)) return HAL_ERROR; + if((msg == NULL) || (len <= 0) || (len > 8)) return HAL_ERROR; if(frameType == CAN_ID_STD) { @@ -470,44 +545,48 @@ u8 CAN1_Send_Msg(u8* msg,u8 len,u8 frameType,u32 id) return HAL_ERROR; } i = 0; - while((HAL_CAN_GetTxMailboxesFreeLevel(&CAN1_Handler) != 3)&&(i < 0xffff)) {i++;} + + //Check if a transmission request is pending on the selected Tx Mailboxes + while( ( HAL_CAN_IsTxMessagePending(&CAN1_Handler, TxMailbox) ) && ( i < 0xfff ) ) {i++;} + if(i >= 0xfff) return HAL_TIMEOUT; return HAL_OK; } -//canڽݲѯʹжϷʽʱʹ -//buf:ݻ,Ϊ8ֽ -//len:ݳ(Ϊ8) +//жģʽcanڽݲѯ +//buf:ݻ; +//lenݳȣֽ8ڣ //frameType:֡ͣ0Ϊ׼֡IDΪ11λ1Ϊչ֡IDΪ29λ //id:IDʶframeTypeΪ0Ϊ׼ʶframeTypeΪΪչʶ //ֵ:0,ݱյ; -// ,ûнյ; -u8 CAN1_Receive_Msg(u8* buf,u8* len,u8* frameType,u32* id) +// ,ݽյ; +u8 CAN1_Receive_Msg(u8* buf,u8* len, u8* frameType,u32* id) { CAN_RxHeaderTypeDef RxHeader; u8 i; - u8 RxData[8]; + u8 RxData[8]; + //Return Number of messages available in Rx FIFO if(HAL_CAN_GetRxFifoFillLevel(&CAN1_Handler, CAN_RX_FIFO0) == 0) //ûнյ,ֱ˳ { return HAL_ERROR; } - + if(HAL_CAN_GetRxMessage(&CAN1_Handler, CAN_RX_FIFO0, &RxHeader, RxData) != HAL_OK) { return HAL_ERROR; } - for(i=0;iCTRL|=SysTick_CTRL_TICKINT_Msk; //开启SYSTICK中断 +// SysTick->LOAD=reload; //每1/configTICK_RATE_HZ秒中断一次 +// SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开启SYSTICK +// +// HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); +// HAL_NVIC_EnableIRQ(SysTick_IRQn); +// #else +// HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);//SysTick频率为HCLK +// +// HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); +// HAL_NVIC_EnableIRQ(SysTick_IRQn); +// #endif + + /*systick 统一设置成1ms中断*/ u32 reload; HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);//SysTick频率为HCLK - reload=SystemCoreClock/1000000; //每秒钟的计数次数 单位为M - reload*=1000000/configTICK_RATE_HZ; //根据configTICK_RATE_HZ设定溢出时间 + reload = SystemCoreClock/1000000; //每秒钟的计数次数 单位为M + reload *= (1000000/1000); //设定溢出时间,1KHz SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; //开启SYSTICK中断 - SysTick->LOAD=reload; //每1/configTICK_RATE_HZ秒中断一次 + SysTick->LOAD=reload; //每1/1000秒中断一次 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开启SYSTICK - HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(SysTick_IRQn); - #else - HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);//SysTick频率为HCLK - - HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); + HAL_NVIC_SetPriority(SysTick_IRQn, 1, 0); HAL_NVIC_EnableIRQ(SysTick_IRQn); - #endif return HAL_OK; } diff --git a/STM32F4DSP_HAL_freeRTOS_Framework/CONFIG/PeriphConfigCore.h b/STM32F4DSP_HAL_freeRTOS_Framework/CONFIG/PeriphConfigCore.h index 8ca33af..7721e5f 100644 --- a/STM32F4DSP_HAL_freeRTOS_Framework/CONFIG/PeriphConfigCore.h +++ b/STM32F4DSP_HAL_freeRTOS_Framework/CONFIG/PeriphConfigCore.h @@ -157,9 +157,10 @@ unsigned int Curl_rand(void); /*提供实现伪随机数的函数*/ /*默认均为:8位数据,1位停止,无校验,收发模式,开启接受中断*/ /*注:串口2、3的接收回调函数没有补全,用时再补,和串口1的同理*/ -#define SYSTEM_CAN1_ENABLE 0 /*使用CAN1,默认不使用中断,引脚默认上拉,默认使用过滤器0,关联FIFO0,默认接收任何ID的消息数据*/ +#define SYSTEM_CAN1_ENABLE 0 /*使用CAN1,引脚默认上拉,默认使用过滤器0,关联FIFO0,默认接收任何ID的消息数据*/ #define CAN1_RX0_INT_ENABLE 1 /*CAN1接收中断使能*/ - /*更多API详看docs.txt*/ + #define CAN1_TX_INT_ENABLE 0 /*CAN1发送结束中断使能*/ + /*更多API详看docs.bin*/ /*默认引脚: PB8 ------> CAN1_RX 可到源码处修改 PB9 ------> CAN1_TX 可以按照 stm32f407ze.pdf 手册的 62页 开始自行选择引脚,可选的还挺多的*/ @@ -439,16 +440,28 @@ u8 Stm32_Clock_Init(void); /*时钟系统配置*/ /*_______________________________CAN1___________________________________*/ #if SYSTEM_CAN1_ENABLE - u8 CAN1_Receive_Msg(u8* buf,u8* len,u8* frameType,u32* id); + + u8 CAN1_Set_Msg(CAN_TxHeaderTypeDef* TxMessage,u8 len,u8 frameType,u32 id); + u8 CAN1_Receive_Msg(u8* buf,u8* len, u8* frameType,u32* id); u8 CAN1_Send_Msg(u8* msg,u8 len,u8 frameType,u32 id); - void sys_CAN1_Init(void); - void CAN1_setExceptId(u8 care,u8 frameType,u32 FilterId); + + void CAN1_Mode_Init(uint32_t tsjw, uint32_t tbs1, uint32_t tbs2, uint32_t brp, uint32_t mode); + void CAN1_setExceptId(u8 care,u8 FilterNumber,u8 frameType,u32 ExceptId); #if CAN1_RX0_INT_ENABLE extern CAN_RxHeaderTypeDef CAN1_IT_RxMessage; //CAN1从中断接收到数据的结构体 extern u8 CAN1_IT_Rxdata[8]; //CAN1从中断接收到的数据 extern u8 CAN1_IT_RxMessage_flag; //CAN1从中断接收到数据的标志 #endif + + #define sys_CAN1_ENABLE_Tx() HAL_CAN_ActivateNotification(&CAN1_Handler, CAN_IT_TX_MAILBOX_EMPTY) + #define sys_CAN1_DISABLE_Tx() HAL_CAN_DeactivateNotification(&CAN1_Handler,CAN_IT_TX_MAILBOX_EMPTY) + #if CAN1_TX_INT_ENABLE + extern CAN_TxHeaderTypeDef CAN1_IT_TxMessage; //CAN1从中断发送数据的结构体 + extern u8 CAN1_IT_TxMessage_flag; //CAN1发送完毕标志位 + extern u8 CAN1_IT_TxMessage_data[8]; //CAN1发送中断的8位数据 + extern u32 CAN1_IT_TxMessage_id; //CAN1发送中断的id + #endif #endif /*_______________________________MCO___________________________________*/ #if SYSTEM_MCO_PA8_OUT diff --git a/STM32F4DSP_HAL_freeRTOS_Framework/Docs/docs.bin b/STM32F4DSP_HAL_freeRTOS_Framework/Docs/docs.bin index 2ffcc45..82c0055 100644 --- a/STM32F4DSP_HAL_freeRTOS_Framework/Docs/docs.bin +++ b/STM32F4DSP_HAL_freeRTOS_Framework/Docs/docs.bin @@ -150,11 +150,15 @@ DMAx ȼΪ4ֻ0~1516ռȼ TODOҪŻȼ䣬һֲҪķŵ5ԺС5ֻ + CANȫŵ5Ժ + TIM4ŵ2 + TIM23 + TIM6\7ŵ5Ժ ȼ 0 1 2 3 4 5 ... TIM4(ʱ) ⲿж ⲿж TIM6(ʱ) - TIM5(ʱ) TIM3PWNM TIM7(ʱ) - CAN1 TIM2๦ܣ + TIM5(ʱ) TIM3PWNM TIM7(ʱ) + systick(1KHz) CAN1 TIM2๦ܣ */ /*_____________________________________\\\ ///____________________________________________* @@ -1151,14 +1155,16 @@ P.S } myfree(InrRAM,buf4uart1); -& SYSTEM_CAN1_ENABLE ʹCAN1,ĬϲʹжϣĬĬʹù0FIFO0ĬϽκIDϢ - ĬϷֻ֡ĬϳʼΪ500kλ/s +& SYSTEM_CAN1_ENABLE ʹCAN1ĬĬʹù0FIFO0ĬϽκIDϢ + ĬϷֻ֡ûң֡ Ĭţ PB8 ------> CAN1_RX ɵԴ봦޸ PB9 ------> CAN1_TX ԰ stm32f407ze.pdf ֲ 62ҳ ʼѡţѡĻͦ opt: ѡǷʹýж + ѡǷʹýж API: - ͣǷʹж + ͣ + жģʽcan1һ canһ msg:ָ,Ϊ8ֽ len:ݳ(Ϊ8) @@ -1168,16 +1174,52 @@ P.S ֵ:0,ɹ; ,ʧ; u8 CAN1_Send_Msg(u8* msg,u8 len,u8 frameType,u32 id); + жģʽ򿪺 CAN1_TX_INT_ENABLE + ̣³һѭԽԽ + u8 isCAN1_IT_Tx = 0; //ȫֱ + + static PreisCAN1_IT_Tx = 1; //˽бĪ + if(isCAN1_IT_Tx) + { + PreisCAN1_IT_Tx = isCAN1_IT_Tx; + + if(CAN1_IT_TxMessage_flag) + { + u32 TxMailbox; + CAN1_IT_TxMessage_flag = 0; + + CAN1_IT_TxMessage_id = ... //ID + CAN1_IT_TxMessage_data[i] = ... //Ҫ͵İ˸ֽ + + /*ȣͣ׼֡չ֡CAN_ID_STD CAN_ID_EXTIDݴ˺ϳڷ͵ CAN1_IT_TxMessage*/ + CAN1_Set_Msg(&CAN1_IT_TxMessage, 8, CAN_ID_EXT, CAN1_IT_TxMessage_id); + + /*һ*/ + HAL_CAN_AddTxMessage(&CAN1_Handler, &CAN1_IT_TxMessage, CAN1_IT_TxMessage_data, &TxMailbox); + + /*ж*/ + sys_CAN1_ENABLE_Tx(); + } + }else + { + if(PreisCAN1_IT_Tx != isCAN1_IT_Tx) + { + PreisCAN1_IT_Tx = isCAN1_IT_Tx; + sys_CAN1_DISABLE_Tx(); + } + } + + Ȼûı־λisCAN1_IT_TxжϷʽǷͽп գ ʹжϵѭ canڽݲѯʹжϷʽʱʹ buf:ݻ,Ϊ8ֽ - len:ݳ(Ϊ8) + lenݳȣֽ8ڣ frameType:֡ͣ0Ϊ׼֡IDΪ11λ1Ϊչ֡IDΪ29λ id:IDʶframeTypeΪ0Ϊ׼ʶframeTypeΪΪչʶ ֵ:0,ݱյ; ,ûнյ; - u8 CAN1_Receive_Msg(u8* buf,u8* len,u8* frameType,u32* id); + u8 CAN1_Receive_Msg(u8* buf,u8* len, u8* frameType,u32* id); ʹжϣ򿪺 CAN1_RX0_INT_ENABLE CAN_RxHeaderTypeDef CAN1_IT_RxMessage; CAN1жϽյݵĽṹ壬Ϣȡ u8 CAN1_IT_Rxdata[8]; CAN1жϽյݣ8ֽ @@ -1196,10 +1238,13 @@ P.S ý˲Ӳֻض֡IDݣMCU ض֡IDϢ care0ʾκIDգ1ʾֻFilterIdһµIDϢ + FilterNumberҪõ˲ţIt ranges from 0 to 13 frameType֡ͣ0Ϊ׼֡IDΪ11λ1Ϊչ֡IDΪ29λ FilterIdյID ĬϢΪ֡ - void CAN1_setExceptId(u8 care,u8 frameType,u32 FilterId); + void CAN1_setExceptId(u8 care,u8 FilterNumber,u8 frameType,u32 ExceptId); + ˯ģʽ˳˯ģʽ + 꿴HALAPI & SYSTEM_UseTIM5ForTiming_ENABLE ʹTIM5һеʱ䣬λus һʱ䣬صλΪusʱ䣬ûгʱ˳ƣʺвϵͳĻ diff --git a/STM32F4DSP_HAL_freeRTOS_Framework/USER/STM32F4DSP_HAL_freeRTOS_Framework.uvguix.staok b/STM32F4DSP_HAL_freeRTOS_Framework/USER/STM32F4DSP_HAL_freeRTOS_Framework.uvguix.staok index caa3501..598cc4f 100644 --- a/STM32F4DSP_HAL_freeRTOS_Framework/USER/STM32F4DSP_HAL_freeRTOS_Framework.uvguix.staok +++ b/STM32F4DSP_HAL_freeRTOS_Framework/USER/STM32F4DSP_HAL_freeRTOS_Framework.uvguix.staok @@ -89,8 +89,8 @@ 2 3 - -1 - -1 + -32000 + -32000 -1 @@ -106,8 +106,8 @@ 0 - 1149 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000700000000000000010000006C453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C434F4E4649475C506572697068436F6E666967436F72652E680000000012506572697068436F6E666967436F72652E6800000000C5D4F200FFFFFFFF6C453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C434F4E4649475C506572697068436F6E666967436F72652E630000000012506572697068436F6E666967436F72652E6300000000FFDC7800FFFFFFFF6D453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C555345525C555345525C4672656552544F53436F6E6669672E6800000000104672656552544F53436F6E6669672E6800000000BECEA100FFFFFFFF74453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C555345525C555345525C42617265436F6E6669675C42617265436F6E6669672E63000000000C42617265436F6E6669672E6300000000F0A0A100FFFFFFFF76453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C5468697264506172745C4C5749505C6C7769705F757365725C6C7769706F7074732E68000000000A6C7769706F7074732E6800000000BCA8E100FFFFFFFF60453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C446F63735C646F63732E62696E0000000008646F63732E62696E000000009CC1B600FFFFFFFF6A453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C4D6964646C65735C6D616C6C6F635C6D616C6C6F632E6800000000086D616C6C6F632E6800000000F7B88600FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000002601000066000000800700004A030000 + 1579 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000A00000000000000010000006C453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C434F4E4649475C506572697068436F6E666967436F72652E680000000012506572697068436F6E666967436F72652E6800000000C5D4F200FFFFFFFF6C453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C434F4E4649475C506572697068436F6E666967436F72652E630000000012506572697068436F6E666967436F72652E6300000000FFDC7800FFFFFFFF6D453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C555345525C555345525C4672656552544F53436F6E6669672E6800000000104672656552544F53436F6E6669672E6800000000BECEA100FFFFFFFF74453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C555345525C555345525C42617265436F6E6669675C42617265436F6E6669672E63000000000C42617265436F6E6669672E6300000000F0A0A100FFFFFFFF76453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C5468697264506172745C4C5749505C6C7769705F757365725C6C7769706F7074732E68000000000A6C7769706F7074732E6800000000BCA8E100FFFFFFFF60453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C446F63735C646F63732E62696E0000000008646F63732E62696E000000009CC1B600FFFFFFFF6A453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C4D6964646C65735C6D616C6C6F635C6D616C6C6F632E6800000000086D616C6C6F632E6800000000F7B88600FFFFFFFF68453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C434F4E4649475C506572697068436F6E6669672E63000000000E506572697068436F6E6669672E6300000000D9ADC200FFFFFFFF6E453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C48414C5C496E635C73746D3332663478785F68616C5F63616E2E68000000001373746D3332663478785F68616C5F63616E2E6800000000A5C2D700FFFFFFFF6E453A5CB5E7D7D326B1E0B3CC20D1A7CFB05C333246312048414C2052544F53BBF2C2E3BBFA20C4A3B0E55C53544D333246344453505F48414C5F6672656552544F535F4672616D65776F726B20646F696E675C48414C5C5372635C73746D3332663478785F68616C5F63616E2E63000000001373746D3332663478785F68616C5F63616E2E6300000000B3A6BE00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000002601000066000000800700004A030000 @@ -1801,8 +1801,8 @@ 59392 File - 2505 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000044E56494396000000000000001400044E56494304766F69640E48414C5F4D50555F456E61626C650864656C61795F6D73095F5F4D53525F4D5350134849445F4D616368696E655F54797065446566036275660D555342485F4D73675F53686F77085552425F444F4E45084150505F464F5053085643505F666F7073085643505F496E69740A5643505F4461746152780A5643505F446174615478075379735469636B0B5553425F4F54475F646576067374617469630D4150505F52785F4275666665720D4150505F52785F7074725F696E0CBBB9C3BBCAD5B5BD305830440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65B9030000 + 2683 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000044E564943960000000000000014001043414E315F526563656976655F4D73670231331043414E315F73657445786365707449644648414C5F43414E5F446561637469766174654E6F74696669636174696F6E282643414E315F48616E646C65722C43414E5F49545F54585F4D41494C424F585F454D505459293B1F43414E5F72656D6F74655F7472616E736D697373696F6E5F726571756573741343414E5F6964656E7469666965725F747970650343414E001043414E5F54785F4D61696C626F786573065374617475732148414C5F43414E5F52784669666F304D736750656E64696E6743616C6C6261636B1343414E315F5258305F49525148616E646C65720D48414C5F43414E5F53746172741143414E5F46696C746572547970654465661446696C7465724649464F41737369676E6D656E741543414E5F66696C7465725F61637469766174696F6E0F43414E5F66696C7465725F4649464F1043414E5F66696C7465725F7363616C650F43414E5F66696C7465725F6D6F6465124175746F52657472616E736D697373696F6E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65B9030000 1423 @@ -1818,7 +1818,7 @@ Build 1005 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000005464C4153489600000000000000040005464C415348085573652055534244085573652055534248045352414D000000000000000000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000005464C4153489600000000000000040005464C415348085573652055534244085573652055534248045352414D000000000000000000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -1834,7 +1834,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -3602,34 +3602,34 @@ 0 ..\CONFIG\PeriphConfigCore.h - 4 - 46 - 55 + 63 + 150 + 163 1 - 356,380,387,400,440,453,457,464,473,478,486,489,518,530,542,548,556,572,596,606,635,647,665,681 + 357,381,388,401,441,466,470,477,486,491,499,502,531,543,555,561,569,585,609,619,648,660,678,694 0 ..\CONFIG\PeriphConfigCore.c - 13 - 126 - 167 + 4 + 98 + 110 1 - 277,321,339 + 278,322,340,452,614,701,1018,1066,1170,1220,1662,1684,1700,1743,1863,1897,1928,1940,1947,1955,1987 0 .\USER\FreeRTOSConfig.h - 96 + 109 144 - 158 + 157 1 0 .\USER\BareConfig\BareConfig.c - 28 + 34 31 32 1 @@ -3647,9 +3647,9 @@ ..\Docs\docs.bin - 0 - 306 - 339 + 43 + 1146 + 1159 0 0 @@ -3663,6 +3663,33 @@ 0 + + ..\CONFIG\PeriphConfig.c + 0 + 242 + 253 + 1 + 254,597,693,790,1011,1586,1618,1653,1775,2018,2125,2227,2297,2406 + 0 + + + ..\HAL\Inc\stm32f4xx_hal_can.h + 19 + 330 + 342 + 1 + + 0 + + + ..\HAL\Src\stm32f4xx_hal_can.c + 22 + 1548 + 1564 + 1 + + 0 + diff --git a/STM32F4DSP_HAL_freeRTOS_Framework/USER/STM32F4DSP_HAL_freeRTOS_Framework.uvoptx b/STM32F4DSP_HAL_freeRTOS_Framework/USER/STM32F4DSP_HAL_freeRTOS_Framework.uvoptx index 1b5c331..df0755c 100644 --- a/STM32F4DSP_HAL_freeRTOS_Framework/USER/STM32F4DSP_HAL_freeRTOS_Framework.uvoptx +++ b/STM32F4DSP_HAL_freeRTOS_Framework/USER/STM32F4DSP_HAL_freeRTOS_Framework.uvoptx @@ -927,7 +927,7 @@ USER_USER - 1 + 0 0 0 0 diff --git a/STM32F4DSP_HAL_freeRTOS_Framework/USER/SYS/Src/stm32f4xx_it.c b/STM32F4DSP_HAL_freeRTOS_Framework/USER/SYS/Src/stm32f4xx_it.c index b692aad..8a7f58a 100644 --- a/STM32F4DSP_HAL_freeRTOS_Framework/USER/SYS/Src/stm32f4xx_it.c +++ b/STM32F4DSP_HAL_freeRTOS_Framework/USER/SYS/Src/stm32f4xx_it.c @@ -37,7 +37,6 @@ /* Includes ------------------------------------------------------------------*/ #include "stm32f4xx_it.h" -#include "isUseFreeRTOS.h" /** @addtogroup STM32F4xx_HAL_Examples * @{ @@ -151,6 +150,15 @@ void PendSV_Handler(void) } #endif +#include "stm32f4xx_hal.h" + +/*systick统一为1ms中断,所以这里固定+1(举例,如果是100Hz中断,这里+10,以此类推)*/ +void HAL_IncTick(void) +{ + ++uwTick; +} + +#include "isUseFreeRTOS.h" /** * @brief This function handles SysTick Handler. * @param None @@ -162,10 +170,10 @@ void PendSV_Handler(void) void SysTick_Handler(void) { HAL_IncTick(); - if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)//系统已经运行 - { - xPortSysTickHandler(); - } + if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)//系统已经运行 + { + xPortSysTickHandler(); + } } #else void SysTick_Handler(void)