MSP430F5438学习笔记 UART ACLK 9600-8-N-1

发布者:delta14最新更新时间:2020-04-23 来源: eefocus关键字:MSP430F5438  UART  ACLK 手机看文章 扫描二维码
随时随地手机看文章

1.初始化UART0之前需要先初始化ACLK、SMCLK和MCLK。示例代码中使用XT1,ACLK为32768,SMCLK和MCLK约为8MHZ。


2.UART的时钟可以参考ACLK或者SMCLK,本例参考ACLK。由于参考ACLK时钟,所以串口速率不能超过32768。选择9600较为合适。


3.MSP430波特率的产生有两种模式,低频波特率产生和过采样波特率产生。代码中使用低频波特率产生。


4.代码的开头调用了stdio,在函数中宏重写了putchar函数,定向到UART单字节输出。


5.代码初始化之后输出 Hello MSP430,随后直接反射串口接收到的数据,例如发送123456即返回123456。



// 时钟默认情况

// FLL时钟      FLL选择 XT1

// 辅助时钟     ACLK选择 XT1          32768Hz

// 主系统时钟   MCLK选择 DCOCLKDIV    8000000Hz

// 子系统时钟   SMCLK选择 DCOCLKDIV   8000000Hz

// UART时钟选择 ACLK

// 低频波特率产生 9600-8-N-1

#include

#include

void clock_config(void);

void select_xt1(void);

void dco_config(void);

void uart_config(void);

 

int main(void)

{

    clock_config();                             // 初始化时钟

    uart_config();

    _EINT();

    P4DIR |= BIT0;                              // P4.0输出

 

    printf("Hello MSP430!rn");

    while(1)

    {

        P4OUT ^= BIT0;

        __delay_cycles(1000000);

    }

}

 

void clock_config(void)

{

    WDTCTL = WDTPW + WDTHOLD;                   // 停止看门狗

    select_xt1();                               // 选择XT1

    dco_config();                               // ACLK = XT1 = 32.768K

                                                // MCLK = SMCLK = 8000K

}

 

void select_xt1(void)

{

    // 启动XT1

    P7SEL |= 0x03;                              // P7.0 P7.1 外设功能

    UCSCTL6 &= ~(XT1OFF);                       // XT1打开

    UCSCTL6 |= XCAP_3;                          // 内部电容

    do

    {

        UCSCTL7 &= ~XT1LFOFFG;                  // 清楚XT1错误标记

    }while (UCSCTL7&XT1LFOFFG);                 // 检测XT1错误标记

}

 

void dco_config(void)

{

    __bis_SR_register(SCG0);                    // 禁止FLL功能

    UCSCTL0 = 0x0000;                           // Set lowest possible DCOx, MODx

    UCSCTL1 = DCORSEL_5;                        // DCO最大频率为16MHz

    UCSCTL2 = FLLD_1 + 243;                     // 设置DCO频率为8MHz

                                                // MCLK = SMCLK= Fdcoclkdiv = (N+1)X(Ffllrefclk/n)

                                                // N为唯一需要计算的值

                                                // Ffllrefclk FLL参考时钟,默认为XT1

                                                // n取默认值,此时为1

                                                // (243 + 1) * 32768 = 8MHz

    __bic_SR_register(SCG0);                    // 使能FLL功能

 

    // 必要延时

    __delay_cycles(250000);

 

    // 清楚错误标志位

    do

    {

        UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);

                                                // 清除所有振荡器错误标志位

        SFRIFG1 &= ~OFIFG;                      // 清除振荡器错误

    }while (SFRIFG1&OFIFG);                     // 等待清楚完成

}

 

void uart_config(void)

{

    P3SEL = 0x30;                               // 选择P3.4和P3.5的复用功能

 

    UCA0CTL1 |= UCSWRST;                        // 软件复位

    UCA0CTL1 |= UCSSEL_1;                       // 选择ACLK时钟

    UCA0BR0 = 3;                                // 查表获得

    UCA0BR1 = 0;                                // UCA0BRX和UCA0MCTL数值

    UCA0MCTL |= UCBRS_3 + UCBRF_0;              //

    UCA0CTL1 &= ~UCSWRST;                       //

 

    UCA0IE |= UCRXIE;                           // 使能接收中断

}

 

int putchar(int ch)

{

UCA0TXBUF = ch;

while(!(UCA0IFG & UCTXIFG));

return ch;

}

 

#pragma vector=USCI_A0_VECTOR

__interrupt void USCI_A0_ISR(void)

{

  switch(__even_in_range(UCA0IV,4))

  {

  case 0:break;

  case 2:                                   // 接收中断

    while (!(UCA0IFG&UCTXIFG));             // 等待发送完成

    UCA0TXBUF = UCA0RXBUF;                  // 接收缓冲区

    break;

  case 4:break;                             // 发送中断

  default: break;

  }

}

关键字:MSP430F5438  UART  ACLK 引用地址:MSP430F5438学习笔记 UART ACLK 9600-8-N-1

上一篇:MSP430F5438 定时器总结
下一篇:如何在FreeRTOS下实现低功耗——MSP430F5438平台

推荐阅读最新更新时间:2024-11-12 06:15

