麻烦提供一下CH32V307EVT开发板的原理图,谢谢!
您好,关于CH32V307 EVT 开发板的原理图,在CH32V307EVT 的PUB文件夹下都有的,如下图。CH32V307 EVT下载链接如下:
评估板下载RTC例程,只打印000,
经查,RTC_Init返回值为1,说明初始化时钟失败,晶振有问题,是不是板上的32.768晶振有问题,不能起振?
我把它改为内部40K时钟,下载后第一次正常,但重新上电后就不行了,程序卡在
RTC_WaitForSynchro(); //等待最近一次对RTC寄存器的写操作完成
不知道是什么原因,特此请教!谢谢!
您好,测试板可以换个低速晶振试一下,此外若要使用内部LSI,注意程序要进行对应的修改,如下图
我是这样改的
RTC初始化代码如下 :
u8 RTC_Init(void) { //检查是不是第一次配置时钟 u8 temp=0; RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);//使能PWR和BKP外设时钟 PWR_BackupAccessCmd(ENABLE);//使能后备寄存器访问 BKP_DeInit();//复位备份区域 RCC_LSICmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET && temp <250) { temp++; Delay_Ms(20); } if(temp >= 250) return 1; RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); // RCC_RTCCLKCmd(ENABLE); RTC_WaitForLastTask();//等待最近一次对RTC寄存器的写操作完成 RTC_WaitForSynchro(); //等待RTC寄存器同步 // RTC ITConfig(RTC IT ALR, ENABLE); RTC_ITConfig(RTC_IT_SEC, ENABLE);//使能RTC秒中断 RTC_WaitForLastTask();//等待最近一次对RTC寄存器的写操作完成 RTC_EnterConfigMode(); RTC_SetPrescaler(32767); RTC_WaitForLastTask(); if (BKP_ReadBackupRegister(BKP_DR1) != 0x5A51)//从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎 RTC_Set(2020,11,10,13,50,55);//设置时间 RTC_ExitConfigMode();//退出RTC配置模式 BKP_WriteBackupRegister(BKP_DR1, 0X5A51); //向指定的后备寄存器中写入用户程序数据 RTC_NVIC_Config();//RCT中断分组设置 RTC_Get();//更新时间 return 0; //ok } 在VBAT电源保持的情况下,每次重新上电都是打印初始化设置的时间2020,11,10,13,50,55,即RTC无法正常运行,这是为什么?
u8 RTC_Init(void) { u8 temp = 0; RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); PWR_BackupAccessCmd(ENABLE);//使能后备寄存器访问 if (BKP_ReadBackupRegister(BKP_DR1) != 0xA1A2)//从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎 { printf("RTC Test: %d\r\n",88); BKP_DeInit();//复位备份区域 RCC_LSICmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET && temp <250) { temp++; Delay_Ms(20); } if(temp >= 250) return 1; RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); RCC_RTCCLKCmd(ENABLE); RTC_WaitForLastTask();//等待最近一次对RTC寄存器的写操作完成 RTC_WaitForSynchro();//等待RTC寄存器同步 // RTC_ITConfig(RTC_IT_ALR, ENABLE); RTC_ITConfig(RTC_IT_SEC, ENABLE);//使能RTC秒中断 RTC_WaitForLastTask(); RTC_EnterConfigMode(); RTC_SetPrescaler(32767); RTC_WaitForLastTask(); RTC_Set(2019, 10, 8, 13, 58, 55); /* Setup Time */ RTC_ExitConfigMode();//退出RTC配置模式 BKP_WriteBackupRegister(BKP_DR1, 0XA1A2); printf("RTC Test: %d\r\n",99); } else { printf("RTC Test: %d\r\n",77); RTC_WaitForSynchro(); //等待最近一次对RTC寄存器的写操作完成 //卡在这个地方了----------------------------- printf("RTC Test: %d\r\n",66); RTC_ITConfig(RTC_IT_SEC, ENABLE); //使能RTC秒中断 printf("RTC Test: %d\r\n",55); RTC_WaitForLastTask();//等待最近一次对RTC寄存器的写操作完成 printf("RTC Test: %d\r\n",44); } RTC_NVIC_Config();//RCT中断分组设置 RTC_Get();//更新时间 return 0; }
同样只能运行一次,重启之后就卡在RTC_WaitForSynchro();的循环中
哦,自己弄好了。在printf("RTC Test: %d\r\n",77);前面加入:
?RCC_LSICmd(ENABLE); ?RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); ?RCC_RTCCLKCmd(ENABLE);
完整的项目:
请问哪里可以下载到CH32V系列的库函数开发手册?
请问 如何在CH32v103上实现互斥锁 或者 条件变量
软中断例程有没有
您好,目前没有相关例程,若你之前有用过相关功能程序,可以直接套用的。或者你可以通过邮箱(lzs@wch.cn)跟我具体说一下你的目的或你想实现的功能,这边具体看一下.