查看: 2565|回复: 4

[已解决] KL25Z uart0的程序在FRDM-KL25Z上能正常运行,在自己板子上不.....

[复制链接]

该用户从未签到

1

主题

4

帖子

0

新手上路

Rank: 1

积分
21
最后登录
2017-12-30
发表于 2017-12-29 12:01:17 | 显示全部楼层 |阅读模式
KL25Z uart0的程序在FRDM-KL25Z上能正常运行,在自己板子上不能运行,只不过我自己的板子用的是64脚的封装。
在我的板子上只要一开中断,程序就会一直进中断,比如我发送“abcde”字符串,即使中断里面没有写发这几个字符,程序也会一直发。
有人遇到过这个问题吗?

最佳答案

楼主你好! 请检查如下几点: 1. 你自己板子所用的串口引脚是否在64pin的芯片上存在? 2. 建议你发送中断关掉,直接用while检查发送标志发送。接收用中断没问题。 3. 你可以debug看下,程序一直发,跟进去看看,它 ...
回复

使用道具 举报

该用户从未签到

1

主题

4

帖子

0

新手上路

Rank: 1

积分
21
最后登录
2017-12-30
 楼主| 发表于 2017-12-29 12:02:07 | 显示全部楼层
main函数
  1. int  main (void)
  2. {
  3.     SystemCoreClockUpdate();                                            /* ʱÖÓÅäÖà                    */

  4.     PORT_ENABLE_CLK(MKL_PORTA);                                         /* GPIOʱÖÓʹÄÜ                 */
  5.     PORT_ENABLE_CLK(MKL_PORTB);
  6.     PORT_ENABLE_CLK(MKL_PORTC);
  7.     PORT_ENABLE_CLK(MKL_PORTD);
  8.     PORT_ENABLE_CLK(MKL_PORTE);
  9.    
  10.     uart0Init(9600,0,0,8,1);                                            /* UART0³õʼ»¯                 */
  11.     printf("MCU Start\r\n");   
  12.     while(1){

  13.     }    ;
  14. }
复制代码
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

4

帖子

0

新手上路

Rank: 1

