找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1561|回复: 0
收起左侧

新唐M482单片机串口读不到发送寄存器

[复制链接]
ID:878906 发表于 2021-8-5 17:00 | 显示全部楼层 |阅读模式
最近在调试新唐 M482串口,想去判断发送数据是否发完,去读里面的寄存器读不到。
  1. void SYS_Init(void)
  2. {

  3.     /* Set XT1_OUT(PF.2) and XT1_IN(PF.3) to input mode */
  4.         PF->MODE &= ~(GPIO_MODE_MODE2_Msk | GPIO_MODE_MODE3_Msk);

  5.     /* Enable HXT clock (external XTAL 12MHz) */
  6.         CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

  7.     /* Wait for HXT clock ready */
  8.         CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

  9.     /* Set core clock as PLL_CLOCK from PLL */
  10.         CLK_SetCoreClock(FREQ_100MHZ);

  11.     /* Set PCLK0/PCLK1 to HCLK/2 */
  12.         //CLK->PCLKDIV = (CLK_PCLKDIV_PCLK0DIV2 | CLK_PCLKDIV_PCLK1DIV2);
  13.         CLK->PCLKDIV = CLK_PCLKDIV_APB0DIV_DIV2 | CLK_PCLKDIV_APB1DIV_DIV2;

  14.         CLK_EnableModuleClock(EMAC_MODULE);
  15.         //CLK_EnableModuleClock(TMR2_MODULE);//time2_delay

  16.   // Configure MDC clock rate to HCLK / (127 + 1) = 1.5 MHz if system is running at 192 MHz
  17.         CLK_SetModuleClock(EMAC_MODULE, 0, CLK_CLKDIV3_EMAC(127));
  18.       // CLK_SetModuleClock(TMR2_MODULE, CLK_CLKSEL1_TMR2SEL_HXT, 0);//time2_delay

  19.         SYS->GPC_MFPL |= SYS_GPC_MFPL_PC6MFP_EMAC_RMII_RXD1 | SYS_GPC_MFPL_PC7MFP_EMAC_RMII_RXD0;
  20.         SYS->GPC_MFPH |= SYS_GPC_MFPH_PC8MFP_EMAC_RMII_REFCLK;
  21.         SYS->GPE_MFPH |= SYS_GPE_MFPH_PE8MFP_EMAC_RMII_MDC |
  22.                      SYS_GPE_MFPH_PE9MFP_EMAC_RMII_MDIO |
  23.                      SYS_GPE_MFPH_PE10MFP_EMAC_RMII_TXD0 |
  24.                      SYS_GPE_MFPH_PE11MFP_EMAC_RMII_TXD1 |
  25.                      SYS_GPE_MFPH_PE12MFP_EMAC_RMII_TXEN;

  26.         // Enable high slew rate on all RMII TX output pins
  27.         PE->SLEWCTL = (GPIO_SLEWCTL_HIGH << GPIO_SLEWCTL_HSREN10_Pos) |
  28.                   (GPIO_SLEWCTL_HIGH << GPIO_SLEWCTL_HSREN11_Pos) |
  29.                   (GPIO_SLEWCTL_HIGH << GPIO_SLEWCTL_HSREN12_Pos);

  30. }

  31. char uart3_send(unsigned char psdt)
  32. {
  33. printf("\n==rs485_send==
  34. UART_INTSTS_TXENDINT_Msk=%d,UART_INTSTS_TXENDIF_Msk=%d,UART_INTSTS_THREINT_Msk=%d,UART_INTSTS_THREIF_Msk=%d\n",UART3->INTSTS
  35. & UART_INTSTS_TXENDINT_Msk,UART3->INTSTS &
  36. UART_INTSTS_TXENDIF_Msk,UART3->INTSTS &
  37. UART_INTSTS_THREINT_Msk,UART3->INTSTS & UART_INTSTS_THREIF_Msk);
  38. printf("\n==rs485_send==

  39. UART_FIFOSTS_TXEMPTYF_Msk=%d,UART_FIFOSTS_TXFULL_Msk=%d,UART_FIFOSTS_TXEMPTY_Msk=%d\n",UART3->FIFOSTS
  40. & UART_FIFOSTS_TXEMPTYF_Msk,UART3->FIFOSTS &
  41. UART_FIFOSTS_TXFULL_Msk,UART3->FIFOSTS &
  42. UART_FIFOSTS_TXEMPTY_Msk);
  43.         //if (UART_GET_INT_FLAG(UART2, UART_INTSTS_TXENDINT_Msk))//发送完成中断
  44.         {
  45.                 UART_WRITE(UART3 , psdt);
  46.                 return (1);
  47.         }
  48.         //else
  49.         //{
  50.         //        return (0);
  51.         //}
  52.         
  53. }
  54. void UART3_IRQHandler(void)
  55. {
  56.         unsigned char rdat;
  57.         if(UART_GET_INT_FLAG(UART3, UART_INTSTS_RDAINT_Msk) )//RDA中断
  58.         {
  59.             /* Get all the input characters */
  60.                 while(UART_IS_RX_READY(UART3))
  61.                 {

  62.                     /* Get the character from UART Buffer */
  63.                         rdat = UART_READ(UART3);
  64.                 rs485_serial_interrupt(rdat);
  65.                 }
  66.                            /* Disable UART RDA/THRE/Time-out interrupt */
  67.         }

  68. }

  69. void UART3_Init(void)
  70. {
  71.                 /* Enable UART module clock */
  72.         CLK_EnableModuleClock(UART3_MODULE);//允许串口1模块时钟

  73.         /* Select UART module clock source as HXT and UART module clock divider as 1 */
  74.         CLK_SetModuleClock(UART3_MODULE, CLK_CLKSEL3_UART3SEL_HXT, CLK_CLKDIV4_UART3(1));//设置串口1时钟为HXT
  75.         
  76.              /* Set GPC multi-function pins for UART1 RXD (PC9)and TXD (PC10)*/
  77.             SYS->GPC_MFPH &= ~(SYS_GPC_MFPH_PC9MFP_Msk | SYS_GPC_MFPH_PC10MFP_Msk);
  78.             SYS->GPC_MFPH |= (SYS_GPC_MFPH_PC9MFP_UART3_RXD | SYS_GPC_MFPH_PC10MFP_UART3_TXD);
  79.         
  80.         SYS_ResetModule(UART3_MODULE);//复位串口1

  81.             /* Configure UART1 and set UART1 baud rate */
  82.             UART_Open(UART3, 115200);
  83.         NVIC_EnableIRQ(UART3_IRQn);
  84.        UART_EnableInt(UART3, UART_INTEN_RDAIEN_Msk);//接收数据中断
  85.        UART3->INTSTS = (UART_INTSTS_TXENDIF_Msk);
  86.         //UART_EnableInt(UART1, (UART_INTEN_RDAIEN_Msk|UART_INTEN_TXENDIEN_Msk));//接收数据中断  发送完成中断
  87.         //NVIC_SetPriority(UART1_IRQn, 0);//中断优先级

  88. }


  89. int main(void)
  90. {

  91. /* Unlock protected registers */
  92.         SYS_UnlockReg();

  93.          /* Init System, peripheral clock and multi-function I/O */
  94.         SYS_Init();
  95.         /* Lock protected registers */
  96.             SYS_LockReg();
  97.         
  98.          /* Init UART0 for printf */
  99.         UART0_Init();//串口打印

  100.         UART3_Init();

  101. WDT_Init();/* Init watchdog */
  102.         
  103.         Kick_Dog();
  104.         while(1)
  105.         {

  106.         }

  107. }

  108. 监测这如下寄存器,不管有没有数据发送下面打印出来的数据都是一样

  109. printf("\n==rs485_send==
  110. UART_INTSTS_TXENDINT_Msk=%d,UART_INTSTS_TXENDIF_Msk=%d,UART_INTSTS_THREINT_Msk=%d,UART_INTSTS_THREIF_Msk=%d\n",UART3->INTSTS
  111. & UART_INTSTS_TXENDINT_Msk,UART3->INTSTS &
  112. UART_INTSTS_TXENDIF_Msk,UART3->INTSTS &
  113. UART_INTSTS_THREINT_Msk,UART3->INTSTS & UART_INTSTS_THREIF_Msk);
  114. printf("\n==rs485_send==

  115. UART_FIFOSTS_TXEMPTYF_Msk=%d,UART_FIFOSTS_TXFULL_Msk=%d,UART_FIFOSTS_TXEMPTY_Msk=%d\n",UART3->FIFOSTS
  116. & UART_FIFOSTS_TXEMPTYF_Msk,UART3->FIFOSTS &
  117. UART_FIFOSTS_TXFULL_Msk,UART3->FIFOSTS &
  118. UART_FIFOSTS_TXEMPTY_Msk);
复制代码


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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