使用CH340G进行usart通讯,关键通过WCH串口工具,接收到数据就是00,HSM晶振设置8M,但是依旧接收到00

使用CH340G进行usart通讯,使用微处理STM32V407VG 关键通过WCH串口工具,接收到数据就是00,HSM晶振设置8M,但是依旧接收到00



代码如下:

#include 
#include 

static USART_InitTypeDef USART_InitStructure;
static GPIO_InitTypeDef GPIO_InitStructure;
static NVIC_InitTypeDef NVIC_InitStructure;

// 位带操作
#define displacementPortAOut(pin) *(volatile uint32_t *)(0x42000000 + (GPIOA_BASE+ 0x14 - 0x40000000)*32 + pin*4)

// 位带操作
#define displacementPortAIn(pin) *(volatile uint32_t *)(0x42000000 + (GPIOA_BASE+ 0x10 - 0x40000000)*32 + pin*4)

static void UsartInitConfig(void){

	
	//启用串口硬件时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
	
	
	//启用PA的硬件时钟
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
	
	//初始引脚9,引脚10 、复用模式
	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;  //串口绑定引脚号           
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  // 复用模式
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	
	//GPIO初始
	 GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	//引脚硬件绑定硬件为复用模式
	 GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_USART1);
	 GPIO_PinAFConfig(GPIOD,GPIO_PinSource10,GPIO_AF_USART1);
		
	//配置串口参数 :比特率、字节、停止位、是否校验奇偶、收发模式、是否需要硬件控制
	 USART_InitStructure.USART_BaudRate = 115200; // 比特率
	 USART_InitStructure.USART_WordLength = USART_WordLength_8b;    // 8字节      
	 USART_InitStructure.USART_StopBits = USART_StopBits_1;    // 停止位
	 USART_InitStructure.USART_Parity = USART_Parity_No;    //是否校验奇偶
	 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  //收发模式
	 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //是否需要硬件控制
	
	//串口号绑定初始
	 USART_Init(USART1,&USART_InitStructure);
	 
	 //配置串口接受数据触发一个中断函数
	 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
	 
	
	//嵌套向量中断控机器优先级组配置:
	 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

	//嵌套向量中断控制器
	 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;               
     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; 
     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;       
     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

	//嵌套向量中断控制器初始化
	 NVIC_Init(&NVIC_InitStructure);

	//启动串口
	 USART_Cmd(USART1, ENABLE);

}

void USART_SendString(USART_TypeDef* USARTx, char *DataString)
{
	int i = 0;
	USART_ClearFlag(USARTx,USART_FLAG_TC);										//发送字符前清空标志位(否则缺失字符串的第一个字符)
	while(DataString[i] != '\0')												//字符串结束符
	{
		USART_SendData(USARTx,DataString[i]);									//每次发送字符串的一个字符
		while(USART_GetFlagStatus(USARTx,USART_FLAG_TC) == 0);					//等待数据发送成功
		USART_ClearFlag(USARTx,USART_FLAG_TC);									//发送字符后清空标志位
		i++;
	}
}



// 入口函数
int main(void)
{

    // 初始串口配置
	UsartInitConfig();
	
	// 发送串口信息
	USART_SendString(USART1,"Hello world!\r\n");

	
   while(1)
   {

   }
}


晶振配置:

#if !defined  (HSE_VALUE) 
  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
  
#endif /* HSE_VALUE */

/************************* PLL Parameters *************************************/
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M      8
/* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */
#define PLL_Q      7

#if defined (STM32F40_41xxx)
#define PLL_N      336
/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P      2
#endif /* STM32F40_41xxx */

#if defined (STM32F427_437xx) || defined (STM32F429_439xx)
#define PLL_N      360
/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P      2
#endif /* STM32F427_437x || STM32F429_439xx */

#if defined (STM32F401xx)
#define PLL_N      336
/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P      2
#endif /* STM32F401xx */



搞不懂到底为什么收到00



image.png












您好,根据如上信息,应该是因为双方的通讯串口波特率不匹配导致。建议实测下MCU的TXD发送波特率,查看1个比特位宽度看下是否为设置不正确导致。


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