积分
21
最后登录
2017-12-30
 楼主| 发表于 2017-12-29 12:02:43 | 显示全部楼层
  1. void uart0Init( INT32U  ulBaudRate,
  2.                 INT8U   ucParityEnable,
  3.                 INT8U   ucParityType,
  4.                 INT8U   ucDataLength,
  5.                 INT8U   ucStopBit)
  6. {
  7.     UART0_MemMapPtr uartPtr     = UART0_BASE_PTR;
  8.     register INT16U usBaudRate  = 0;  
  9.    
  10. #if UART_PARAM_DEBUG
  11.     UART_CHECK_PARAM(UART_PARAM_LENGTH(ucDataLength));
  12.     UART_CHECK_PARAM(UART_PARAM_STOP(ucStopBit));
  13.     UART_CHECK_PARAM(UART_PARAM_LOGIC(ucParityEnable));
  14.     UART_CHECK_PARAM(UART_PARAM_PARITY(ucParityType));   
  15. #endif
  16.    
  17.     SIM_SOPT2 |= SIM_SOPT2_PLLFLLSEL_MASK;
  18.     SIM_SOPT2 |= SIM_SOPT2_UART0SRC(1);                                         /* Ñ¡ÔñPLLʱÖÓ          */  
  19.     SIM_SCGC4 |= SIM_SCGC4_UART0_MASK;                                          /* ÔÊÐíÍâÉèʱÖÓ         */

  20.     uart0TranControl(UART_TX_DISABLE, UART_RX_DISABLE);                         /* Ê×ÏȽûֹͨÐÅ         */

  21.     #if 1
  22.     PORTA_PCR1 = PORT_PCR_MUX(0x2);                                             /* UART0_TXD            */
  23.     PORTA_PCR2 = PORT_PCR_MUX(0x2);                                             /* UART0_RXD            */
  24.     #endif
  25.     #if 0
  26.     PORTA_PCR14 = PORT_PCR_MUX(0x3);                                            /* UART0_TXD            */
  27.     PORTA_PCR15 = PORT_PCR_MUX(0x3);                                            /* UART0_RXD            */
  28.     #endif  
  29.     #if 0
  30.     PORTD_PCR7 = PORT_PCR_MUX(0x3);                                             /* UART0_TXD            */
  31.     PORTD_PCR6 = PORT_PCR_MUX(0x3);                                             /* UART0_RXD            */
  32.     #endif              
  33.     #if 0
  34.     PORTE_PCR20 = PORT_PCR_MUX(0x4);                                            /* UART0_TXD            */
  35.     PORTE_PCR21 = PORT_PCR_MUX(0x4);                                            /* UART0_RXD            */
  36.     #endif      
  37.     #if 0
  38.     PORTE_PCR17 = PORT_PCR_MUX(0x3);                                            /* UART0_TXD            */
  39.     PORTE_PCR16 = PORT_PCR_MUX(0x3);                                            /* UART0_RXD            */
  40.     #endif        
  41.    
  42.     UART0_C1_REG(uartPtr) &= ~(UART0_C1_M_MASK |                                /* Êý¾Ý³¤¶È             */
  43.                               UART0_C1_PT_MASK |                                /* УÑéλÀàÐÍ           */
  44.                               UART0_C1_PE_MASK);                                /* УÑéλ               */
  45.     UART0_C4_REG(uartPtr) &= ~UART0_C4_M10_MASK;

  46.    
  47.     if (ucDataLength == 10) {
  48.         UART0_C1_REG(uartPtr) |= (ucParityEnable << UART0_C1_PE_SHIFT)|
  49.                                  (ucParityType << UART0_C1_PT_SHIFT);   
  50.         UART0_C4_REG(uartPtr) |= UART0_C4_M10_MASK;   
  51.     } else {
  52.         UART0_C1_REG(uartPtr) |= ((ucDataLength - 8UL) << UART0_C1_M_SHIFT)|
  53.                                  (ucParityEnable << UART0_C1_PE_SHIFT)|
  54.                                  (ucParityType << UART0_C1_PT_SHIFT);               
  55.     }
  56.    
  57.     usBaudRate = SystemBusClock/(ulBaudRate * 16);
  58.     UART0_BDH_REG(uartPtr)  = (usBaudRate & 0x1F00) >> 8;                       /* ²¨ÌØÂÊ               */
  59.     UART0_BDL_REG(uartPtr)  = (INT8U)(usBaudRate & UART0_BDL_SBR_MASK);
  60.     UART0_BDH_REG(uartPtr) &= ~UART0_BDH_SBNS_MASK;                             /* ֹͣλ               */
  61.     UART0_BDH_REG(uartPtr) |= (ucStopBit - 1) << UART0_BDH_SBNS_SHIFT;
  62.     UART0_C2_REG(uartPtr)  &= ~(UART0_C2_TIE_MASK | UART0_C2_TCIE_MASK |        /* Çå³ýÖжÏÉèÖà        */
  63.                               UART0_C2_RIE_MASK | UART0_C2_ILIE_MASK);  

  64.     while((UART0_S1_REG(uartPtr) & UART0_S1_RDRF_MASK) &&
  65.           (UART0_D_REG(uartPtr)));                                              /* Çå½ÓÊÕ»º³åÇø         */
  66.     #if UART0_DEFAULT_OPEN   
  67.     uart0TranControl(UART_TX_ENABLE, UART_RX_ENABLE);                           /* ÅäÖÃÍê³ÉÔÊÐíͨÐÅ     */
  68.     #endif
  69.    
  70.     #if UART0_IRQ_ENABLE   
  71.         #if UART0_SEND_IRQ
  72.         UART0_C2_REG(uartPtr) |= UART0_C2_TCIE_MASK;
  73.         #endif
  74.         #if UART0_RECEIVE_IRQ
  75.         UART0_C2_REG(uartPtr) |= UART0_C2_RIE_MASK;
  76.         #endif               
  77.     NVIC_EnableIRQ(UART0_IRQn);
  78.     NVIC_SetPriority(UART0_IRQn,3);                                             /* Óû§×Ô¼º¶¨Òå         */                    
  79.     #endif            
  80.       
  81. }
复制代码
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

4

帖子

0

新手上路

Rank: 1

积分
21
最后登录
2017-12-30
 楼主| 发表于 2017-12-29 12:03:14 | 显示全部楼层
  1. void UART0_IRQHandler(void)
  2. {     
  3.    UART0_MemMapPtr uartPtr = UART0_BASE_PTR;  
  4.    #if UART0_SEND_IRQ
  5.                                                                                /* ·¢ËÍÖжϴ¦Àí³ÌÐò     */
  6.                                                                                /* Óû§¶¨Òå             */   
  7.    #endif
  8.    #if UART0_RECEIVE_IRQ
  9.    while(UART0_S1_REG(uartPtr) & UART0_S1_RDRF_MASK){                          /* Çå³ýÖжϱêÖ¾         */
  10.        uart0SendChar(UART0_D_REG(uartPtr));                                    /* ·µ»Ø½ÓÊÕÊý¾Ý         */
  11. //        while(!UART0_D_REG(uartPtr));                                           /* Çå½ÓÊÕ»º³åÇø         */
  12.    }   
  13.    #endif
  14. }
复制代码
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24879
最后登录
2025-7-20
发表于 2017-12-29 14:21:41 | 显示全部楼层
楼主你好!
请检查如下几点:
1. 你自己板子所用的串口引脚是否在64pin的芯片上存在?
2. 建议你发送中断关掉,直接用while检查发送标志发送。接收用中断没问题。
3. 你可以debug看下,程序一直发,跟进去看看,它到底在发什么?是否是你要发送的数据?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-20 16:09 , Processed in 0.096861 second(s), 25 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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