打印

STM32F051C8芯片的USART奇怪的问题

[复制链接]
4240|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zxm19820916|  楼主 | 2013-3-11 12:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用这款芯片开发一款产品(有USART1和USART2)。一个USART口作为串口打印,另外一个作为Modbus通信口。
问题:使用1作为Modbus口,2作为串口。
USART1配置中有
USART_ITConfig(USART1, USART_IT_TC, ENABLE);
或者
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
都导致USART2打印不出测试字符串。

仿真发现,u32  isr = USART1->ISR;  isr = 0x000000C0。即TXE和TC位均为1.(为什么?)
所以一直在中断函数(发送)中出不来。
而2个USART调换下功能,不会有这个问题,请多多指教。

沙发
zxm19820916|  楼主 | 2013-3-11 12:39 | 只看该作者
不知道为什么,发送中断使能应该在哪个地方使用?

使用特权

评论回复
板凳
IJK| | 2013-3-11 13:29 | 只看该作者
TXE和TC位均为1,属于正常现象

使用特权

评论回复
地板
zxm19820916|  楼主 | 2013-3-11 14:24 | 只看该作者
TC中断使能在配置USART时DISABLE,在要发送数据的地方再ENABLE,另外一个uart可以打印出测试字符串了。

使用特权

评论回复
5
zxm19820916|  楼主 | 2013-3-11 18:11 | 只看该作者
但是,PC端使用Modbus Poll做主站,通过485连接此模块。一直连接不上。进入不了接收中断,不知道什么原因?
UART的配置和NVIC都配置了,接收中断也使能了。

使用特权

评论回复
6
罗菜鸟| | 2013-3-12 09:30 | 只看该作者
4楼正解,TXE和TC标志是常为1的,往里面压入一个字节后才能清零。

使用特权

评论回复
7
zxm19820916|  楼主 | 2013-3-12 09:53 | 只看该作者
罗菜鸟 发表于 2013-3-12 09:30
4楼正解,TXE和TC标志是常为1的,往里面压入一个字节后才能清零。

我在5楼的问题你能指教一下吗?
Modbus Poll可以发送出数据,但模块进入不了接收中断,不知道为啥?

使用特权

评论回复
8
罗菜鸟| | 2013-3-12 10:05 | 只看该作者
zxm19820916 发表于 2013-3-12 09:53
我在5楼的问题你能指教一下吗?
Modbus Poll可以发送出数据,但模块进入不了接收中断,不知道为啥? ...

你的配置如何?

使用特权

评论回复
9
zxm19820916|  楼主 | 2013-3-12 10:16 | 只看该作者
罗菜鸟 发表于 2013-3-12 10:05
你的配置如何?

USART1作为Modbus通信口。时钟开启了,中断向量表加入了,USART1初始化配置了,使能了接收中断,使能了USART1。公司的电脑,上传不了代码。

使用特权

评论回复
10
罗菜鸟| | 2013-3-12 10:18 | 只看该作者
复制粘贴

使用特权

评论回复
11
罗菜鸟| | 2013-3-12 10:19 | 只看该作者
罗菜鸟 发表于 2013-3-12 10:18
复制粘贴
/******************** (C) COPYRIGHT 2008 litt ********************
* File Name          : usart.c
* Author             : luo yi ming
* Version            : V1.0.0
* Date               : 2012年12月28日
* Description        : This file provides a set of functions needed to manage the
*                      communication between usart peripheral and RS485/HW/PLC.
********************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include "includes.h"
#include "usart.h"

/* Private typedef -----------------------------------------------------------*/
struct UartFifo{
        //rx 12byte
        u8*   rxBuf;             //4
        vu16  rxSize;            //2
        vu16  rxPush;   //2
        vu16  rxPop;    //2
        u16   rxCnt;    //2
        //tx 12byte
        u8*   txBuf;             //4
        vu16  txSize;            //2
        vu16  txPush;   //2
        vu16  txPop;    //2
        u16   txCnt;    //2
        //Isr 4byte
        void (*isr)(uint8_t,enum UartIsrMod);
};//28


struct UartCfg{
        struct UartFifo  fifo;
  USART_TypeDef*   uart;
  DMA_Channel_TypeDef*     rxdma;
  DMA_Channel_TypeDef*     txdma;
};

/*struct UartReg{
         USART_TypeDef*   uart;
        DMA_Channel_TypeDef*     rxdma;
        DMA_Channel_TypeDef*     txdma;
};*/

/* Private define ------------------------------------------------------------*/




