搜索
发新帖本帖赏金 10.00元(功能说明)我要提问
返回列表

基于GD32F103CBT6的温湿度采集传感器

[复制链接]
2882|2
laocuo1142|  楼主 | 2021-5-20 15:15 | 显示全部楼层 |阅读模式
#申请原创#

现在的进口的MCU芯片普遍缺货,之前主要用是STNXPMCU做项目,这两家低功耗做的比较好,一直有代理过来推荐国产的单片机GD说和STPINTOPIN兼容,但是换方案比较麻烦,就一直没动。去年年底到今年来,单片机交期普遍在30周左右了,领导也考虑国产替代试一下,正好有个新项目进行,就采购一批GD32F103CBT6回来试一下,当时价格还好,8块多买回来,听说后来也涨到20+了,感觉目前这个状态是不正常的,按道理原厂不停的生产,目前也没有什么火爆的项目在进行,为什么市面上这么缺货?言归正传,分享一下使用时的心得。
整体来看和ST使用基本差不多,原理图如下:
5362460a60bafa3f5a.png
官方手册上说,BOOT0BOOT1引脚必须接下拉,不能悬空。这里可能和ST稍有差别。实物图如下:
4629060a60bcd26cbb.png
板子焊好之后,到官网下载例程包,
6990860a60bdb39fd9.png
开始程序编辑,我使用的是keil v5
8415960a60be63cc8b.png
打开程序后,提醒没有PACK包,找到PACK包进行安装,发现例程选择的芯片不对,重新选择芯片,如下图:
3976860a60bf189bca.png
8874460a60bf6b8822.png
选择GD32F103CB型号。
编译一下例程,看能不能通过,发现很多错误,后面找到原因知道是keil的版本问题和一个宏定义重复导致,如下图:
7244260a60c0167b7d.png
先解决版本问题,点击上图的部分,把版本切换到keil V5
1642260a60c0b9e279.png

9735560a60c136511b.png
8378060a60c1b47e7f.png
把例程的库文件链接,在软件里重新添加一下路径就行。再进行编译,还是缺一个core_cm3.h文件。
9591860a60c25725e7.png
找到keil V5的安装位置里,找到该文件,路径如下:
6671560a60c329511c.png
添加之后编译就OK了。烧写uart的例程之后,就可以正常打印数据了。
8834860a60c3d9a416.png
该工程就可以正常使用了,可以开始添加我之前使用的一些器件的驱动,调试各项功能。该设备定位是温湿度传感器,带LCD显示屏进行就地显示。添加之前写好的驱动程序,配置一些时钟就行了。其中用到了GD的内部flash做设备的参数存储,用到了ADC采集电池电压做电量计算,其他就是几个定时器做时序控制和看门狗。
下面先分享一下内部FLASH操作,直接调用函数
GDFMC_ErasePage(ParaStartAddr);  //擦除
GDFLASH_Write(ParaStartAddr,(uint32_t *)DefaultPara,ParaLen);  //写入
我是定义的把0x0801FC00每页1024字节)最后一页擦除,然后写入我需要的数据,直接调用上面的函数即可,读flash的时候,直接用指针指向改地址就能读出参数。例如直接用指针指向0x0801FC00((uint8_t)*((volatile uint32_t *) 0x0801FC00)) ,就能读出该地址的数据。目前测试功能是可以的,这个函数好像和ST有区别,需要自己编辑一下流程,如下:
/**********************************************************
*
* 函数名: void fmc_erase_pages(void)
* 功  能: 擦除flash一页数据
* 说  明:
* 设计人:
* 设计时间:2021-03-19
* 入口参数:无
* 出口参数:无
***********************************************************/
void GDFMC_ErasePage(uint32_t PageAddr)   
{   
//    uint8_t i;   
//    zTransferStatus = PASSED;   
    fmc_unlock();   
        
    fmc_flag_clear(FMC_FLAG_BANK0_END);
    fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
    fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
        
    fmc_page_erase(PageAddr);//GD32_FLASH_BASE + (FMC_PAGE_SIZE * PageAddr));   
        
    fmc_flag_clear(FMC_FLAG_BANK0_END);
    fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
    fmc_flag_clear(FMC_FLAG_BANK0_PGERR);   
        
    fmc_lock();   
   
}
/**********************************************************
*
* 函数名: void fmc_erase_pages(void)
* 功  能: 把数据写入flash
* 说  明:
* 设计人:
* 设计时间:2021-03-19
* 入口参数:无
* 出口参数:无
***********************************************************/
void GDFLASH_Write(uint32_t WriteAddr,uint32_t *pBuffer,uint32_t NumToWrite)   
{   
//    uint32_t addrx=0;   
    uint32_t endaddr=0;   
//    uint32_t i;   
    fmc_unlock();   
//    addrx=WriteAddr;   
    endaddr=WriteAddr+NumToWrite*4;
        
    fmc_flag_clear(FMC_FLAG_BANK0_END);
    fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
    fmc_flag_clear(FMC_FLAG_BANK0_PGERR);   
        
    while(WriteAddr<endaddr)   
    {   
        fmc_word_program(WriteAddr,*pBuffer);  
               
        fmc_flag_clear(FMC_FLAG_BANK0_END);
                fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
                fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
               
        WriteAddr+=4;   
        pBuffer++;   
    }   
    fmc_lock();   
}
使用上面两个函数就能正常使用内部FLASH
其中的子函数是在库函数的这里,如下图:
5200960a60c522a30c.png
整体来说,基本使用和ST基本一致,细微上有些差别。
最后成品如上图,里面有LCD和温湿度采集器功能,有需要的小伙伴可以和我沟通,哈哈。今天就分享这些!
@21小跑堂 @21小跑堂 @21小跑堂


使用特权

评论回复

打赏榜单

21小跑堂 打赏了 10.00 元 2021-05-20
理由:恭喜通过原创文章审核!请多多加油哦!

我就说亮| | 2021-5-22 16:44 | 显示全部楼层
一模一样的。随便用。直接用st的库开发同样使用

使用特权

评论回复
laocuo1142|  楼主 | 2021-5-23 17:20 | 显示全部楼层
我就说亮 发表于 2021-5-22 16:44
一模一样的。随便用。直接用st的库开发同样使用

是啊

使用特权

评论回复
扫描二维码,随时随地手机跟帖
返回列表 发新帖 本帖赏金 10.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 wolfe_yu 得到打赏 ¥180.00
  • 2 最美葫芦娃 得到打赏 ¥155.00
  • 3 hk386 得到打赏 ¥75.00
  • 4 火星国务卿 得到打赏 ¥63.00
  • 5 两只袜子 得到打赏 ¥56.00
  • 6 laocuo1142 得到打赏 ¥50.00
  • 7 ezcui 得到打赏 ¥45.00
  • 8 linghz 得到打赏 ¥45.00
  • 9 gaon2 得到打赏 ¥45.00
  • 10 liang-1011 得到打赏 ¥40.00
在线客服 快速回复 返回顶部 返回列表