CH32V103相关资料汇总

麻烦提供一下CH32V307EVT开发板的原理图,谢谢!


您好,关于CH32V307 EVT 开发板的原理图,在CH32V307EVT 的PUB文件夹下都有的,如下图。CH32V307 EVT下载链接如下:

https://www.wch.cn/downloads/CH32V307EVT_ZIP.html 

image.png


评估板下载RTC例程,只打印000,

739ff7d5416f5c73f096ca2a82b9caa0_172753qepddzbbx1cn5yg2.png


经查,RTC_Init返回值为1,说明初始化时钟失败,晶振有问题,是不是板上的32.768晶振有问题,不能起振?


我把它改为内部40K时钟,下载后第一次正常,但重新上电后就不行了,程序卡在

RTC_WaitForSynchro(); //等待最近一次对RTC寄存器的写操作完成

不知道是什么原因,特此请教!谢谢!


您好,测试板可以换个低速晶振试一下,此外若要使用内部LSI,注意程序要进行对应的修改,如下图

image.png


image.png我是这样改的


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无法正常运行,这是为什么?



您好,可以参考一下下帖2楼回复例程,基本都是一样的

https://www.wch.cn/bbs/thread-103442-1.html

 


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;
}

image.png


同样只能运行一次,重启之后就卡在RTC_WaitForSynchro();的循环中


哦,自己弄好了。在printf("RTC Test: %d\r\n",77);前面加入:

?RCC_LSICmd(ENABLE);
?RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
?RCC_RTCCLKCmd(ENABLE);

完整的项目:

icon_rar.gifRTC测试(使用内置40K振荡器).rar



请问哪里可以下载到CH32V系列的库函数开发手册?


您好,下帖已回复:

https://www.wch.cn/bbs/thread-107153-1.html

 


请问 如何在CH32v103上实现互斥锁 或者 条件变量

软中断例程有没有


您好,目前没有相关例程,若你之前有用过相关功能程序,可以直接套用的。或者你可以通过邮箱(lzs@wch.cn)跟我具体说一下你的目的或你想实现的功能,这边具体看一下.




只有登录才能回复,可以选择微信账号登录