這段代碼中,我定義了USART2后為什么接收不到數(shù)據(jù),我把USART2通過(guò)串口調(diào)試助手能顯示成功發(fā)送,發(fā)送成功后另一個(gè)模塊也能成功返回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)

? ? {


}

}


你好,可以將串口接收放到中斷中,保證每次接收芯片都能相應(yīng)。另外串口發(fā)送也需要判斷發(fā)送完成標(biāo)志位,保證發(fā)送完再進(jìn)行下一包發(fā)送。附件為串口接收發(fā)送測(cè)試?yán)?,可參考下?/p>

icon_rar.gifCH32V203C8T6-USART-SEND-RECEIVE.zip



個(gè)人建議,去其他論壇這芯片的版去找版主的專(zhuān)題貼的代碼質(zhì)量都比官方的例程好N倍。

我就是被CH32V307R1開(kāi)發(fā)板的例程坑過(guò)的,對(duì)于官方的那些例程不僅沒(méi)啥實(shí)用性、還會(huì)誤導(dǎo)入門(mén)的人。。。。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频