历史上的今天
返回首页

历史上的今天

今天是:2024年10月17日(星期四)

正在发生

2019年10月17日 | msp430f5529 uart pwm adc

2019-10-17 来源:eefocus

//msp430f5529的串口使用程序使用示例


//--------------------------------------------- uart 头文件 -------------------------------------------------------------//

#ifndef UART_H_

#define UART_H_



#include

#include "config.h"



//默认为115200

     

void USCIA0_Init(void);

void USCIA0_SendChar(u8 c);

u8 USCIA0_ReceiveChar(void);

void USCIA0_SendString(u8 *str);



void USCIA1_Init(void);

void USCIA1_SendChar(u8 c);

u8 USCIA1_ReceiveChar(void);

void USCIA1_SendString(u8 *str);



//void Uart1_Send_AF(void);



#endif /* #ifndef USCI_A0_h */



/*

//使用例程

void main(void)

{

    volatile unsigned int i;

    u8 data;

  

    dog_Disable();

    UCS_Init();

    //key_Init();

    USCIA0_Init();

    

    while(1)

    {

        USCIA0_SendChar('A');

        USCIA0_SendString(" luoxn28");

        data = USCIA0_ReceiveChar();

if(data != 0)

{

        USCIA0_SendChar(data);

        USCIA0_SendChar('r');USCIA0_SendChar('n');

}      

        delay(10);      

    }

}

*/



//--------------------------------------------- uart 源文件 -------------------------------------------------------------//

#include "msp430_UART.h"




#if USCIA0_EN >0



/*********************************************************

*名称:USCIA0_Init

*功能:串口初始化

*入口参数:无

*出口参数:无

*说明:设置为P3.3和P3.4为串口通信端口 3.3-UCA0TXD 3.4-UCA0RXD

**********************************************************/

void USCIA0_Init(void)

{

  P3SEL |= BIT3+BIT4;                       // P3.3,4 = USCI_A0 TXD/RXD

  UCA0CTL1 |= UCSWRST;                      // **Put state machine in reset**

  UCA0CTL1 |= UCSSEL__ACLK;                     // ACLK

  UCA0BR0 = 34;           // 4MHz 115200

  UCA0BR1 = 0;            // 4MHz 115200

  UCA0MCTL |= UCBRS_6 + UCBRF_0;            // Modulation UCBRSx=1, UCBRFx=0

  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**

  //IE2 |= UCA0RXIE + UCA0TXIE;  // Enable USCI_A0 TX/RX interrupt

  //IE2 |= UCA0RXIE;             // Enable USCI_A0 RX interrupt

  //__bis_SR_register(GIE);      // Enter LPM3 w/ interrupts enabled

}



//串口0发送字符函数

void USCIA0_SendChar(u8 c)

{

    UCA0TXBUF=c;   

    while(!(UCA0IFG & UCTXIFG));   // USCI_A0 TX buffer ready?

    UCA0IFG &= ~UCTXIFG;

}



//串口0接收字符函数

u8 USCIA0_ReceiveChar(void)

{

    u8 data = 0;


//阻塞式返回值

    while(!(UCA0IFG & UCRXIFG));   // USCI_A0 TX buffer ready?

    UCA0IFG &= ~UCRXIFG;

    data = UCA0RXBUF;

    return data;



/* 

//非阻塞式返回值

    if(UCA0IFG & UCRXIFG)

  {

UCA0IFG &= ~UCRXIFG;

data = UCA0RXBUF;

}

return data;

*/    

}



//串口0发送字符串函数

void USCIA0_SendString(u8 *str)

{

    while(*str != '')

    {

        USCIA0_SendChar(*str);

        str++;

    }

}

#endif //#if USCIA0_EN >0



#if USCIA1_EN > 0

/*********************************************************

*名称:USCIA0_Init

*功能:串口初始化

*入口参数:无

*出口参数:无

*说明:设置为P4.4和P4.5为串口通信端口 4.4-UCA1TXD 4.5-UCA1RXD

**********************************************************/

//串口1初始化函数

void USCIA1_Init(void)

{

  P4SEL |= BIT4+BIT5;                       // P3.3,4 = USCI_A0 TXD/RXD

  UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**

  UCA1CTL1 |= UCSSEL__ACLK;                     // ACLK

  UCA1BR0 = 34;           // 4MHz 115200

  UCA1BR1 = 0;            // 4MHz 115200

  UCA1MCTL |= UCBRS_6 + UCBRF_0;            // Modulation UCBRSx=1, UCBRFx=0

  UCA1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**

  //IE2 |= UCA0RXIE + UCA0TXIE;  // Enable USCI_A0 TX/RX interrupt

  //IE2 |= UCA0RXIE;             // Enable USCI_A0 RX interrupt

  //__bis_SR_register(GIE);      // Enter LPM3 w/ interrupts enabled

}



//串口1发送字符函数

void USCIA1_SendChar(u8 c)

{

    UCA1TXBUF=c;   

    while(!(UCA1IFG & UCTXIFG));   // USCI_A0 TX buffer ready?

    UCA1IFG &= ~UCTXIFG;

}



//串口1接收字符函数

u8 USCIA1_ReceiveChar(void)

{

    u8 data = 0;


//阻塞式返回值

    while(!(UCA1IFG & UCRXIFG));   // USCI_A0 TX buffer ready?

    UCA1IFG &= ~UCRXIFG;

    data = UCA1RXBUF;

    return data;



/* 

//非阻塞式返回值

    if(UCA1IFG & UCRXIFG)

  {

UCA1IFG &= ~UCRXIFG;

data = UCA1RXBUF;

}

return data;

*/    

}



//串口1发送字符串函数

void USCIA1_SendString(u8 *str)

{

    while(*str != '')

    {

        USCIA1_SendChar(*str);

        str++;

    }

}



#endif //#if USCIA1_EN > 0


/*

#include "UART.h"


void UART0_Init(void)

{

    P3SEL = 0x30;                             // 配置P3.4和P3.5脚为串口的输入输出口

    UCA0CTL1 |= UCSWRST;                      // 复位串口

    UCA0CTL1 |= UCSSEL_1;                     // 选择串口时钟为ACLK(32768HZ)

    UCA0BR0 = 0x03;                           // 设置串口波特率为9600

    UCA0BR1 = 0x00;                           

    UCA0MCTL = UCBRS_3+UCBRF_0;               

    UCA0CTL1 &= ~UCSWRST;                     // 打开串口

    UCA0IE |= UCRXIE;                         // 打开串口接收中断

}

*/










//PWM的程序示例


//--------------------------------------------- pwm头文件 -------------------------------------------------------------//

#ifndef MSP430_TIMER_H_

#define MSP430_TIMER_H_



#include

#include "config.h"



//---------------------- the config of timerA0 pwm ----------------------

void TimerA0_1_PWM_Init(int num, int period); //P1.2

void TimerA0_2_PWM_Init(int num, int period); //P1.3

void TimerA0_3_PWM_Init(int num, int period); //P1.4

void TimerA0_4_PWM_Init(int num, int period); //P1.5



//---------------------- the config of timerA1 pwm ----------------------

void TimerA1_1_PWM_Init(int num, int period); //P2.0

#define TimerA1_1_SetPWM(num) (TA1CCR1=(num))

void TimerA1_2_PWM_Init(int num, int period); //P2.1

#define TimerA1_2_SetPWM(num) (TA1CCR2=(num))



//---------------------- the config of timerA2 pwm ----------------------

void TimerA2_1_PWM_Init(int num, int period); //P2.4

#define TimerA2_1_SetPWM(num) (TA2CCR1=(num))

void TimerA2_2_PWM_Init(int num, int period); //P2.5

#define TimerA2_2_SetPWM(num) (TA2CCR2=(num))



//---------------------- the config of timerB0 pwm ----------------------

void TimerB0_1_PWM_Init(int num, int period); //P5.7

void TimerB0_2_PWM_Init(int num, int period); //P7.4

void TimerB0_3_PWM_Init(int num, int period); //P7.5

void TimerB0_4_PWM_Init(int num, int period); //P7.6

void TimerB0_5_PWM_Init(int num, int period); //P3.5

void TimerB0_6_PWM_Init(int num, int period); //P3.6



#endif





//--------------------------------------------- pwm源文件 -------------------------------------------------------------//




#include "msp430_timer.h"



//period 周期值,num百分比值, timerA0的period要一样

void TimerA0_1_PWM_Init(int num, int period) //P1.2

