标题:
MSP430F169单片机串口通信程序 求助
[打印本页]
作者:
ruopan
时间:
2020-8-14 16:06
标题:
MSP430F169单片机串口通信程序 求助
芯片 :MSP430F169
IO:3.6 3.7
功能 :串口通信
问题:
不能建立通信
个人感觉自己的串口配置没问题希望大佬慧眼识精解决一下问题
代码:
#include "msp430x16x.h"
#include "math.h"
void BASCI_CLOCK(void);
void write_flashA(void);
void copy_flashAtoB(void); //没用到
void UART_GPIO_CONFIG(void);
void UART_CONFIG(void);
unsigned char value='0'; //要写的8位数据
unsigned int i;
static char string1[] = { "Hello World\r\n" };
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
BASCI_CLOCK();
FCTL2 = FWKEY + FSSEL0 + FN5; //FLASH时钟初始化 MCLK 32分频
write_flashA();
//copy_flashAtoB(); //复制
_NOP();
UART_GPIO_CONFIG();
UART_CONFIG();
_EINT();
while(1);
}
//写内存
void write_flashA(void)
{
char *flash_ptr;
unsigned int i;
flash_ptr = (char *) 0x1080; //指针指向你写的F
FCTL1 = FWKEY + ERASE; //执行写操作权限 擦除个别段
FCTL3 = FWKEY; //赋予写操作权限
*flash_ptr = 0; //执行一次flash 需要一次假写入
FCTL1 = FWKEY + WRT; //执行写操作权限 打开写模式
for (i=0; i<128; i++)
{
*flash_ptr++ = value;//写入数据 真正执行写操
value++;
}
FCTL1 = FWKEY ; //清除 WRT写操作位
FCTL3 = FWKEY + LOCK; //FLASH上锁 防止误操作
}
//复制内存
void copy_flashAtoB(void)
{
char *flash_ptrA;
char *flash_ptrB;
unsigned int i;
flash_ptrA = (char *) 0x1080; // 指针指向闪存段A
flash_ptrB = (char *)0x1000; // 指针指向闪存段B
FCTL1 = FWKEY + ERASE; // 执行写权限 擦除缓存
FCTL3 = FWKEY; // 执行写权限
*flash_ptrB = 0; // 执行一次假写操作
FCTL1 = FWKEY + WRT; // 执行写权限 开启写模式
for (i=0; i<128; i++)
{
*flash_ptrB++ = *flash_ptrA++; // 写入数据
}
FCTL1 = FWKEY; // 关闭 WRT 写模式位
FCTL3 = FWKEY + LOCK; // 对寄存器进行上锁
}
void UART_GPIO_CONFIG(void)
{
P3SEL |= 0XC0;
}
//串口1配置
void UART_CONFIG(void)
{
ME2 |= UTXE1 + URXE1;
U1CTL |= CHAR;
U1TCTL |= SSEL1;
U1BR0 |= 0X45;
U1BR1 |= 0X00;
U1MCTL |= 0X16;
U1CTL &= ~SWRST;
IE2 |= URXIE1 + UTXIE1;
IFG2 &=~UTXIFG1;
}
#pragma vector = UART1TX_VECTOR
__interrupt void UART1_TX(void)
{
if(i<(sizeof(string1)-1))
{
U1TXBUF = string1[i++] ;
}
}
#pragma vector = USART1RX_VECTOR
__interrupt void UART1_RX(void)
{
if(U1RXBUF == 'u')
{
i=0;
U1TXBUF = string1[i++];
}
}
//基本时钟初始化 8MHZ作为 MCLK 和 SMCLK
void BASCI_CLOCK(void)
{
unsigned int iq0;
BCSCTL1&=~XT2OFF;
do
{
IFG1&=~OFIFG;
for(iq0=0xff;iq0>0;iq0--);
}
while((IFG1&OFIFG)!=0);
BCSCTL2=0x88;
}
作者:
ruopan
时间:
2020-8-14 16:09
昨天的帖子解决了问题 能正常简历通信,然后今天用同样的代码就蹦了
作者:
ruopan
时间:
2020-8-17 14:24
ruopan 发表于 2020-8-14 16:09
昨天的帖子解决了问题 能正常简历通信,然后今天用同样的代码就蹦了
现在,我能正常通信了,但是还是希望有大手子帮我看看之前建立不了的通信问题在哪里
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1