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

[方案相关] 被HC32F005折磨的老刘

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

  4.     _UartBaudCfg();

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

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

  11. }

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

  4.     stc_uart_baud_cfg_t stcBaud;
  5.     stc_bt_cfg_t stcBtCfg;

  6.     DDL_ZERO_STRUCT(stcBaud);
  7.     DDL_ZERO_STRUCT(stcBtCfg);

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

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

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

  22. }

       时钟初始化部分
  1. //时钟初始化配置
  2. void App_ClkInit(void)
  3. {
  4.     stc_sysctrl_clk_cfg_t stcCfg;

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

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

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

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

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


打赏榜单

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

评论

楼主这算给大家填坑了!  发表于 2023-1-27 20:03
新的MCU开发最该注意的还是细节,总结失败经验,减少因粗心造成的错误。  发表于 2023-1-16 09:38
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芯片的栗子代码,非常多、非常仔细。
   再看一下华大的栗子程序,你理解了嘛?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:资深专家
简介:丰富的嵌入式软硬件开发管理经验; 丰富的项目管理经验并具备敏锐的市场嗅觉; 丰富的产品的供应链资源及工厂管控能力; 具备很强的产品落地经验(从产品企划到产品量产);

107

主题

2354

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部