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程序做标志位记录)MCU内部预先规划给APP程序的FLASH区域,如果有则直接执行FLASH里的APP程序外部SPI驱动的SPI FLASH是否存在,如果存在再用FATFS查看是否有预先规定的APP程序的.bin文件,如果有则读出APP程序到SRAM里面,在SRAM里面执行外部SPI或者SDIO驱动的SD卡是否存在,如果有则步骤同上USB HOST是否外接了U盘,如果有则步骤同上检查APP程序可能存在的位置(暂列以下四个位置):...APP程序接收所通过通讯接口(暂列以下五个个位置):串口1、2、3,通过预编译选择一个USB Device VCP 模拟串口USB Device MSC 把内部FLASH和外部SPI FLASH(如果有)和SD卡(如果有)模拟成U盘,当USB接入电脑后,拖拽固件外部SPI或者SDIO驱动的SD卡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 FLASH3、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的记录)MCU内部预先规划给APP程序的FLASH区域,如果有则直接执行FLASH里的APP程序外部SPI驱动的SPI FLASH是否存在,如果存在再用FATFS查看是否有预先规定的APP程序的.bin文件,如果有则读出APP程序到SRAM里面,在SRAM里面执行外部SPI或者SDIO驱动的SD卡是否存在,如果有则步骤同上USB HOST是否外接了U盘,如果有则步骤同上检查APP程序可能存在的位置(暂列以下四个位置):...APP程序接收所通过通讯接口(暂列以下五个个位置):串口1、2、3,通过预编译选择一个USB Device VCP 模拟串口USB Device MSC 把外部SPI FLASH(如果有)和SD卡(如果有)模拟成U盘,当USB接入电脑后,拖拽固件外部SPI或者SDIO驱动的SD卡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 FLASH3、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 FLASHSDIO 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)