This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

430F1xx的UART0,UART1是否能同时启用?

430F1xx的UART0,UART1是否能同时启用?同时还要考虑使用TIME A,它们在使用内部时钟系统时有什么讲究?我的一个程序在初始化两个UART后,在走到TIME A 后,单步调试就走不下去了。Debug出现的错误是: Target execution stopped ,和 reset_vector:00FFFF DC8.

  • 只要支持UART0、UART1两个串口的芯片就可以同时用。串口和TIMEA选择时钟源没什么干扰,除非在低功耗等场合考虑关闭时钟源的情况需要注意。调试的时候看看看门狗是否已经关闭。UART0、UART1、TIMEA的中断函数是否写的正确,特别是中断地址对不对。

  • Songlin Qin,

    只要你选择的msp430f1xx device支持两个UART(有两个USART模块), 那么UART0和UART1就可以同时启用。UART和TIMER_A的时钟均可选择来自ACLk, SMCLK或者外部。故UART和TIMER_A是可以同时工作的。但是如果系统中有进入LPMx的情况的话,需要考虑进入不同的LPMx,可用的系统时钟(MCLK, SMCLK, ACLK)是不同的。例如在LPM3时,只有ACLK是可用的。即若timer或者UART使用SMCLk作为时钟输入,那么在LPM3时,他们是不能正常工作的。

  • Songlin Qin,

    另外,关于你所描述的,

    Songlin Qin 说:
    reset_vector:00FFFF DC8

    现象不符合常理,因为interrupt vector一般位于0FFFFh − 0FFE0h,不可能超过0xFFFF. 可否具体描述一下或者是截个图?

    你使用的是CCS还是IAR,将其升级到最新版吧。

  • 图1:单步调试停止时的截图。

     图2:单步调试停止前的位置。

     图3:连续运行时,在TIMEA中断程序中设置的断点。但好像没有进入该中断程序中。

    原来的程序是一个UART,TIMRE A,ADC12,LCD12864。是别人写的,能用。现在想改为两个UART,一个TIME A,和LCD12864。

     

    两个初始化UART:

     

    void InitUART0(void)    //修改 初始化458串口   12、11.1

     {    

          P3SEL |= 0x30;                            // P3.4,5 = USART0 TXD/RXD    

           ME1 |= URXE0 + UTXE0;                         // Enable USART0 T/RXD    

            UCTL0 |= CHAR;                            // 8-bit character    

           UTCTL0 |= SSEL0;                          // UCLK = ACLK      ?    

           UBR00 = 0x03;                             // 32k/9600    

          UBR10 = 0x00;                             //    

          UMCTL0 = 0x4a;                            // Modulation    

           UCTL0 &= ~SWRST;                          // Initialize USART state machine    

          IE1 |= URXIE0+UTXIE0;    //使能接收中断    ?发送?

     }

    void InitUART1(void)

     {    

            P3SEL |= 0xC0;                            //将P3.6,P3.7选做UART1的通信端口    

             ME2 |= URXE1+UTXE1;                             //使能USART1的TXD    

             UCTL1 |= CHAR;                            //选择8-bit字符    

             UTCTL1 |= SSEL0;                          //驱动时钟选择ACLK    

             UBR01 = 0x03;                             //波特率9600    

              UBR11 = 0x00;    

              UMCTL1 = 0x4a;                            //调整    

              UCTL1 &= ~SWRST;                          //初始化UART状态机    

               IE2|=URXIE1;   //QQ12/14 }

    新建文件夹.rar
  • Songlin Qin,

    看了你的截图,在使能中断后,系统复位了。你查看一下中断标志位,看看是什么原因导致的系统复位。

    感觉在设置timer之前,系统就复位了,故一直不进入timer中断。你试着在程序的第一句关闭看门狗处设置一个断点,看看程序是不是一直跑到此断点处。

  • 我用的USB仿真器是淘宝网上的国产货。能被IAR6.0识别和使用,但CCS5.3认不出这个仿真器。除了买一个TI 的真品,又没有其它办法。

  • 确实是系统复位了,每一次都会跑到程序起点,请问如何解决?

  • 问题解决了,把 initUART0()的最后一句的UTXIE0去掉即可。问题是为什么这个UTXIE0会引起系统复位呢?

  • Songlin Qin,

    请问你具体使用的device型号是什么?UART应该不会引起系统复位的。

  • 我调试的芯片是430F149,小系统是在淘宝上买的,自己又扩了一LCD12864的接口和两个485串口。 前面的两个initUART()是现成的UART.c上抄来的。后来我发现那个initUART0()单独使用也有问题。通过比较两个程序才解决了问题。是不是淘宝上买来UCB仿真器也有问题,反正CCS5.3是认不出那个仿真器。

  • 仿真器不能乱买,要知道他确实没问题才能买。否则除了问题还不知道在哪里,很悲催。