解决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——记录一个使用多线程异步调用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