解决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中断一次
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值