使用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
热门产品 :
CH641: PD及无线充电专用MCU