#define  UART1_DMA_RX  DMA1_Channel5
#define  UART1_DMA_TX  DMA1_Channel4

#define  UART2_DMA_RX  DMA1_Channel6
#define  UART2_DMA_TX  DMA1_Channel7

#define  UART3_DMA_RX  DMA1_Channel3
#define  UART3_DMA_TX  DMA1_Channel2



#define  UART_REG_1 {USART1,UART1_DMA_RX,UART1_DMA_TX}
#define  UART_REG_2 {USART2,UART2_DMA_RX,UART2_DMA_TX}
#define  UART_REG_3 {USART3,UART3_DMA_RX,UART3_DMA_TX}
#define  UART_REG_4 {UART4,NULL,NULL}
#define  UART_REG_5 {UART5,NULL,NULL}

/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/

struct UartCfg UartCfgTab[UART_PORT_MAX];
//const struct UartReg UartRegTab[UART_PORT_MAX] = {UART_REG_1,UART_REG_2,UART_REG_3,UART_REG_4,UART_REG_5};



/*
    UART running by interrupt model
*/

/*************************************************************************************************
* Name       : UartIntIsr
* Describe   : 串口中断服务程序
* Input      : pfifo,uart
* Output     : 无
* Create by  : 罗一鸣 2012-12-03
* Moid   by  :
*************************************************************************************************/
static __inline void UartIntIsr(uint8_t port,struct UartFifo *pfifo,USART_TypeDef *uart)
{
        uint32_t ie;
        uint8_t c;
        ie = __get_PRIMASK();
        __set_PRIMASK(1);
        if((uart->CR1 & 0x0020) && (uart->SR & 0x0020))
        {
                c = uart->DR;
                if(pfifo->rxCnt < pfifo->rxSize)
                {
                        pfifo->rxBuf[pfifo->rxPush] = c;
                        pfifo->rxPush += 1;
                        pfifo->rxPush %= pfifo->rxSize;
                        pfifo->rxCnt += 1;
                        if(pfifo->rxCnt == (pfifo->rxSize - SERIAL_RXFULL_LINE))
                        {
                                if(NULL != pfifo->isr)
                                {
                                        pfifo->isr(port,RxFull);
                                }
                        }
                }
        }
        //IDLE IRQ
        if((uart->CR1 & 0x0010)&&(uart->SR & 0x0010))
        {
                c = uart->DR;
                if(pfifo->rxCnt < (pfifo->rxSize - SERIAL_RXFULL_LINE))
                {
                        if(NULL != pfifo->isr)
                        {
                                pfifo->isr(port,RxTimeout);
                        }
                }
        }
        //TXE IRQ
        if((uart->SR & 0x0080) && (uart->CR1 & 0x0080))
        {
                uart->CR1 &= (uint16_t)~0x0080; //off TX
                if(pfifo->txCnt)
                {
                        c = pfifo->txBuf[pfifo->txPop];
                        uart->DR = c;
                        uart->CR1 |= (uint16_t)0x0080;
                        pfifo->txPop += 1;
                        pfifo->txPop %= pfifo->txSize;
                        pfifo->txCnt -= 1;
                        if(pfifo->txCnt == 0)
                        {
                                if(NULL != pfifo->isr)
                                {
                                        pfifo->isr(port,TxEmpty);
                                }
                        }
                }
        }
        __set_PRIMASK(ie);
}


/*************************************************************************************************
* Name       : UartRead
* Describe   : 串口读取函数
* Input      :
* Output     :
* Create by  :
* Moid   by  :
*************************************************************************************************/
static uint16_t UartReadInt(struct UartFifo *pfifo,USART_TypeDef *uart,uint8_t *data,uint16_t len)
{
        uint16_t n;
        if(len == 0)
        {
                return 0;
        }
        else if(len > pfifo->rxSize)
        {
                len = pfifo->rxSize;
        }
       
        for(n=0;n<len;n++)
        {
                USART_ITConfig(uart,USART_IT_RXNE ,DISABLE);
                if(pfifo->rxCnt > 0)
                {
                        *data++ = pfifo->rxBuf[pfifo->rxPop];
                        pfifo->rxPop += 1;
                        pfifo->rxPop %= pfifo->rxSize;
                        pfifo->rxCnt--;
                        USART_ITConfig(uart,USART_IT_RXNE ,ENABLE);
                }
                else
                {
                        USART_ITConfig(uart,USART_IT_RXNE ,ENABLE);
                        break;
                }
        }
       
        return n;
}


/*************************************************************************************************
* Name       : UartWrite
* Describe   : 串口发送函数
* Input      :
* Output     :
* Create by  :
* Moid   by  :
*************************************************************************************************/
static uint16_t UartWriteInt(struct UartFifo *pfifo,USART_TypeDef *uart,uint8_t *data,uint16_t len)
{
        uint16_t n;
        if(len == 0)
        {
                return 0;
        }
        else if(len > pfifo->txSize)
        {
                len = pfifo->txSize;
        }
        USART_ITConfig(uart,USART_IT_TXE ,DISABLE);
        for(n=0;n<len;n++)
        {
                if(pfifo->txCnt < pfifo->txSize)
                {
                        pfifo->txBuf[pfifo->txPush] = *data++;
                        pfifo->txPush += 1;
                        pfifo->txPush %= pfifo->txSize;
                        pfifo->txCnt++;
                }
                else
                {
                        break;
                }
        }
        USART_ITConfig(uart,USART_IT_TXE ,ENABLE);
        return n;
}

/*************************************************************************************************
* Name       : USART_ISR
* Describe   : 串口中断服务
* Input      :
* Output     :
* Create by  :
* Moid   by  :
*************************************************************************************************/
void USART_ISR(uint8_t port)
{
        UartIntIsr(port,&UartCfgTab[port].fifo,UartCfgTab[port].uart);
}


/*

*/
__inline void UartDmaIsr(uint8_t port,struct UartFifo *pfifo,USART_TypeDef *uart)
{
       
       
}




/*
                UART API
*/




/*************************************************************************************************
* Name       : SerialPortConfig
* Describe   :  
* Input      :  
* Output     :  
* Create by  : 罗一鸣    Date: 2012-12-03
* Moid   by  :
*************************************************************************************************/
void UartNvicSet(uint8_t port,uint8_t preprio,uint8_t subprio)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        if(UART_PORT_1 == port)
        {               
                // config USART1 clock
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
                // Configure USART1 Tx (PA.09) as alternate function push-pull
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
                // Configure USART1 Rx (PA.10) as input floating
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
                // Set Interrupt Priority
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = preprio;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = subprio;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
                //CLI();
                NVIC_Init(&NVIC_InitStructure);
                //SEI();
        }
        else if(UART_PORT_2 == port)
        {
                // config USART2 clock
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
                RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
                // Configure USART2 Tx (PA.02) as alternate function push-pull
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
                // Configure USART2 Rx (PA.03) as input floating
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
                // Set Interrupt Priority
    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = preprio;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = subprio;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
                //CLI();
                NVIC_Init(&NVIC_InitStructure);
                //SEI();
        }
        else if(UART_PORT_3 == port)
        {
                // config USART3 clock
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
                RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
                // Configure USART2 Tx (PB.10) as alternate function push-pull
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_Init(GPIOB, &GPIO_InitStructure);
                // Configure USART2 Rx (PB.11) as input floating
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
                GPIO_Init(GPIOB, &GPIO_InitStructure);
                // Set Interrupt Priority
    NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = preprio;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = subprio;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
                //CLI();
                NVIC_Init(&NVIC_InitStructure);
                //SEI();
        }
}




/*************************************************************************************************
* Name       : UartConfig
* Describe   :  
* Input      :  
* Output     :  
* Create by  : 罗一鸣    Date: 2012-12-03
* Moid   by  :
*************************************************************************************************/
void UartConfig(uint8_t port,uint8_t *buf,uint16_t size,void (*isr)(uint8_t,enum UartIsrMod),FunctionalState dma)
{
        switch(port)
        {
                case UART_PORT_1: UartCfgTab[port].uart = USART1;UartCfgTab[port].rxdma = UART1_DMA_RX;UartCfgTab[port].txdma = UART1_DMA_TX;break;
                case UART_PORT_2: UartCfgTab[port].uart = USART2;UartCfgTab[port].rxdma = UART2_DMA_RX;UartCfgTab[port].txdma = UART2_DMA_TX;break;
                case UART_PORT_3: UartCfgTab[port].uart = USART3;UartCfgTab[port].rxdma = UART3_DMA_RX;UartCfgTab[port].txdma = UART3_DMA_TX;break;
                case UART_PORT_4: UartCfgTab[port].uart = UART4;break;
                case UART_PORT_5: UartCfgTab[port].uart = UART5;break;
                default : return;
        }
        UartCfgTab[port].fifo.rxBuf = buf;
        UartCfgTab[port].fifo.txBuf = buf+size/2;
        UartCfgTab[port].fifo.rxSize = UartCfgTab[port].fifo.txSize = size/2;
        UartCfgTab[port].fifo.rxPush = UartCfgTab[port].fifo.rxPop = UartCfgTab[port].fifo.rxCnt = 0;
        UartCfgTab[port].fifo.txPush = UartCfgTab[port].fifo.txPop = UartCfgTab[port].fifo.txCnt = 0;
        UartCfgTab[port].fifo.isr = isr;       
        if(DISABLE == dma)
        {
                UartCfgTab[port].rxdma = NULL;
                UartCfgTab[port].txdma = NULL;
                USART_ITConfig(UartCfgTab[port].uart,USART_IT_TXE ,DISABLE);
                USART_ITConfig(UartCfgTab[port].uart,USART_IT_RXNE,ENABLE);
                USART_ITConfig(UartCfgTab[port].uart,USART_IT_IDLE,ENABLE);
                USART_Cmd(UartCfgTab[port].uart, ENABLE);
        }
        else
        {
                USART_ITConfig(UartCfgTab[port].uart,USART_IT_IDLE,ENABLE);
                USART_Cmd(UartCfgTab[port].uart, ENABLE);
        }
}

