[技术问答] HC32L073KATA不进串口中断回调函数

[复制链接]
 楼主| tangjie123 发表于 2021-11-10 14:36 | 显示全部楼层 |阅读模式
我是照着官方例程写的,官方的例程,可以进串口中断回调函数,我自己不行,串口配置代码如下
  1. #include "bsp_uart.h"

  2. uint8_t rxdata;

  3. static void Uart1_GPIO_Init(void)
  4. {
  5.     stc_gpio_cfg_t stcGpioCfg;
  6.    
  7.     DDL_ZERO_STRUCT(stcGpioCfg);
  8.    
  9.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
  10.    
  11.     ///<TX->PA0
  12.     stcGpioCfg.enDir =  GpioDirOut;
  13.     Gpio_Init(GpioPortA,GpioPin0,&stcGpioCfg);
  14.     Gpio_SetAfMode(GpioPortA,GpioPin0,GpioAf2); //配置PA00为LPUART1_TX
  15.    
  16.     //<RX->PA1
  17.     stcGpioCfg.enDir =  GpioDirIn;
  18.     Gpio_Init(GpioPortA,GpioPin1,&stcGpioCfg);
  19.     Gpio_SetAfMode(GpioPortA,GpioPin1,GpioAf2); //配置PA01为LPUART1_RX
  20. }

  21. void Uart1_Init(void)
  22. {
  23.     stc_lpuart_cfg_t  stcCfg;

  24.     DDL_ZERO_STRUCT(stcCfg);
  25.     Uart1_GPIO_Init();
  26.     ///<外设模块时钟使能
  27.     Sysctrl_SetPeripheralGate(SysctrlPeripheralLpUart1,TRUE);   
  28.    
  29.     ///<LPUART 初始化
  30.     stcCfg.enStopBit = LPUart1bit;                   ///<1停止位   
  31.     stcCfg.enMmdorCk = LPUartDataOrAddr;                   ///<偶校验
  32.     stcCfg.stcBaud.enSclkSel = LPUartMskPclk;        ///<传输时钟源
  33.     stcCfg.stcBaud.u32Sclk = Sysctrl_GetPClkFreq();  ///<PCLK获取
  34.     stcCfg.stcBaud.enSclkDiv = LPUartMsk4Or8Div;     ///<采样分频
  35.     stcCfg.stcBaud.u32Baud = 115200;                   ///<波特率
  36.     stcCfg.enRunMode = LPUartMskMode3;               ///<工作模式
  37.     LPUart_Init(M0P_LPUART1, &stcCfg);
  38.      
  39.     ///<LPUART 中断使能
  40.     LPUart_ClrStatus(M0P_LPUART1,LPUartRC);          ///<清接收中断请求
  41.     LPUart_ClrStatus(M0P_LPUART1,LPUartTC);          ///<清发送中断请求
  42.     LPUart_DisableIrq(M0P_LPUART1,LPUartRxIrq);      ///<禁止接收中断
  43.     LPUart_EnableIrq(M0P_LPUART1,LPUartTxIrq);       ///<使能发送中断
  44.     EnableNvic(LPUART1_IRQn,IrqLevel3,TRUE);         ///<系统中断使能
  45. }

  46. ///<LPUART1 中断服务函数
  47. void LpUart1_IRQHandler(void)
  48. {
  49.     if(LPUart_GetStatus(M0P_LPUART1, LPUartTC))
  50.     {
  51.         LPUart_ClrStatus(M0P_LPUART1, LPUartTC);   ///<清发送中断请求
  52.         
  53.         LPUart_DisableIrq(M0P_LPUART1,LPUartTxIrq);///<禁止发送中断
  54.         LPUart_EnableIrq(M0P_LPUART1,LPUartRxIrq); ///<使能接收中断
  55.     }
  56.    
  57.     if(LPUart_GetStatus(M0P_LPUART1, LPUartRC))    ///接收数据
  58.     {
  59.         LPUart_ClrStatus(M0P_LPUART1, LPUartRC);   ///<清接收中断请求
  60.         rxdata = LPUart_ReceiveData(M0P_LPUART1);///读取数据
  61.         
  62.         LPUart_DisableIrq(M0P_LPUART1,LPUartRxIrq);///<禁止接收中断
  63.         LPUart_EnableIrq(M0P_LPUART1,LPUartTxIrq); ///<使能发送中断
  64.         
  65.         LPUart_SendDataIt(M0P_LPUART1, rxdata); ///把接收数据取反,并发送      
  66.     }
  67. }
main函数:
  1. int32_t main(void)
  2. {
  3.     App_SystemClkInit_PLL48M_byXTH();
  4.     Uart1_Init();
  5. //    p1 = LpUart1_IRQHandler;
  6.    
  7.     //发送数据
  8.     LPUart_SendDataIt(M0P_LPUART1, 0x55);
  9.     while(1)
  10.     {
  11.         ;
  12.     }
  13. }
调试的时候可以interrupts_hc32l07x.c的中断函数入口
  1. /**
  2. *******************************************************************************
  3. ** \brief LPUART1 低功耗串口1 中断处理函数
  4. **
  5. ** \retval
  6. ******************************************************************************/
  7. void LPUART1_IRQHandler(void)
  8. {
  9. #if (INT_CALLBACK_ON == INT_CALLBACK_LPUART1)
  10.     LpUart1_IRQHandler();
  11. #endif
  12. }
代码能跑到LpUart1_IRQHandler()这一句,但是没法进我自己写中断回调函数,感觉像程序找不到我自己写的中断回调函数一样,但是如果把main函数中的p1 = LpUart1_IRQHandler这一句注释去掉,就可以找了我自己写的中断回调函数,其实这一句什么也没干,就是中断回调函数的指针赋值给p1了,然后程序就能够进入我自己写的中断回调函数,这是什么原因,有人清楚吗?
wubangmi 发表于 2021-11-10 14:42 | 显示全部楼层
你自己建的工程,漏了些配置
1636526448877.jpg
 楼主| tangjie123 发表于 2021-11-10 14:57 | 显示全部楼层
wubangmi 发表于 2021-11-10 14:42
你自己建的工程,漏了些配置

我刚刚应该猜测应该是编译配置问题,照着官方的模版,我也找到了这里,所以,加上这一句是什么意思了?
wubangmi 发表于 2021-11-10 15:04 | 显示全部楼层
tangjie123 发表于 2021-11-10 14:57
我刚刚应该猜测应该是编译配置问题,照着官方的模版,我也找到了这里,所以,加上这一句是什么意思了? ...

大概就是防止被编译器优化吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

13

帖子

0

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

7

主题

13

帖子

0

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