你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

X-Cube-ClassB代码 的移植(贰)

[复制链接]
eefishing 发布时间:2020-1-19 20:07
添加ClassB相关代码



01
了解例程中相关的文件
在AN4435中的表3中列出了和安全监测相关的通用代码文件,这些文件在X-CUBE-CLASSB软件包的Middlewares\STM32_SelfTest_Library目录下,所以直接将STM32_SelfTest_Library目录拷贝到新的工程的Middlewares目录下就可以了。
1.jpg
下面表4中列出的文件是和新工程所用的IDE以及应用程序相关的文件。Source这一行中的文件,主要是区分了不同的IDE,所以根据实际使用的IDE进行选择添加就好。这里用的是KEIL,所以可以将X-CUBE-CLASSB软件包的\Projects\STM322xG_EVAL\MDK-ARM路径下的这三个文件拷贝到新工程对应的位置:
  • stm32f2xx_STLcpurunKEIL.s
  • stm32f2xx_STLcpustartKEIL.s
  • stm32fxx_STLRamMcMxKEIL.s

Header这一行中的stm32xxx_STLparam.h文件也需要添加到新工程中,但是里面的内容需要根据应用进行修改,比如:Flash,Ram的检测范围等,这里先添加进来,后面在调试时再做具体的修改。
2.jpg
还有一类文件,在下面的表5中列出。这些文件在新建的工程中已经存在。但是还需要参考X-CUBE-CLASSB软件包中的例程,进行修改。因为这些文件中也包含了一部分检测的功能。
3.jpg
在进行编译之前,先检查一下下表中的HAL驱动文件是否已经添加到新工程中。
表中列出了需要用到的hal驱动函数,以及调用它们的STL文件。
4.jpg
5.jpg
除了这几个文件以外还有三个文件需要注意。就是\Projects\STM322xG_EVAL\MDK-ARM路径下的:Boot_Flash_ClassB.sct:KEIL的分散加载文件,里面指定了FLASH的保存和运行地址,RAM的地址范围以及运行中需要检测的RAM区域等。在新工程中的sct文件,也应该参考这个分散加载文件进行修改。
crc_gen_keil.bat:生成末尾带CRC校验码的HEX文件,因为KEIL不支持自动增加CRC校验码,所以在X-CUBE-CLASSB中提供了这个bat文件,它会利用外部工具Srecord来生成整个Flash的CRC校验码并放在文件末尾。
crc_load.ini:这个文件调试时有用,用来配置调试时导入带CRC校验码的HEX,避免对FLASH检测失败导致程序无法正常运行。
这两个文件中的也需要根据新工程路径进行修改,后面会再细说。

02
可以动手添加文件了

1.将X-CUBE-ClassB软件包中,Middlewares\STM32_SelfTest_Library文件夹下的文件拷贝到新工程的对应目录下。
2.将\Projects\STM322xG_EVAL\MDK-ARM路径下的以下文件,拷贝到新的工程目录下。
6.jpg
将stm32fxx_STLparam.h文件拷贝到新工程的Inc文件夹内,里面是所有STL的配置参数。里面的参数要根据当前所用的板子进行调整,比如:#define STL_EVAL_MODE是针对使用eval板, #define STL_EVAL_LCD是控制EVAL板的LCD显示。如果不是eval板,没有LCD显示就可以注释掉。
如果使能了STL_VERBOSE,STL_VERBOSE_POR就需要完成相应的串口初始化定义,比如USARTx
3.将STL文件添加到新的项目中:
7.jpg
4.添加需要的HAL驱动文件到工程
确认CRC, WWDG, IWDG, TIM等STL代码会用到的模块的HAL驱动文件已经被添加到工程中。如果你使用了串口打印信息,就需要添加串口的HAL驱动。

03
初步修改代码

1.在stm32f2xx_hal_conf.h中使能CRC, WWDG, IWDG, TIM等模块。
8.jpg
2. 添加定义Flash CRC校验码存储区域
参考startup_stm32f2xxKEIL.s修改startup_stm32f207xx.s文件
在末尾添加定义Checksum存储区域
9.jpg
3. 修改main.h
添加下面的代码到main.h。根据实际所用的串口,定义USARTx(定义了STL_VERBOSE_POR或STL_VERBOSE时需要)。根据实际情况选择合适的Flash等待周期。
10.jpg

4. 修改stm32fxx_STLparam.h
注释掉#define STL_EVAL_MODE和#define STL_EVAL_LCD,因为我们不是用的EVAL板,也没有LCD屏。

5. 修改stm32f2xx_it.c,添加处理运行时安全检测的代码和时钟检测的相关代码。
根据X-CUBE-CLASSB的例程,修改SysTick_Handler函数。
添加STL_InitClock_Xcross_Measurement函数以及TIM5_IRQHandler函数。
添加变量定义:volatile static uint32_t tmpCC4_last; /* keep last TIM5/Chn4 captured value */

6. 修改main.c
  • 将例程中的StartUpClock_Config函数拷贝到新工程的main.c中,该函数会在启动检测STL_StartUp函数中调用,配置检测过程时的系统时钟。
  • 新工程中已经包含了串口3的初始化代码,但是一些变量和函数的名字和X-CUBE-CLASSB库中的不一样,所以这里我们需要将其修改为统一的名称。比如新工程中串口3的操作句柄定义是huart3,但X-CUBE-CLASSB库中用的是UartHandle;串口初始化函数的名称也不一样新工程中是MX_USART3_UART_Init,但X-CUBE-CLASSB库中是USART_Configuration。
  • 添加串口重定向的代码。


7. 修改工程配置:
添加include路径:..\Middlewares\STM32_SelfTest_Library\inc
11.jpg

添加外部命令来让KEIL能自动生成一个带CRC值的HEX文件
12.jpg
定义debug和flash download使用的HEX文件路径,使用带CRC校验值的HEX文件。
13.jpg
14.jpg
15.jpg
收藏 1 评论1 发布时间:2020-1-19 20:07

举报

1个回答
heiyewuyue 回答时间:2020-6-8 18:16:13
感谢分享

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版