STM32的UART的GPIO管脚配置的异常问题
参照STM32的数据手册,其GPIO管脚具有8种输入输出形式: 1. 浮空输入 2. 带上拉输入 3. 带下拉输入 4. 模仿输入 5. 开漏输出 6. 推挽输出 7. 复用功用的推挽输出 8. 复用功用的开漏输出 根据具体状况进行灵敏装备。 我在运用UART的时分就呈现过装备过错的状况,我把RX管脚装备成input floating,外部没有接上拉电阻,后边接了485电平变换芯片SN65HDV10,成果本应该只接纳1个字节,但一直接纳到0x00,原因是485芯片设置成发送状况后其接纳管脚为高阻态,而STM32芯片为悬空态,实践测验该管脚为低电平,所以一直接纳到0x00,将STM32的UART接纳管脚装备为i
[单片机]
stm8s中UART的用法(四种UART中断)
一、应用实例 1.1系统功能 使用STM8的USART进行自发自收(将发送引脚RXD短接到接收引脚TXD),发出数据:0,1,2。。。数据,能接收到自己发出的数据:0,1,2。。。使用LED作出简单指示! 1.2硬件设计 LED控制电路原理图 UART电路原理图 1.2软件设计 /********************************************************************* 目标系统: 基于STM8单片机 应用软件: *********************************************************************/
[单片机]
stm8s中<font color='red'>UART</font>的用法(四种<font color='red'>UART</font>中断)
ARM-Linux s3c2440 之UART分析(五)
从上面四篇介绍文章中,已经清楚了串口设备与串口驱动实现的各层次关系流程。是一种从上而下的关系,从第二篇的层次流程图中可以看出。之前说过串口设备是一种platform device,下面看看串口作为platform device的实现细节。 串口的硬件平台实现smdk2440_map_io()初始化入口: static void __init smdk2440_map_io(void) { s3c24xx_init_io(smdk2440_iodesc,ARRAY_SIZE(smdk2440_iodesc)); s3c24xx_init_clocks(12000000); s3c24xx_
[单片机]
S3C2410内置的UART控制器
一、S3C2410内置的UART控制器 S3C2410内部具有3个独立的UART控制器,每个控制器都可以工作在Interrupt(中断)模式或DMA(直接内存访问)模式,也就是说UART控制器可以在CPU与UART控制器传送数据的时候产生中断或DMA请求。并且每个UART控制器均具有16字节的FIFO(先入先出寄存器),支持的最高波特率可达到115.2Kbps 图5-11是S3C2410内部UART控制器的结构图 图5-11 通过上图我们可以看到,每个UART控制器中大抵分为发送器和接收器两部分,在发送器中如果当前UART处于FIFO模式,则有16B的发送缓冲寄存器,一般在发送数据时CPU会将数据先暂存到这16B中来,如果
[单片机]
CortexM0开发 —— LPC11C14的UART使用方法
LPC1100系列微控制器UART LPC1100系列Cortex-M0微控制器具有一个符合16C550工业标准的异步串行口(UART)。此口同时增加了调制解调器(Modem)接口,DSR、DCD和RI Modem信号是只用于LQFP48和PLCC44封装的管脚配置。 特性  16字节收发FIFO;  寄存器位置符合16C550工业标准;  接收器FIFO触发点可为1、4、8和14字节;  内置波特率发生器;  用于精确控制波特率的小数分频器,并拥有赖以实现软件流控制的自动波特率检测能力和机制;  支持软件或硬件流控制执行;  包含标准Modem接口信号(CTS、DCD、D
[单片机]
CortexM0开发 —— LPC11C14的<font color='red'>UART</font>使用方法
MSP430F5438内部延时函数的用法
今天看示例程序中出现了__delay_cycles()这个函数,在查找msp430x54x.h这个头文件的时候,发现这个头文件中没有该函数的声明,原来这个函数已经在IAR这个编译器中集成,这里总结一下__delay_cycles();这个函数的具体用法 第一步,复制代码: #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((lo
[单片机]
SPI、I2C、UART三种串行总线协议的区别
SPI、I2C、UART三种串行总线协议的区别      SPI(Serial Peripheral Interface:串行外设接口)      I2C(INTER IC BUS)      UART(Universal Asynchronous Receiver Transmitter:通用异步收发器) SPI The SPI includes these distinctive features: • Master mode and slave mode • Bi-directional mode • Slave select output • Mode fault error flag
[嵌入式]
MSP432UART波特率与时钟关系
MSP432波特率与时钟频率对应关系 msp432在进行串口通讯时,都会进行波特率的设置,在MSP432中如何快速设置波特率?? 1.首先确定时钟频率 2.串口配置参数结构体设置 msp432在进行串口通讯时,都会进行波特率的设置,在MSP432中如何快速设置波特率?? 1.首先确定时钟频率 下面是可选项(一般选用12MHZ/24MHZ) 2.串口配置参数结构体设置 最主要设置这三项 这是如何计算来的??? 这里直接打开应用技术手册905页,可以看到以下两张表 在这里插入图片描述 这里可以看到在不同频率下对应波特率设置 举个例子: 在设置频率为12Mhz时候,波特率设置为115200 找到对用应用手册
[单片机]
MSP432<font color='red'>UART</font>波特率与时钟关系
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved