MSP432串口通讯能够实现printf的重写吗?

[复制链接]

3

主题

7

帖子

103

积分

二氧化硅

Rank: 2

积分
103
楼主
查看: 4498回复: 3 发表于 2019-7-20 15:36:11   只看该作者

#include <ti/devices/msp432p4xx/driverlib/driverlib.h>

/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>
#include "stdio.h"

void UART_SentByte(uint8_t ch);
void UART_SentString(char *str);


const eUSCI_UART_Config uartConfig =
{
        EUSCI_A_UART_CLOCKSOURCE_SMCLK,          // SMCLK Clock Source
        6,                                     // BRDIV = 78
        8,                                       // UCxBRF = 2
        0x20,                                       // UCxBRS = 0
        EUSCI_A_UART_NO_PARITY,                  // No Parity
        EUSCI_A_UART_LSB_FIRST,                  // LSB First
        EUSCI_A_UART_ONE_STOP_BIT,               // One stop bit
        EUSCI_A_UART_MODE,                       // UART mode
        EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION  // Oversampling
};
//![Simple UART Config]

int main(void)
{
    /* Halting WDT  */
    MAP_WDT_A_holdTimer();

    /* Selecting P1.2 and P1.3 in UART mode */
    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1,
            GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);

                MAP_GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);
                MAP_GPIO_setAsOutputPin(GPIO_PORT_P2,GPIO_PIN0 | GPIO_PIN1 | GPIO_PIN2);
                MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0);
                MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2,GPIO_PIN0 | GPIO_PIN1 | GPIO_PIN2);
    /* Setting DCO to 12MHz */
    CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_12);

    //![Simple UART Example]
    /* Configuring UART Module */
    MAP_UART_initModule(EUSCI_A0_BASE, &uartConfig);

    /* Enable UART module */
    MAP_UART_enableModule(EUSCI_A0_BASE);

    /* Enabling interrupts */
    MAP_UART_enableInterrupt(EUSCI_A0_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT);
    MAP_Interrupt_enableInterrupt(INT_EUSCIA0);
    MAP_Interrupt_enableSleepOnIsrExit();
    MAP_Interrupt_enableMaster();   
    //![Simple UART Example]
                UART_SentString("我说:");
                UART_SentString("小猴子\n");
    while(1)
    {       
        MAP_PCM_gotoLPM0();
    }
}

/* EUSCI A0 UART ISR - Echoes data back to PC host */
void EUSCIA0_IRQHandler(void)
{
    uint32_t status = MAP_UART_getEnabledInterruptStatus(EUSCI_A0_BASE);

    MAP_UART_clearInterruptFlag(EUSCI_A0_BASE, status);
               
       
    if(status & EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG)
    {
        MAP_UART_transmitData(EUSCI_A0_BASE, MAP_UART_receiveData(EUSCI_A0_BASE));
//                        if(MAP_UART_receiveData(EUSCI_A0_BASE)=='0')
//                                MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2,GPIO_PIN0);
//                        else if(MAP_UART_receiveData(EUSCI_A0_BASE)=='1')
//                                MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2,GPIO_PIN1);
//                        else if(MAP_UART_receiveData(EUSCI_A0_BASE)=='2')
//                                MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2,GPIO_PIN2);
//                        else if(MAP_UART_receiveData(EUSCI_A0_BASE)=='3')
//                                MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
//                        else
//                                MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2,GPIO_PIN0 | GPIO_PIN1);       
    }

}

void UART_SentByte(uint8_t ch)
{
        MAP_UART_transmitData(EUSCI_A0_BASE,ch);
        while((UCA0STATW  & 0x01));
}
void UART_SentString(char *str)
{
        unsigned int k=0;
        do{
                UART_SentByte(*(str+k));
                k++;
        }while (*(str+k)!='\0');
        while((UCA0STATW  & 0x01));
       
}

这个是没重新pfintf的,求大佬赐教怎样重写printf函数!!!!






73

主题

469

帖子

1007

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1007
沙发
发表于 2019-7-20 23:14:48   只看该作者

1. printf函数支持的,可以在工程属性里边设置,有几种类型,可能要重新设置堆栈空间。

2. 如果不通过串口,会直接打印到console上,在线调试可用;

3. 也可以通过重定向的方式,打印到uart接口上,需要实现几个基础函数:
   先实现基本uart初始化和发送;
   重新实现函数:

extern _CODE_ACCESS int     fputc(int _c, FILE *_fp);
extern _CODE_ACCESS int     fputs(const char * __restrict _ptr, FILE * __restrict _fp);

73

主题

469

帖子

1007

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1007
板凳
发表于 2019-7-20 23:15:58   只看该作者
更多信息,可以查看网页:
http://processors.wiki.ti.com/in ... intf.28.29_function

3

主题

7

帖子

103

积分

二氧化硅

Rank: 2

积分
103
4#
发表于 2019-7-21 09:35:34   只看该作者
shengxiang 发表于 2019-7-20 23:15
更多信息,可以查看网页:
http://processors.wiki.ti.com/index.php/Printf_support_for_MSP430_CCSTUDIO_ ...

谢谢!!
快速回复 返回顶部 返回列表