这段代码中,我定义了USART2后为什么接收不到数据,我把USART2通过串口调试助手能显示成功发送,发送成功后另一个模块也能成功返回0x45,但是USART2却接收不到。

#include "debug.h"

#include

#include

#define START    0x57AB            /* 获取芯片及固件版本 */

#define CMD01_GET_IC_VER    0x01            /* 获取芯片及固件版本 */

u16 RxBuffer2[100] = {0};

u8 TxBuffer2[] = "#Buffer2 Send from USART3 to USART2 using HalfDuplex Mode!"; /* Send by UART3 */

u16 TxBuffer1[] = {0x57,0xAB,0x01};

u8 TxCnt2 = 0;

u16 res;


void USART2_Init(void)

{

    GPIO_InitTypeDef  GPIO_InitStructure = {0};

    USART_InitTypeDef USART_InitStructure = {0};


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);


    /* USART2 TX-->A.2   RX-->A.3 */

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_Init(GPIOA, &GPIO_InitStructure);



    USART_InitStructure.USART_BaudRate = 9600;

    USART_InitStructure.USART_WordLength = USART_WordLength_8b;

    USART_InitStructure.USART_StopBits = USART_StopBits_1;

    USART_InitStructure.USART_Parity = USART_Parity_No;

    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

    USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;


    USART_Init(USART2, &USART_InitStructure);

    USART_Cmd(USART2, ENABLE);

}


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

 * @fn      main

 *

 * @brief   Main program.

 *

 * @return  none

 */

int main(void)

{

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

SystemCoreClockUpdate();

Delay_Init();

USART_Printf_Init(115200);/* USART1 INIT DBUG */

USART2_Init(); /* USART2 INIT */

printf("SystemClk:%d\r\n",SystemCoreClock);

printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );

printf("This is printf example\r\n");

for(int i=0;i<3;i++)

{

    Delay_Ms(10);

    USART_SendData(USART2, TxBuffer1[i]);

}

res=USART_ReceiveData(USART2);

printf("SystemClk:%d\r\n",res);

while(1)

    {


}

}


你好,可以将串口接收放到中断中,保证每次接收芯片都能相应。另外串口发送也需要判断发送完成标志位,保证发送完再进行下一包发送。附件为串口接收发送测试例程,可参考下。

icon_rar.gifCH32V203C8T6-USART-SEND-RECEIVE.zip



个人建议,去其他论坛这芯片的版去找版主的专题贴的代码质量都比官方的例程好N倍。

我就是被CH32V307R1开发板的例程坑过的,对于官方的那些例程不仅没啥实用性、还会误导入门的人。。。。


只有登录才能回复,可以选择微信账号登录