/*************************************************************************************************
* Name       : UartOpen
* Describe   :  
* Input      :  
* Output     :  
* Create by  : 罗一鸣    Date: 2013-02-27
* Moid   by  :
*************************************************************************************************/
void UartOpen(uint8_t port,uint32_t baud,uint8_t mod)
{
        USART_InitTypeDef init;
        init.USART_BaudRate = baud;
        init.USART_WordLength = USART_WordLength_8b;
        init.USART_StopBits = USART_StopBits_1;
        init.USART_Parity = USART_Parity_No ;
        if(mod & UART_FLOW_EN)
        {
                init.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        }
        init.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_Init(UartCfgTab[port].uart, &init);
}

/*************************************************************************************************
* Name       : UartRead
* Describe   :  
* Input      :  
* Output     :  
* Create by  : 罗一鸣    Date: 2012-12-03
* Moid   by  :
*************************************************************************************************/
uint16_t UartRead(uint8_t port,uint8_t *data,uint16_t len)
{
        if(UART_PORT_MAX <= port)
        {
                return 0;
        }
        if((NULL != UartCfgTab[port].rxdma))
        {
                return 0;
        }
        else
        {
                return UartReadInt(&UartCfgTab[port].fifo,UartCfgTab[port].uart,data,len);
        }
}

/*************************************************************************************************
* Name       : UartWrite
* Describe   :  
* Input      :  
* Output     :  
* Create by  : 罗一鸣    Date: 2012-12-03
* Moid   by  :
*************************************************************************************************/
uint16_t UartWrite(uint8_t port,uint8_t *data,uint16_t len)
{
        if(UART_PORT_MAX <= port)
        {
                return 0;
        }
        if((NULL != UartCfgTab[port].txdma))
        {
                return 0;
        }
        else
        {
                return UartWriteInt(&UartCfgTab[port].fifo,UartCfgTab[port].uart,data,len);
        }
}


/*************************************************************************************************
* Name       : UartRxCnt
* Describe   :
* Input      :
* Output     :
* Create by  :
* Moid   by  :
*************************************************************************************************/
uint16_t UartRxCnt(uint8_t port)
{
        return UartCfgTab[port].fifo.rxCnt;
}

/*************************************************************************************************
* Name       : UartTxCnt
* Describe   :
* Input      :
* Output     :
* Create by  :
* Moid   by  :
*************************************************************************************************/
uint16_t UartTxCnt(uint8_t port)
{
        return UartCfgTab[port].fifo.txCnt;
}

/****************************************************************************
*************************** End of File *************************************
****************************************************************************/





















使用特权

评论回复
12
zxm19820916|  楼主 | 2013-3-12 10:32 | 只看该作者
我用的STM32M051C8芯片,你这个好复杂啊。我只要USART1的中断函数,中断里面处理接收中断还是发送中断,处理发送和接收(数组)。

使用特权

评论回复
13
香水城| | 2013-3-12 10:54 | 只看该作者
“Modbus Poll可以发送出数据,但模块进入不了接收中断”

请调试:如何得知主机发出数据了?在USART1的Rx引脚挂示波器看到数据了么?然后再看看USART1的中断和状态寄存器ISR如何。

使用特权

