STM32F407: USART 遇到的问题
Posted WHLOOK
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32F407: USART 遇到的问题相关的知识,希望对你有一定的参考价值。
今天初次使用STM32F407进行USART串口通讯实验,按照f103的代码写完了,发现没法发送数据,
Google后发现是由于没有将端口映射到USART1,然后添加如下代码:
1 GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_USART1); // PB6 - TX 2 GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_USART1); // PB7 - RX
然后可以通讯了,但是数据是错误的,检查代码无误,又Google了一下,原来是板子的晶振频率不对,
在 stm32f4xx.h 中默认是25M的,但是我的板子是8M的晶振,所以修改了一下该文件(去掉文件的只读权限后可修改):
1 #if !defined (HSE_VALUE) 2 #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ //原来是25000000 3 4 #endif /* HSE_VALUE */
修改后可以正常通讯了。
附初始化代码:
1 GPIO_InitTypeDef GPIO_InitStructure; 2 USART_InitTypeDef USART_InitStruct; 3 NVIC_InitTypeDef NVIC_InitStruct; 4 5 6 /* 使能 */ 7 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); 8 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); 9 10 /* 端口映射 */ 11 GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_USART1); 12 GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_USART1); 13 14 /* 中断初始化 */ 15 NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn; 16 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2; 17 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; 18 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; 19 NVIC_Init(&NVIC_InitStruct); 20 21 /* 引脚(RX TX)初始化 */ 22 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; // tx 23 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 24 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; 25 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; 26 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; 27 GPIO_Init(GPIOB,&GPIO_InitStructure); 28 29 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; // rx 30 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 31 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; 32 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; 33 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; 34 GPIO_Init(GPIOB,&GPIO_InitStructure); 35 36 /* 串口初始化 */ 37 USART_InitStruct.USART_BaudRate = 9600; 38 USART_InitStruct.USART_WordLength = USART_WordLength_8b; 39 USART_InitStruct.USART_StopBits = USART_StopBits_1; 40 USART_InitStruct.USART_Parity = USART_Parity_No; 41 USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; 42 USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; 43 USART_Init(USART1,&USART_InitStruct); 44 45 46 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); 47 USART_ClearFlag(USART1,USART_FLAG_TC); 48 USART_Cmd(USART1,ENABLE);
以上是关于STM32F407: USART 遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章
STM32F407单片机UART串口gpio口复用功能配置问题