stm32 usart1 无法发送数据
串口软件没接收到数据,pin9没输出请问哪里出错了?还是硬件有问题?void usart_init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
/*gpio设置*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/*gpio初始化*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void usart_config(void)
{
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_StructInit(&USART_InitStructure);
USART_ClearFlag(USART1,USART_FLAG_TC); //清除发送完成标志位
USART_Cmd(USART1,ENABLE);
}
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_usart.h"
#include "led.h"
#include "timer.h"
int main(void)
{
SystemInit();
/*初始化系统,系统频率位72MHz*/
SysTick_Init();
usart_init();
usart_config();
while(1)
{
USART_SendData(USART1,0x04);
delay_ms(1000);
}
}
PA9你没设置,你在PA9下面加多一句GPIO_Init(GPIOA,&GPIO_InitStructure); 这种问题出现以后可以用仿真查看寄存器配置有没有问题
现在这种情况就是GPIO配置失败了PA9结构体配置完了以后没有初始化配置之后对PA10结构体配置以后就把PA9的结构体覆盖了PA9的配置就无效了
正确的做法是配置完一个IO口就调用一次 GPIO_Init函数就没问题了 这是我用cubeMX 生长成的:
__HAL_RCC_LPUART1_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
/**LPUART1 GPIO Configuration
PC0 ------> LPUART1_RX
PC1 ------> LPUART1_TX
*/
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); 可以打开memory查看寄存器的值是否配置正确 二楼说的很对,相当于PA9没有经过初始化:)
页:
[1]