发新帖本帖赏金 30.00元(功能说明)我要提问
返回列表
[方案相关]

被HC32F005折磨的老刘

[复制链接]
658|17
手机看帖
扫描二维码
随时随地手机跟帖
单片小菜|  楼主 | 2023-1-11 18:50 | 显示全部楼层 |阅读模式
#申请原创# @21小跑堂
@21小跑堂
d112bf48d7619a1078fd92bcb5bb56df
引:
        这个文章主要是针对于刚刚使用一款新的单片机,以及过程中遇到的“坑”,进行的一次可以落地的总结。我们经常忽略的事情,往往是最关键最紧要的事情,而不是可以随意马虎的事情,我们对待技术马虎,那么技术也会反噬我们的时间。
a345a720dee62f35cb1f785c9146712b
        思路的由来,是因为客户这边的一个需求,需要在HC32F005单片机上进行开发,对于一个陌生的单片机,需要上网下载一些芯片资料,来到小华单片机官网进行寻找,找到很多资料包。进行分类整理。以便后续使用。
一、文件list
7478d7795cb3c851f6f3561d2b4533c9
        对于熟悉华大单片机而言,这些文档应该都已经熟读于心了。而对于老刘这样的新手而言,还是摸不到头绪。既然摸不到头绪,我们就要从几步进行。以下是老刘绘制的项目流程图,可以进行借鉴和参考。
二、 老刘的项目流程图
8a9b4100a880c5359963332b9b9ed2bc
三、卡在了哪里?
第一坑:
        在对例程的通讯部分进行仿真的时候,发现无法仿真,根本找不到芯片。怎么办?
进行电源检查,没有问题;
进行原理图检查,也没有问题;(原理图是按照网上购买的单片机最小系统板进行绘制的。)
查看是不是外部晶振使用的8MHz对单片机进行影响,结果不是这个原因;
更换仿真器,试验了J-link、试验了创新工坊的仿真器,都找不到芯片;
查看芯片的RST引脚的接法是否正确,依然不是这个问题。
       最终发现,在给线路板进行打丝印的时候,RST的丝印和DIO的丝印放错了位置,互换之后,问题解决。以后进行标注丝印的时候,应该多注意一下,两个不一样的丝印会耽误很多时间。
        终于找到了芯片,也能够仿真了。松了一口气;本以为一路畅通,结果还有下面的问题。
第二坑:
        进行串口通讯的时候,发现只有第一个字节正确,其它的字节是错误的,第一个想到的就是波特率的问题。于是进行如下的尝试。
在论坛上发帖子进行求助,看看是否有人遇到相似的问题。
在华大的QQ技术支持群进行求助,看看是否有人遇到相似的问题。
查看软件手册,主要是针对串口部分进行尝试。
057060897a3c129211228be8ecbcd8d6
        看了之后,一头雾水,这都是什么,怎么出现这么多的模式,和我的认知有很大的偏差。仔细阅读各种模式,代码进行多次尝试。收效甚微。
4. 代码部分
     串口初始化部分
static void App_UartInit(void)
{
    stc_uart_cfg_t  stcCfg;

    _UartBaudCfg();

    stcCfg.enRunMode = UartMode1;//测试项,更改此处来转换4种模式测试
    Uart_Init(M0P_UART1, &stcCfg);

    ///< UART中断配置
    Uart_EnableIrq(M0P_UART1, UartRxIrq);
    Uart_ClrStatus(M0P_UART1, UartRC);
    EnableNvic(UART1_IRQn, IrqLevel3, TRUE);

}

      串口配置部分代码
static void _UartBaudCfg(void)
{
    uint16_t timer=0;

    stc_uart_baud_cfg_t stcBaud;
    stc_bt_cfg_t stcBtCfg;

    DDL_ZERO_STRUCT(stcBaud);
    DDL_ZERO_STRUCT(stcBtCfg);

    //外设时钟使能
    Sysctrl_SetPeripheralGate(SysctrlPeripheralBt,TRUE);//模式0/2可以不使能
    Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1,TRUE);

    stcBaud.bDbaud  = 0u;//双倍波特率功能
    stcBaud.u32Baud = 9600u;//更新波特率位置
    stcBaud.enMode  = UartMode1; //计算波特率需要模式参数
    stcBaud.u32Pclk = Sysctrl_GetPClkFreq(); //获取PCLK
    timer = Uart_SetBaudRate(M0P_UART1, &stcBaud);

    stcBtCfg.enMD = BtMode2;
    stcBtCfg.enCT = BtTimer;
    Bt_Init(TIM1, &stcBtCfg);//调用basetimer1设置函数产生波特率
    Bt_ARRSet(TIM1,timer);
    Bt_Cnt16Set(TIM1,timer);
    Bt_Run(TIM1);

}

       时钟初始化部分
