解决BUG的一些记录

Posted 一剃解千愁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决BUG的一些记录相关的知识,希望对你有一定的参考价值。

3.延时函数 delay_us,不准确的延时

delay_init(168); //初始化延时函数
滴嗒时钟频率systick配置成和HCLK一样,168M。

1MHZ对应1us,即1us计一次数
168MHZ对应1/168us,即1/168 us计数一次,那1us就要计168次,N us就要计数N X168次,所以有ticks=nus*fac_us;当计数值tcnt大于等于ticks时,退出while

延迟1微妙:delay_us(1);,需要计数168次,犹豫systick是递减的,调试显示自动重载值是167999,也就是计数168000次就是1ms,systick每1ms计数就自动重装


这种延时不准确
假如开始VAL是20,然后下次获取(SysTick->VAL)是10,此时间隔此时就是20-10=10,也可能是重装后的100,此时间隔就是167999-100+20,当次数累加大于等于168就退出,当可能从160的时候还没退出,下次加了个30后等于190才退出,多等了196-168个节拍

2,使用STM32cubeMX生成带freertos操作系统的工程,编译,报错,大部分关于port.c和portmacro.h

解决方法:
在自动下载的那个库里找到文件替换掉这两个文件,这个芯片为STM32F405RGT6,所以选择ARM_CM4F,我的路径:
C:\\Users\\29203\\STM32Cube\\Repository\\STM32Cube_FW_F4_V1.25.2\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\GCC\\ARM_CM4F


替换掉工程里对应的.c和.h
C:\\Users\\29203\\Desktop\\F405_IIC_U1\\f405_II\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\RVDS



keil的配置改为:


然后重新编译

遗留问题:每次修改cubeMX文件后,重新生成工程,这两文件又被覆盖回去了,又报错,貌似治标不治本,又得重新覆盖回来

1,移植代码:

比如这次把发stm32f429的代码移植到stm32f05,需要注意的一个问题是,引脚方面,外部晶振是不是和原来的一致,如果不是,需要改过来,f429好像是使用25M的晶振,或者默认外接晶振就是25,如图conf.h,被注释掉的就是以前的25M,现在改为16M,和硬件电路保持一致

,然后就是修改下面这些值

可利用这个来修改

**这2个好像没有用,随便哪个值都行,还是得到168M,,**最好跟着改下吧,

怎么检验是否配置到想要的168M
可以通过调用这个函数:HAL_RCC_GetSysClockFreq();
然后打开仿真调试

进入该函数,一步一步


右键取消十六进制

得到168M

一些值得注意的地方:
设置中断分组:

这也有晶振的,但是未使用,可能是因为在conf.h里面定义了

标准库:外接晶振16M,系统时钟配置成168
参考:

修改


检验:调用void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
RCC_ClocksTypeDef是结构体 :

因为定义一个结构体,再调用

最后结果:

注意:
调用完systemInit();时得到的是一些初始值,还不是最后的值,因此RCC_GetClocksFreq(&RCC_Clocks); 必须要放这它后面,得到的才是最后配置结果

0,带FreeRTOS操作系统的时钟,不使用systick,而是使用谋定时器,我使用定时器1

HAL_InitTick(uint32_t TickPriority)
1ms中断一次

以上是关于解决BUG的一些记录的主要内容,如果未能解决你的问题,请参考以下文章

一些bug的记录及处理方法

记录一些遇见的bug——记录一个使用多线程异步调用openfeign时子线程丢失request请求头导致的空指针异常错误

记录一些遇见的bug——mapstruct和lombok同时使用时,转换实体类时数据丢失问题

记录一些遇见的bug——mapstruct和lombok同时使用时,转换实体类时数据丢失问题

记录一些遇见的bug——项目启动报错org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.e

记录一些遇见的bug——项目启动报错org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.e