打印
[RISC-V MCU 应用开发]

关于CH32V103C8T6的两个奇怪问题

[复制链接]
462|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
logan0279|  楼主 | 2023-2-28 10:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 logan0279 于 2023-3-3 16:39 编辑

----------------------230303更新二-----------------------
问题二经与官方技术人员沟通,提供更新的ch32v10x_flash.c文件替换原工程文件后解决。

----------------------230303更新--------------------------
经评论指出,之前描述的问题一,是本人疏忽导致的理解有误。RTC_Init()函数调用Delay延时,所以Delay_Init须在RTC_Init之前。
之前描述的问题二,经过这两天的反复测试,问题可以稳定复现,复现过程如下:
新建一个工程,新建有关FLASH操作的文件,该文件包含两个函数,一个向指定地址写数据,一个读取指定地址数据,两个函数均严格按照官方例程编写。
在main.c文件中,调用读数据函数先读一次数据,再写入数据,然后再读数据验证写数据是否成功时,使用printf打印出的数据会是写入之前的0xFF。


最近在学习CH32V103C8T6,遇见两个十分奇怪的问题。
问题一:RTC启用LSE时,如果直接参照官方的例程,使用RTC_Init(),则RTC初始化不会成功。一开始以为是电容不对,更换了多个容值的电容都不行。后来在RTC_Init()函数前,添加官方例程的Delay_Init()后,RTC功能便可以正常使用。如果将Delay_Init()注释掉,则RTC又会失败。
问题二:通过USART通讯向FLASH写入数据,写数据后完成立即读取数据,验证写数据是否成功,若成功则向上位机返回写成功信息。奇怪的是,上位机下发写数据指令后,收不到从机返回的信息,使用读从机信息的指令可以发现改数据是成功的。于是在写完数据后马上读出相应地址的数据发送给上位机,发现写完数据后马上读出的数据尽然是写之前的数据。在OLED显示界面调出读该地址数据,显示的数据也是改之后的。只有在写完数据之后,马上去相应地址读数据会读出来写之前的数据。
曾以为是延时问题,在写数据后添加一个1S的延时,再去读数据,依然是写之前的数据。此时,去OLED界面读相同地址的数据,显示的却是写入的新数据。
问题二的解决办法是在写数据的函数末尾,添加一段OLED显示字符的代码。上位机再发送写数据指令之后,从机便可以正常返回写成功的信息了。更新:问题二的在写FLASH的函数加上一句读FLASH的代码(读数据的地址与写数据的地址不能相同),也可正常工作了。

使用特权

评论回复
沙发
sagade| | 2023-3-1 08:05 | 只看该作者
RTC_Init里面用到了延时函数啊,不调用Delay_Init的话,延时都没起效。

使用特权

评论回复
板凳
sagade| | 2023-3-1 08:08 | 只看该作者
第二个的话数据不对仿真看,收不到从机数据的话串口线上面监视看数据发没发出来

使用特权

评论回复
地板
logan0279|  楼主 | 2023-3-1 17:26 | 只看该作者
sagade 发表于 2023-3-1 08:05
RTC_Init里面用到了延时函数啊,不调用Delay_Init的话,延时都没起效。

谢谢,是我疏忽了。

使用特权

评论回复
5
logan0279|  楼主 | 2023-3-1 17:31 | 只看该作者
sagade 发表于 2023-3-1 08:08
第二个的话数据不对仿真看,收不到从机数据的话串口线上面监视看数据发没发出来 ...

可以确定的是从机没发数据,
因为在写完数据后紧跟着是一条验证写数据是否成功的语句,只有写成功了从机才会发送写成功的消息。
于是在验证写数据是否成功添加一段代码,写完数据以后,马上读取数据,然后把该数据发送给上位机,此时上位机收到的数据是写之前的旧数据。
但如果在写完数据之后,先用其他不相关的地址进行一次读数据的操作,然后再去读写数据的那个地址,读出来的数据就是写之后的数据了。
重新修改代码,在写完数据之后马上读一次不相关位置的数据,然后再读正确地址以验证写数据是否成功,成功则从机响应。上位机便可以正常收到从机响应信息了。

使用特权

评论回复
6
GlenX| | 2023-3-5 10:50 | 只看该作者
我认为是变量“更新”问题,对需要检查的变量从新刷新就可以了或者换个临时变量读取就没问题了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

41

帖子

0

粉丝