评论回复
14
zxm19820916|  楼主 | 2013-3-12 11:22 | 只看该作者
用示波器看到主机发出了数据。
最新发现:串口1和2的RTS脚无论拉高还是拉低,都输出高,而输出高即为发送模式。目前看来是这个原因导致进入不了接收中断。

使用特权

评论回复
15
zxm19820916|  楼主 | 2013-3-12 11:40 | 只看该作者
M0芯片的GPIO管脚配置和以前的差别比较大啊。

使用特权

评论回复
16
香水城| | 2013-3-12 12:26 | 只看该作者
F0的GPIO和F2保持一致的,只是比F1的GPIO多了每个引脚(pin)上的多路选择复用开关。

但是F0的USART比以往的F1、F2多了RS485的方向信号硬件控制。LZ可以参看USART->CR3中DEP和DEM位。以往的MCU的方向控制是由任意某个GPIO来由用户控制的。

使用特权

评论回复
17
zxm19820916|  楼主 | 2013-3-12 14:31 | 只看该作者
香主的意思是使用F0的USART的收、发方向控制是由USART自己控制的?
要怎么配置呢?
如果硬件上使用了RTS,是否可以用户软件拉高或拉低来控制收发?

使用特权

评论回复
18
罗菜鸟| | 2013-3-12 14:32 | 只看该作者
zxm19820916 发表于 2013-3-12 10:32
我用的STM32M051C8芯片,你这个好复杂啊。我只要USART1的中断函数,中断里面处理接收中断还是发送中断,处 ...
/******************** (C) COPYRIGHT 2008 boost ********************
* File Name          : usart.h
* Author             : sms
* Version            : V1.0.0
* Date               : 2010年1月21日
* Description        : Header for usart.c module
********************************************************************************/

/* Define to prevent recursive inclusion ------------------------------------ */
#ifndef __USART_H
#define __USART_H

#define  SERIAL_RXFULL_LINE  16
#define  SERIAL_MIN_FIFO     32
#define  SERIAL_MAX_FIFO     1024

#define  UART_PORT_MAX            5

#define  UART_PORT_1              0
#define  UART_PORT_2              1
#define  UART_PORT_3              2
#define  UART_PORT_4              3
#define  UART_PORT_5              4

#define  UART_FLOW_EN             0x80
#define  UART_2STOP_EN            0x40
#define  UART_EVEN_EN             0x20
#define  UART_ODD_EN              0x10


/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"

enum UartIsrMod{
        TxEmpty,
        RxFull,
        RxTimeout,
        };

//typedef uint8_t UartBuf_t[28];




extern void UartNvicSet(uint8_t port,uint8_t preprio,uint8_t subprio);
extern void USART_ISR(uint8_t port);
extern void UartConfig(uint8_t port,uint8_t *buf,uint16_t size,void (*isr)(uint8_t,enum UartIsrMod),FunctionalState dma);
extern void UartOpen(uint8_t port,uint32_t baud,uint8_t mod);
extern uint16_t UartRead(uint8_t port,uint8_t *data,uint16_t len);
extern uint16_t UartWrite(uint8_t port,uint8_t *data,uint16_t len);
/*
extern void UartIsr(struct UartPort port);
extern uint16_t UartRead(struct UartPort port,uint8_t *data,uint16_t len);
extern uint16_t UartWrite(struct UartPort port,uint8_t *data,uint16_t len);
extern uint16_t UartRxCnt(struct UartPort port);
extern uint16_t UartTxCnt(struct UartPort port);
extern void UartInit(struct UartPort port,uint16_t size,uint8_t *buf,void(*isr)(enum UartIsrMod));
extern void UartPortConfig(struct UartPort port,uint8_t preprio,uint8_t subprio);
*/

#endif /* __USART_H */

/******************* (C) COPYRIGHT 2008 boost *****END OF FILE****/
我这个就是这样用的,中断程序处理收发中断,我忘了发头文件了

使用特权

评论回复
19
罗菜鸟| | 2013-3-12 14:34 | 只看该作者
zxm19820916 发表于 2013-3-12 14:31
香主的意思是使用F0的USART的收、发方向控制是由USART自己控制的?
要怎么配置呢?
如果硬件上使用了RTS, ...

你还不明白,你的程序卡死在发送里,ST系列的TXE和TC的用法与LPC这些不一样。

使用特权

评论回复
20
zxm19820916|  楼主 | 2013-3-12 14:43 | 只看该作者
不好意思,有点头晕了。不知道F0这芯片的USART该怎样配置中断收发了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

299

帖子

2

粉丝