{

P1DIR |= BIT2;

P1SEL |= BIT2;

TA0CCR0 = period;

//TA0CCTL1 = OUTMOD_3;//先低电平后高电平

TA0CCTL1 = OUTMOD_7;//先高电平后低电平

TA0CCR1 = num;

TA0CTL |= TASSEL_2 + MC_1;//以SMCLK为时钟源,工作在up模式 SMCLK 1MHz

TA0CTL |= TACLR;     //将计时器A0清零

//TA1CCTL0=CCIE;     //定时器A1的捕获比较器0开启CCIFG位中断

//TA1CCTL1=CCIE;     //捕获比较器1开启中断

}



void TimerA0_2_PWM_Init(int num, int period) //P1.3

{

P1DIR |= BIT3;

P1SEL |= BIT3;

TA0CCR0 = period;

//TA0CCTL2 = OUTMOD_3;//先低电平后高电平

TA0CCTL2 = OUTMOD_7;//先高电平后低电平

TA0CCR2 = num;

TA0CTL |= TASSEL_2 + MC_1;//以SMCLK为时钟源,工作在up模式 SMCLK 1MHz

TA0CTL |= TACLR;     //将计时器A0清零

}



void TimerA0_3_PWM_Init(int num, int period) //P1.4

{

P1DIR |= BIT4;

P1SEL |= BIT4;

TA0CCR0 = period;

//TA0CCTL3 = OUTMOD_3;//先低电平后高电平

TA0CCTL3 = OUTMOD_7;//先高电平后低电平

TA0CCR3 = num;

TA0CTL |= TASSEL_2 + MC_1;//以SMCLK为时钟源,工作在up模式 SMCLK 1MHz

TA0CTL |= TACLR;     //将计时器A0清零

}



void TimerA0_4_PWM_Init(int num, int period) //P1.5

{

P1DIR |= BIT5;

P1SEL |= BIT5;

TA0CCR0 = period;

//TA0CCTL4 = OUTMOD_3;//先低电平后高电平

TA0CCTL4 = OUTMOD_7;//先高电平后低电平

TA0CCR4 = num;

TA0CTL |= TASSEL_2 + MC_1;//以SMCLK为时钟源,工作在up模式 SMCLK 1MHz

TA0CTL |= TACLR;     //将计时器A0清零

}



//period 周期值,num百分比值, timerA1的period要一样

void TimerA1_1_PWM_Init(int num, int period) //P2.0

{

P2DIR |= BIT0;

P2SEL |= BIT0;

TA1CCR0 = period;

//TA1CCTL1 = OUTMOD_3;//先低电平后高电平

TA1CCTL1 = OUTMOD_7;//先高电平后低电平

TA1CCR1 = num;

TA1CTL |= TASSEL_2 + MC_1;//以SMCLK为时钟源,工作在up模式 SMCLK 1MHz

TA1CTL |= TACLR;     //将计时器A0清零

}



void TimerA1_2_PWM_Init(int num, int period) //P2.1

