查看: 1242|回复: 8
收起左侧

关于GD32F130的USART

[复制链接]

8

主题

12

帖子

36

积分

实习生

 楼主| 发表于 2015-8-3 09:05 | 显示全部楼层 |返回版面|阅读模式
我用官网上的示例程序为什么一直没有哦数据?程序如下:
int main(void)
{
                SysTick_Configuration();               //这个函数官网上没有写,我加上的
    /* NVIC configuration */
    NVIC_Configurationuration();
   
    /* Enable GPIOA clock */
    RCC_AHBPeriphClock_Enable( RCC_AHBPERIPH_GPIOA , ENABLE );
   
    /* Enable USART1 APB clock */
    RCC_APB2PeriphClock_Enable( RCC_APB2PERIPH_USART1 , ENABLE );
   
    /* USART1 Pins configuration **************************************************/
    GPIO_DeInit( GPIOA );
   
    {
        /* Configure the GPIO ports */
        GPIO_InitPara GPIO_InitStructure;
        /* Connect pin to Periph */
        GPIO_PinAFConfig( GPIOA , GPIO_PINSOURCE9, GPIO_AF_1 );
        GPIO_PinAFConfig( GPIOA , GPIO_PINSOURCE10, GPIO_AF_1 );
        /* Configure pins as AF pushpull */
        GPIO_InitStructure.GPIO_Pin     = GPIO_PIN_9 | GPIO_PIN_10;
        GPIO_InitStructure.GPIO_Mode     = GPIO_MODE_AF;
        GPIO_InitStructure.GPIO_Speed     = GPIO_SPEED_50MHZ;
        GPIO_InitStructure.GPIO_OType     = GPIO_OTYPE_PP;
        GPIO_InitStructure.GPIO_PuPd     = GPIO_PUPD_NOPULL;
        GPIO_Init( GPIOA , &GPIO_InitStructure);
    }
   
    {
        USART_InitPara USART_InitStructure;
      
        USART_DeInit( USART1 );
   
        USART_InitStructure.USART_BRR        = 115200;
        USART_InitStructure.USART_WL            = USART_WL_8B;
        USART_InitStructure.USART_STBits            = USART_STBITS_1;
        USART_InitStructure.USART_Parity                = USART_PARITY_RESET;
        USART_InitStructure.USART_HardwareFlowControl = USART_HARDWAREFLOWCONTROL_NONE;
        USART_InitStructure.USART_RxorTx                = USART_RXORTX_RX | USART_RXORTX_TX;
        USART_Init(USART1, &USART_InitStructure);
    }
    USART_Enable(USART1, ENABLE);
    /* Enable the USART1 Transmoit interrupt: this interrupt is generated when the
    USART1 transmit data register is empty */  
    USART_INT_Set(USART1, USART_INT_TBE, ENABLE);
   
    /* Wait until USART1 send the TxBuffer */
    while(TxCount < NbrOfDataToTransfer)
    {}
   
    /* The software must wait until TC=1. The TC flag remains cleared during all data
    transfers and it is set by hardware at the last frame end of transmission*/
    while (USART_GetBitState(USART1, USART_FLAG_TC) == RESET)
    {}
   
    /* Enable the USART1 Receive interrupt: this interrupt is generated when the
    USART1 receive data register is not empty */
    USART_INT_Set(USART1, USART_INT_RBNE, ENABLE);
   
    /* Wait until USART1 receive the RxBuffer */
    while(RxCount < NbrOfDataToRead)
    {}
    if(RxCount == NbrOfDataToRead)
    printf("\n\r USART receive successfully!\n\r");
      
    /* Infinite loop */
    while (1)
    {
    }
}

6

主题

83

帖子

254

积分

中级技术员

发表于 2015-8-3 10:18 | 显示全部楼层 |返回版面
把这个去掉试试,然后看下晶振和时钟是否正确,debug下,
SysTick_Configuration();               //这个函数官网上没有写,我加上的

8

主题

12

帖子

36

积分

实习生

 楼主| 发表于 2015-8-4 09:14 | 显示全部楼层 |返回版面
mumu3013 发表于 2015-8-3 10:18
把这个去掉试试,然后看下晶振和时钟是否正确,debug下,
SysTick_Configuration();               //这个 ...

不是这个的原因,这个问题已经解决了,但是现在有新的问题我想知道USART2初始化设置的时候有什么特殊的设置吗?为什么我和USART1相同的设置可是USART的STR寄存器中的REA一直不置位,导致我一直不能接受。。。

6

主题

83

帖子

254

积分

中级技术员

发表于 2015-8-4 10:48 | 显示全部楼层 |返回版面
kangwenhong1992 发表于 2015-8-4 09:14
不是这个的原因,这个问题已经解决了,但是现在有新的问题我想知道USART2初始化设置的时候有什么特殊的设 ...

之前什么问题造成的?
USART2我试了一下,也是没那一位,具体不清楚为啥

2

主题

705

帖子

2176

积分

初级工程师

发表于 2015-8-4 12:27 | 显示全部楼层 |返回版面
你的是130G4还是其他?引脚定义不一样的,G4的PA2和PA3只能是USART1
学无止境
拒绝浮躁

2

主题

705

帖子

2176

积分

初级工程师

发表于 2015-8-4 12:30 | 显示全部楼层 |返回版面
回错帖子了,我回答的是你另外一个帖子的问题。
学无止境
拒绝浮躁

8

主题

12

帖子

36

积分

实习生

 楼主| 发表于 2015-8-5 20:34 | 显示全部楼层 |返回版面
mumu3013 发表于 2015-8-4 10:48
之前什么问题造成的?
USART2我试了一下,也是没那一位,具体不清楚为啥

不知道哎,不过奇怪的是不论有没有置位他可以接受了。。。。。我想知道在串口接受的时候,我怎么判断他接受完了呢?就是说他发送的数据没有达到接受缓存区的上限值我怎么判断他接受完了??然后去用接收的数据?

6

主题

83

帖子

254

积分

中级技术员

发表于 2015-8-6 14:05 | 显示全部楼层 |返回版面
这一位和接收有多少有关系吗?

串口一次只能接收一个数据位(8或9位)的数据,每次接收后,
如果一帧接收完成,并且RBNE位置位,那么就可以读USART_RDTR寄存器
RBNE位必须在下一帧数据到达之前清0,否则就会造成过载错误。

来一帧数据你要接收一下,放在你处理的缓冲区呢,怎么判断接收完成,是你自己通信预定的,

5

主题

43

帖子

129

积分

中级技术员

发表于 2017-8-2 19:38 | 显示全部楼层 |返回版面
kangwenhong1992 发表于 2015-8-4 09:14
不是这个的原因,这个问题已经解决了,但是现在有新的问题我想知道USART2初始化设置的时候有什么特殊的设 ...

你好,这个是什么原因,能告诉下吗
您需要登录后才可以回帖 登录 | 注册 手机登录

本版积分规则

分享 快速回复 返回顶部 返回列表