0

我刚刚开始使用 STM32f407 探索板进行冒险。我正在使用 CoIDE 的最新稳定版本并使用最新的工具链/库。

我设法编写了以下代码以使用板上的 USART1

int main(void){

GPIO_InitTypeDef  GPIO_InitStructure;   // Definicja struktury do inicjalizacji PINOW
USART_InitTypeDef USART_InitStructure;

// Initialize pins as alternating function
GPIO_InitStructure.GPIO_Pin     = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode    = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType   = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd    = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed   = GPIO_Speed_2MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);

// Modify USART_InitStructure for non -default values , e.g.
// USART_InitStructure.USART_BaudRate = 38400;
USART_InitStructure.USART_BaudRate              = 9600;
USART_InitStructure.USART_WordLength            = USART_WordLength_8b;
USART_InitStructure.USART_StopBits              = USART_StopBits_1;
USART_InitStructure.USART_Parity                = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl   = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode                  = USART_Mode_Tx|USART_Mode_Rx;
USART_Init(USART1 ,&USART_InitStructure);
USART_Cmd(USART1 , ENABLE);


while(1)
{
    while (USART_GetFlagStatus(USART1 , USART_FLAG_TXE) == RESET);
    USART1 ->DR = (uint16_t)(45 & 0x01FF);

    Delay(0x3FFFFF);
}

}

此外,我通过设置 HSE 和其他时钟详细信息确保时钟配置正确

    #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
#define PLL_N      336

/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P      2

/* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */
#define PLL_Q      7

/******************************************************************************/

在控制台中,我刚刚收到垃圾,我做了以下操作以确保设置正确: - 检查 USB-RS232 转换器 - 在转换器和 STM32 板之间切换 - 切换转换器 - 使用 STM32CubeMX 生成的代码进行比较,看起来一致(逻辑当然是明智的:))

从我初学者的角度来看,这有点“炫技” :(我似乎找不到这个的根本原因

任何帮助,将不胜感激


更新 1:为了找到根本原因,我决定尝试其他 USART 模块之一。下面是我的 USART3 代码,这个开箱即用的代码导致我在最初的问题中错误地初始化 USART1?

int main(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;

  /* Enable GPIO clock */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);

  /* Enable UART clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);

  /* Connect PXx to USARTx_Tx*/
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_USART3);

  /* Connect PXx to USARTx_Rx*/
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_USART3);

  /* Configure USART Tx as alternate function  */
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /* Configure USART Rx as alternate function  */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  USART_InitStructure.USART_BaudRate = 9600;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  /* USART configuration */
  USART_Init(USART3, &USART_InitStructure);

  /* Enable USART */
  USART_Cmd(USART3, ENABLE);

  SysTick_Config(SystemCoreClock / 1000);

  while(1)
  {


    for (int var = 45; var < 128; var++)
    {
        USART_SendData(USART3, var);

        Delay_SysTick(500); // 1 sek
    }



  }

}


解决方法:经过大量挖掘和尝试,似乎USART1会与USB组件发生碰撞,并且有电容器与传输链路发生碰撞以在ST论坛上回答

我希望我以前能在文档的某个地方找到这个。

希望这对某人有所帮助,并感谢大家的帮助

4

2 回答 2

1

此板上的 USART1(TX 引脚)具有与流量冲突的电容器。ST论坛上有提到。

于 2015-01-17T13:54:55.473 回答
0

当发送方的波特率与接收方的波特率不同时,通常会导致终端出现垃圾。

于 2015-01-16T13:27:39.380 回答