{

P2DIR |= BIT1;

P2SEL |= BIT1;

TA1CCR0 = period;

//TA1CCTL2 = OUTMOD_3;//先低电平后高电平

推荐阅读

史海拾趣

Dielectric Laboratories公司的发展小趣事

在电子元件市场竞争日益激烈的背景下,DLI意识到必须不断创新才能保持竞争优势。于是,公司开始研发多层陶瓷电容器(MLCC)技术。经过数年的努力,DLI成功推出了具有高性能、高可靠性特点的多层陶瓷电容器,广泛应用于军事、航空等领域。这一技术的突破不仅提升了DLI的市场地位,也为整个电子行业的发展做出了重要贡献。

Densei-Lambda (TDK)公司的发展小趣事

为了进一步拓展业务,DLI于1955年加入了知名的都福集团(Dover Corporation)。通过这一合作,DLI获得了更多的资金支持和市场资源,加速了公司的发展步伐。同时,都福集团也为DLI提供了更广阔的发展平台,使其能够接触到更多的行业前沿技术和市场信息。

Electric Imp Inc.公司的发展小趣事

在物联网设备管理平台的基础上,Electric Imp Inc.公司不断推动技术创新。公司研发团队经过数年的努力,成功研发出了一款基于边缘计算的物联网设备。这款设备具有更高的数据处理能力、更低的延迟和更好的安全性,能够满足更广泛的应用场景。这一技术突破使得公司在物联网领域的技术实力得到了显著提升。

Efficient Power Conversion公司的发展小趣事

随着EPC公司在氮化镓技术领域的领先地位日益稳固,一些竞争对手开始试图通过不正当手段获取其技术。为了维护自身的合法权益,EPC公司积极寻求法律途径来保护其专利。2023年,EPC公司向美国联邦法院和美国国际贸易委员会提起诉讼,指控英诺赛科(珠海)科技有限公司及其子公司侵犯了其基础专利组合中的四项专利。这一诉讼引起了行业的广泛关注,也再次证明了EPC公司对专利保护的重视。

Fermionics Lasertech Inc公司的发展小趣事

面对日益激烈的市场竞争,Fermionics Lasertech Inc公司始终坚持以创新为驱动力。他们不断投入研发资金,引进高端人才,加强与高校和科研机构的合作,共同推动激光技术的创新。公司成功研发出了一系列具有自主知识产权的新型激光器,不仅提升了产品性能,还降低了生产成本,使公司在激烈的市场竞争中保持领先地位。

FILTRONETICS Inc公司的发展小趣事

进入21世纪后,FILTRONETICS意识到全球化市场的重要性,开始积极开拓国际市场。公司加强了与国际客户的沟通与合作,参加了多个国际电子展会,展示了公司的技术和产品。同时,公司还在海外设立了分支机构,以便更好地服务当地客户。通过不懈的努力,FILTRONETICS成功打入多个国际市场,并赢得了众多国际客户的信赖和支持。

问答坊 | AI 解惑

第二届ARM中国微控制器技术研讨会详细资料无私奉献

为方便坛友下载,打包成一个附件,内容丰富,要求置顶或加精! 包括内容: pdf1、第二届ARM MCU研讨会 谭军 : 会议开幕,ARM使用领域 pdf2、TSB ARM MCU PR 090612 CN: TOSHIBA ARM内核微控制器 - TX03 和 TX09 介绍 pdf3、ST_ARM_MCU_Sem ...…

查看全部问答>

图片按钮背景点击后消失

   自己重载的CButton,类,捕获OnLButtonUp和OnLButtonDown消息,实现点击时切换背景图片,发现点击之后,绘制完背景之后,按钮背景又回复为默认的无背景的(默认的颜色和问题)。在事件处理时,的确已经将背景画成图片,感觉好像系统的 ...…

查看全部问答>

wifi转串口的板子wifi转串口的板子

请问市场上销售的wifi转串口的板子主要应用在哪些领域? …

查看全部问答>

VHDL问题

在PROCESS中,这个PROCESS是 TYPE state IS (s0,s1,s2); SIGNAL current_state,next_state,pro:state; process(current_state) 在case语句中为pro赋值(值为state0或1或2),可是到了下一个上升沿,这个值就不存在了,无法持续,这是为什么? ...…

查看全部问答>

有朋友做过读卡器的驱动吗?想交流下优化的方法

如题,关于闪存底层的优化相关问题,希望能找到朋友交流下,谢谢 直接恢复或者king_tf@163.com 再次谢谢…

查看全部问答>

【征文】从疯狂下载到自己动手

                                              【征文】从疯狂下载到自己动手     我学单片机完全是出于 ...…

查看全部问答>

51单片机数码管不用锁存器显示时程序怎么写

我的程序:#include <reg52.h>unsigned int ms;unsigned char shumaguan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//sbit wei1=P2^4;sbit wei2=P2^5;sbit wei3=P2^6;sbit wei4=P2^7;void delay ( ...…

查看全部问答>

求助:跑马灯为什么进入延时函数程序就死了

一个很简单的小程序 stm32初学,很多都不太理解,希望大家给与指点 以下是程序,没用固件库   #include \"stm32f10x.h\"   void delay_ms(u8 ms);   int main(void){     RCC->CR = 0x01010000;  RCC- ...…

查看全部问答>

初学者----STM32之IWDG

本人是STM初学者,本来根据资料的介绍,做了如下的程序段来开启stm32的独立看门狗:  /***************** 独立看门狗初始化 ******************/  void IWDG_Configuration(void)         ...…

查看全部问答>