//时钟初始化配置
void App_ClkInit(void)
{
    stc_sysctrl_clk_cfg_t stcCfg;

    ///< 开启FLASH外设时钟
    Sysctrl_SetPeripheralGate(SysctrlPeripheralFlash, TRUE);

    ///<========================== 时钟初始化配置 ===================================
    ///< 因要使用的时钟源HCLK小于24M:此处设置FLASH 读等待周期为0 cycle(默认值也为0 cycle)
    Flash_WaitCycle(FlashWaitCycle0);

    ///< 时钟初始化前,优先设置要使用的时钟源:此处设置RCH为4MHz
    Sysctrl_SetRCHTrim(SysctrlRchFreq4MHz);

    ///< 选择内部RCH作为HCLK时钟源;
    stcCfg.enClkSrc    = SysctrlClkRCH;
    ///< HCLK SYSCLK/1
    stcCfg.enHClkDiv   = SysctrlHclkDiv1;
    ///< PCLK 为HCLK/1
    stcCfg.enPClkDiv   = SysctrlPclkDiv1;
    ///< 系统时钟初始化
    Sysctrl_ClkInit(&stcCfg);
}

        代码没有任何的问题。
5. QQ群的小伙伴问VCAP是否接错了,查看了一下原理图,没有错误,接两个电容到GND;
6. 论坛的小伙伴回复,你修改模式1或许有惊喜。更改之后,问题解决。
总结:数据手册上说的已经很明白了,模式1为异步模式全双工。还是看datasheet不全面造成的问题,卡了两天的时间。不能马虎的。
ea91063e623d70d9ca4de077edcbf5f0
四、继续仿真
        那就发送2023666666来测试一下吧。
1ae1fe30e5d02ec9ba74923054e8b791
        一切顺利。
结:
        或许我们会走一些弯路,但是相信结果是好的,一个朋友问我,半年内你是否有一件事情是自己不想做,还在坚持做的呢?我说,你或许有,你都坚持加班三年了。


使用特权

评论回复

打赏榜单

21小跑堂 打赏了 30.00 元 2023-01-16
理由:恭喜通过原创审核!期待您更多的原创作品~

评论
cooldog123pp 2023-1-27 20:03 回复TA
楼主这算给大家填坑了! 
21小跑堂 2023-1-16 09:38 回复TA
新的MCU开发最该注意的还是细节,总结失败经验,减少因粗心造成的错误。 
chenjun89| | 2023-1-11 19:43 | 显示全部楼层
这个MCU开发板是原厂的?

使用特权

评论回复
单片小菜|  楼主 | 2023-1-12 09:42 | 显示全部楼层
chenjun89 发表于 2023-1-11 19:43
这个MCU开发板是原厂的?

仿的,自己做的

使用特权

评论回复
华大MCU代理| | 2023-1-12 15:03 | 显示全部楼层
老刘还是牛X的

使用特权

评论回复
单片小菜|  楼主 | 2023-1-12 16:51 | 显示全部楼层

多谢夸奖

使用特权

评论回复
weifeng90| | 2023-1-16 19:21 | 显示全部楼层
国产替代踩的坑不少

使用特权

评论回复
guguo8266| | 2023-1-19 07:57 | 显示全部楼层
老刘还是牛

使用特权

评论回复
豌豆爹| | 2023-1-28 14:52 | 显示全部楼层
牛刘不是盖的,哈哈

使用特权

评论回复
豌豆爹| | 2023-1-28 14:52 | 显示全部楼层
牛刘不是盖的,哈哈

使用特权

评论回复
tpgf| | 2023-2-3 11:24 | 显示全部楼层
没明白楼主的意思 丝印放错了是什么意思 焊接芯片的方向出现了问题?

使用特权

评论回复
qcliu| | 2023-2-3 11:48 | 显示全部楼层
楼主最后接收数据有错误的问题是如何解决的呢

使用特权

评论回复
drer| | 2023-2-3 11:54 | 显示全部楼层
楼主的第二个坑好像没有得到改善是吗

使用特权

评论回复
coshi| | 2023-2-3 12:07 | 显示全部楼层
楼主遇到的问题也是不少了 相应的解决方法也非常老练

使用特权

评论回复
kxsi| | 2023-2-3 12:15 | 显示全部楼层
接收数据出现错误 是不是因为晶振不够精准呀

使用特权

评论回复
wiba| | 2023-2-3 13:10 | 显示全部楼层
weifeng90 发表于 2023-1-16 19:21
国产替代踩的坑不少

毕竟厂家不一样 即便换成国外其他厂家的 也是一个道理

使用特权

评论回复
nongfuxu| | 2023-2-3 13:25 | 显示全部楼层
这是卖惨贴

分析
1)楼主大意,和经验不足。
2)原厂技术支持不合格。
   看一下STM32芯片的栗子代码,非常多、非常仔细。
   再看一下华大的栗子程序,你理解了嘛?

使用特权

评论回复
发新帖 本帖赏金 30.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则