summyb0d075 发表于 2019-11-24 21:20:27

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);
    }
}


techmm 发表于 2019-11-24 23:47:57

PA9你没设置,你在PA9下面加多一句GPIO_Init(GPIOA,&GPIO_InitStructure);

mylovemcu 发表于 2019-11-25 08:15:21

这种问题出现以后可以用仿真查看寄存器配置有没有问题

现在这种情况就是GPIO配置失败了PA9结构体配置完了以后没有初始化配置之后对PA10结构体配置以后就把PA9的结构体覆盖了PA9的配置就无效了

正确的做法是配置完一个IO口就调用一次 GPIO_Init函数就没问题了

mikecai 发表于 2019-11-25 09:02:08

这是我用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);

dingyh1 发表于 2019-11-27 23:19:02

可以打开memory查看寄存器的值是否配置正确

butterflyspring 发表于 2019-12-2 12:09:41

二楼说的很对,相当于PA9没有经过初始化:)
页: [1]
查看完整版本: stm32 usart1 无法发送数据