找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 659|回复: 0
打印 上一主题 下一主题
收起左侧

hc32l130串口使用内部时钟程序问题

[复制链接]
跳转到指定楼层
楼主
hc32l130使用内部晶振,开启串口发送和接受功能,串口工具发送数据给mcu,程序debug并没有进入到中断,下面是启用内部时钟并开启串口功能完整单片机代码。
  1. #include "ddl.h"
  2. #include "uart.h"
  3. #include "gpio.h"
  4. #include "flash.h"
  5. #include "sysctrl.h"


  6. #define T1_PORT     (3)
  7. #define T1_PIN      (3)
  8. volatile static uint8_t u8RxData;
  9. volatile static uint8_t u8TxCnt = 0;
  10. volatile static uint8_t u8RxCnt = 0;

  11. void App_UartCfg(void);
  12. void App_PortInit(void);
  13. void App_ClkCfg(void);

  14. int32 t main (void)
  15. {
  16. App_ClkCfg () ;

  17. App_PortInit () ;

  18. App_UartCfg();
  19. while (1)
  20. {
  21. if(u8RxCnt>=1)
  22.     {
  23.     u8RxCnt = 0;

  24.     Uart_SendDataIt(MOP_UART1, ~u8RxData);
  25.     }
  26. }

  27. }


  28. void App_ClkCfg(void)
  29. {
  30.     stc_sysctrl_clk_cfg_t sysctrl_clk_cfg;

  31.     Sysctrl_SetPeripheralGate(SysctrlPeripheralFlash, TRUE);

  32.     Flash_WaitCycle(FlashWaitCycle0);

  33.     sysctrl_SetRCHTrim(SysctrlRchFreq8MHz);

  34.     sysctrl_clk_cfg.enClkSrc = SysctrlClkRCH;
  35.     sysctrl_clk_cfg.enHClkDiv = SysctrlHclkDiv1;
  36.     sysctrl_clk_cfg.enPClkDiv = SysctrlPclkDiv1;

  37.     Sysctrl_ClkInit(&sysctrl_clk_cfg);
  38. }

  39. void Uart1_IRQHandler(void)
  40. {
  41.     if(Uart_GetStatue(M0P_UART1, UartRC))
  42.         {
  43.             Uart_ClrStatus(M0P_UART1, UartRC);
  44.             u8RxData = Uart_ReceiveData(M0P_UART1);
  45.             u8RxCnt++;
  46.         }
  47.     if(Uart_GetStatus(M0P_UART1, UartTC))
  48.         {
  49.             Uart_ClrStatus(M0P_UART1, UartTC);
  50.             u8TxCnt++;
  51.         }

  52. }


  53. void App_PortInit(void)
  54. {
  55.     stc_gpio_cfg_t stcGpioCfg;
  56.     DDL_ZERO_STRUCT(stcGpioCfg);
  57.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);

  58.     stcGpioCfg.enDir = GpioDirOut;
  59.     Gpio_Init(GpioPortA, GpioPin2, &stcGpioCfg);
  60.     Gpio_SetAFMode(GpioPortA, GpioPin2, GpioAf1);
  61.    
  62.     stcGpioCfg.enDir = GpioDirIn;
  63.     Gpio_Init(GpioPortA, GpioPin3, &stcGpioCfg);
  64.     Gpio_SetAFMode(GpioPortA, GpioPin3, GpioAf1);
  65. }

  66. void App_UartCfg(void)
  67. {
  68.     stc_uart_cfg_t stcCfg;

  69.     DDL_ZERO_STRUCT(stcCfg);
  70.     Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1, TRUE);

  71.     stcCfg.enRunMode = UartMskMode3;
  72.     stcCfg.enStopBit = UartMsk1bit;
  73.     stcCfg.enMmdorCk = UartMskEven;
  74.     stcCfg.stcBaud.u32Baud = 9600;
  75.     stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div;
  76.     stcCfg.stcBaud.u32Pclk = Sysctrl_GetPClkFreq();
  77.     Uart_Init(M0P_UART1, &stcCfg);

  78.     Uart_ClrStatus(M0P_UART1, UartRC);
  79.     Uart_ClrStatus(M0P_UART1, UartTC);
  80.     Uart_EnableIrq(M0P_UART1, UartRxIrq);
  81.     Uart_EnableIrq(M0P_UART1, UartTxIrq);
  82.     EnableNvic(UART1_IRQn, IrqLevel3, TRUE);
  83.    
  84. }
复制代码
hc32l130数据手册上写的是,时钟在8MHz下,波特率9600,模式三使用8分频,此时的时钟误差在0.16%,



1686376097308.jpg (28.48 KB, 下载次数: 74)

1686376097308.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表