MSP430 串口1 实现即时通讯
芯片:430F169
现在市面上大多数单片机都自带串口,本章介绍如何建立430串口通讯
单片机通过接收口(URXD)和发送口(UTXD)和外界进行通讯
430F169自带串口0和串口1两个通讯口
串口通讯是基于系统时钟上进行的,系统时钟的配置可以参考我之前的系统时钟进行配置。
1 串口控制各种寄存器
<1>UxCTL,串口控制寄存器
<2>UxTCTL,串口传输控制寄存器
<3>UxRCTL,串口接收控制寄存器
<4>UxBR0,波特率控制寄存器0
<5>UxBR1,波特率控制寄存器1
<6>UxMCTL,调制控制寄存器
<7>UxRXBUF,接收缓存寄存器
<8>UxTXBUF,传输缓存寄存器
<9>ME1,模式选择寄存器1
<10>ME2,模式选择寄存器2
<11>IE1,中断使能寄存器1
<12>IE2,中断使能寄存器2
<13>IFG1,中断标志寄存器1
<14>IFG2,中断标志寄存器2
关于这些寄存器作用请查阅用户指导手册!用户手册在本文最下方
2 串口配置步骤
<1>设置SWRST
<2>设置MEX开启串口功能
<3>设置数据位、奇偶校验位、停止位、
<4>设置串口波特率
<5>开启串口接收中断
3 代码实现
/*
***********ruopan***********
串口设置
波特率:115200
数据位 :8
停止位:1
奇偶校验位:无
功能:
不停发送 "渃畔,苍穹守望者"
实现串口同时接收发送数据
模式:串口模式
芯片:MSP430F169
P3.6 P3.7外设为串口1通信
实现printf重定义
****************************
*/
//文件1
#include "msp430x16x.h"
#include "System_clock.h"
#include "uart.h"
#define cpu_f ((double)8000000)
#define delay_us(x) __delay_cycles((long)(cpu_f*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(cpu_f*(double)x/1000.0))
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
System_clock();
Uart_GPIO_init();
Uart_config();
_EINT();
while(1)
{
delay_ms(1000);
printf("渃畔,苍穹守望者rn");
}
}
//文件2
#ifndef __System_clock_H
#define __System_clock_H
void System_clock(void);
#endif
#include "System_clock.h"
#include void System_clock(void) { unsigned int iq0; BCSCTL1&=~XT2OFF; do { IFG1&=~OFIFG; for(iq0=0xff;iq0>0;iq0--); } while((IFG1&OFIFG)!=0); BCSCTL2=0x88; } //文件3 #ifndef __UART_H #define __UART_H void Uart_GPIO_init(void); void Uart_config(void); void uart_sendbyte(int c); //串口重定向 int putchar(int c); #endif #include "msp430x16x.h" #include "uart.h" void Uart_GPIO_init(void) { P3DIR=0X0f;//0000 1111 //P3DIR |= BIT1 + BIT2 +BIT3 + BIT4 +BIT6; P3DIR &=~BIT7; P3SEL |= BIT6 + BIT7;//1100 0000 选择P3.6 P3.7为外设 } void Uart_config(void) { ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD UCTL1 |= CHAR; // 8-bit character UTCTL1 |= SSEL1; // SMCLK UBR01 = 0x45; // 8MHz 115200 UBR11 = 0x00; // 8MHz 115200 UMCTL1 = 0x4A; // 8MHz 115200 modulation UCTL1 &= ~SWRST; // 清除串口复位 IE2 |= URXIE1; // Enable USART1 RX interrupt } #pragma vector=UART1RX_VECTOR __interrupt void usart1_rx (void) { while (!(IFG2 & UTXIFG1)); TXBUF1 = RXBUF1; // RXBUF0 to TXBUF0 } int putchar(int ch) { /* if(ch==0x0d) { uart_sendbyte(0x0a); } */ uart_sendbyte(ch); return ch; } void uart_sendbyte(int ch) { while(!(IFG2&UTXIFG1)); TXBUF1=ch; }
上一篇:MSP430F169 FLASH 操作
下一篇:MSP430F5529-基于ATK-IMU901角度传感器在UART的串口通信于数据显示
推荐阅读最新更新时间:2024-11-12 11:38
设计资源 培训 开发板 精华推荐
- 带外部基准的 L6920D 应用电路
- AD9854/PCB,用于评估 AD9854 300-MSPS DDS 数字合成器的评估板
- VM800P43A-BK、FT800显示系统VM800P开发模块、ATMEG328P 5V/16MHz、Micro-SD插座、4.3寸TFT LCD触摸屏、黑色外壳
- 【创意PCB】集成网络电话的月球小夜灯
- 使用 NXP Semiconductors 的 MCF5272 的参考设计
- 高速 CAN 收发器中 ESD 枪测试下的 ESD 方面和模块
- 使用 Analog Devices 的 LTC1434CGN 的参考设计
- LT3844EFE 演示板,具有 PLL 的 60V DC/DC 控制器
- 用于微功率 A/D 转换器的 LT1634BIS8-2.5 电压基准的典型应用
- LTM8052EV 5.6A、36Vin 为两个 2.5V 系列超级电容器充电的典型应用