1

STM32F030 の GPIO ピンの 1 つを SET または RESET しようとすると、問題が発生します。

STM32F0xx_HAL_Driver を使用しており、GPIO PA12 を次のように初期化します。

    GPIO_InitStruct.Pin = GPIO_PIN_12;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

また、次のコードを使用して UART を設定しました。

  huart1.Instance = USART1;
  huart1.Init.BaudRate = 9600; 
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_ENABLE;
  huart1.gState = HAL_UART_STATE_RESET;

  huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;

  HAL_UART_Init(&huart1);

PA12を UART1_RTS ピンとして使用できることはわかっていますが、RTS または CTS を使用するようにハードウェア フロー制御を設定していません。

私が直面している問題: コードの初期化後、UART1 接続を介してメッセージを受信できます返信するには、PA12を使用して設定しようとしている外部ICのピンを設定する必要があります。しかし、私が電話すると:

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET);

何も起こりません..

また、GPIO_PIN_RESET を呼び出しても何も起こりません。

ここで何が欠けていますか??

PCB をチェック (および測定) しました。PA12 は 10k のプルダウン抵抗で 0V にのみ接続されており、外部 IC は PA12 の出力を低く引き下げていません。

よろしくお願いします!

編集:

コメントで要求されているように、私の UART ピン構成:

  GPIO_InitStruct.Pin = GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF1_USART1;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

DMA を使用して Rx を設定しています。

    /* DMA controller clock enable */
    __HAL_RCC_DMA1_CLK_ENABLE();

    /* DMA interrupt init */
    /* DMA1_Channel2_3_IRQn interrupt configuration */
    hdma_usart1_rx.Instance = DMA1_Channel3;
    hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
    hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_usart1_rx.Init.Mode = DMA_NORMAL;
    hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_usart1_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH;

    HAL_DMA_Init(&hdma_usart1_rx);
    HAL_NVIC_SetPriority(DMA1_Channel2_3_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);

2回目の編集!:

UART の初期化が機能したに GPIO PA12 を再初期化することがわかりました。PA12を問題なく切り替えられるようになりました..

しかし、これはあるべき姿ではありません!STM32 HAL-lib を調べていますが、PA12 を設定するコードが見つかりません...

4

2 に答える 2