搜索

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

[复制链接]
33|18
 楼主 | 2020-11-2 23:25 | 显示全部楼层 |阅读模式
用的是MSP430G2353单片机,UART在9600波特率下可以成功发送数据,但是是在主函数里发送的,没有进入发送中断。

使用特权

评论回复
| 2020-11-2 23:29 | 显示全部楼层
你遇到什么问题

使用特权

评论回复
 楼主 | 2020-11-2 23:32 | 显示全部楼层
但是测试接收数据功能时,就是进不去中断。

使用特权

评论回复
| 2020-11-2 23:37 | 显示全部楼层
用外部晶振了吗

使用特权

评论回复
 楼主 | 2020-11-2 23:40 | 显示全部楼层
没有,MCLK、SMLCK的时钟来源均为内部DCO,UART时钟来源为SMCLK,但是进不去中断。

使用特权

评论回复
| 2020-11-2 23:44 | 显示全部楼层
像是时钟问题

使用特权

评论回复
 楼主 | 2020-11-2 23:50 | 显示全部楼层
将UART时钟调为ACLK后,还是进不去中断。

使用特权

评论回复
| 2020-11-2 23:55 | 显示全部楼层
看门狗的中断程序

使用特权

评论回复
 楼主 | 2020-11-2 23:58 | 显示全部楼层
也无法进入中断。

使用特权

评论回复
| 2020-11-3 19:24 | 显示全部楼层
把接收的代码贴出来

使用特权

评论回复
 楼主 | 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
}

使用特权

评论回复
| 2020-11-3 19:31 | 显示全部楼层
你关了看门狗,怎么可能会进入看门狗中断

使用特权

评论回复
| 2020-11-3 19:34 | 显示全部楼层
也没看到你开中断功能

使用特权

评论回复
 楼主 | 2020-11-3 19:38 | 显示全部楼层
这个是串口的程序,看门狗的代码没有关看门狗的语句。

使用特权

评论回复
 楼主 | 2020-11-3 19:43 | 显示全部楼层

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

使用特权

评论回复
 楼主 | 2020-11-3 19:47 | 显示全部楼层
现在在主函数里可以收到串口数据。

使用特权

评论回复
| 2020-11-3 19:50 | 显示全部楼层
你的主函数写全了?

使用特权

评论回复
| 2020-11-3 19:53 | 显示全部楼层

还有while呢吧

使用特权

评论回复
 楼主 | 2020-11-3 19:56 | 显示全部楼层
是的,我明白了

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /6 下一条

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