打印
[MCU]

在主函数里发送的没有进入发送中断

[复制链接]
636|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
spark周|  楼主 | 2020-11-2 23:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
heweibig| | 2020-11-2 23:29 | 只看该作者
你遇到什么问题

使用特权

评论回复
板凳
spark周|  楼主 | 2020-11-2 23:32 | 只看该作者
但是测试接收数据功能时,就是进不去中断。

使用特权

评论回复
地板
jiahy| | 2020-11-2 23:37 | 只看该作者
用外部晶振了吗

使用特权

评论回复
5
spark周|  楼主 | 2020-11-2 23:40 | 只看该作者
没有,MCLK、SMLCK的时钟来源均为内部DCO,UART时钟来源为SMCLK,但是进不去中断。

使用特权

评论回复
6
liliang9554| | 2020-11-2 23:44 | 只看该作者
像是时钟问题

使用特权

评论回复
7
spark周|  楼主 | 2020-11-2 23:50 | 只看该作者
将UART时钟调为ACLK后,还是进不去中断。

使用特权

评论回复
8
zhaoxqi| | 2020-11-2 23:55 | 只看该作者
看门狗的中断程序

使用特权

评论回复
9
spark周|  楼主 | 2020-11-2 23:58 | 只看该作者
也无法进入中断。

使用特权

评论回复
10
huangchui| | 2020-11-3 19:24 | 只看该作者
把接收的代码贴出来

使用特权

评论回复
11
spark周|  楼主 | 2020-11-3 19:28 | 只看该作者
#include <msp430g2353.h>
void CLK_INIT(void);
void USCI_UART_INIT(void);
int flag=1;

void main(void)
{
  volatile unsigned int i;
   WDTCTL = WDTPW + WDTHOLD;                 // 关闭看门狗
  CLK_INIT();                               // SMCLK=1.6MHz
  _EINT()
  USCI_UART_INIT();


void CLK_INIT(void)
{
  BCSCTL1 = 0X00;                           // 将寄存器的内容清零; XT2震荡器开启; LFTX1工作在高频模式; ACLK的分频因子为1      
  DCOCTL  |= DCO1+DCO0;
  BCSCTL1 |= RSEL3;                                         // DCO Rsel=8,DC0=3,MOD=0(Freq=1.6MHz)
  BCSCTL2 |= 0x00;                         // MCLK和SMCLK的时钟源为DCOCLK,分频因子为1
}

void USCI_UART_INIT(void)
{
  P1SEL |= 0x06;                            // P1.1,1.2作为UART的RXD/TXD
  P1SEL2 |= 0x06;
  UCA0CTL0=0x00;                                                        // 默认设置:无校验位、8位字符、1位停止位、UART模式
  UCA0CTL1 |= UCSSEL1;                                // UCLK = SMCLK
  //ME1 |= UTXE0 + URXE0;                     // 使能USART0的TXD/RXD,ME1为使能寄存器

  //9600
  UCA0BR1 = 0x00;
  UCA0BR0 = 0xA6;                           // 1.6MHz/9600 = 1600000/9600=166.67 ≈ 166 (00A6h)                              
//  UCA0MCTL = 0x57;                          // 波特率调整控制寄存器 */
  UCA0CTL1 &= ~UCSWRST;                     // Initialize USCI state machine
  IE2 |= UCA0RXIE;                          // IE1 |= UCA0TXIE+UCA0RXIE;  只使能USART0 RX中断,否则会发生乱码
  UCA0TXBUF=0x03;
}


#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
  while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
  UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character
}

使用特权

评论回复
12
zhanghqi| | 2020-11-3 19:31 | 只看该作者
你关了看门狗,怎么可能会进入看门狗中断

使用特权

评论回复
13
zhenykun| | 2020-11-3 19:34 | 只看该作者
也没看到你开中断功能

使用特权

评论回复
14
spark周|  楼主 | 2020-11-3 19:38 | 只看该作者
这个是串口的程序,看门狗的代码没有关看门狗的语句。

使用特权

评论回复
15
spark周|  楼主 | 2020-11-3 19:43 | 只看该作者

_EINT()语句有没有都进不去中断,贴代码的时候我把_EINT()注释掉了,所以就给删了:P。

使用特权

评论回复
16
spark周|  楼主 | 2020-11-3 19:47 | 只看该作者
现在在主函数里可以收到串口数据。

使用特权

评论回复
17
yszong| | 2020-11-3 19:50 | 只看该作者
你的主函数写全了?

使用特权

评论回复
18
dengdc| | 2020-11-3 19:53 | 只看该作者

还有while呢吧

使用特权

评论回复
19
spark周|  楼主 | 2020-11-3 19:56 | 只看该作者
是的,我明白了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

821

主题

10121

帖子

4

粉丝