0

LED 3 と 4 を点滅させるために、ここの例をSTM3240G-EVAL ボード用に調整しました。動作していますが、モード レジスタの設定に混乱しています。

GPIOG->MODER |= (GPIO_MODER_MODER6_0 | GPIO_MODER_MODER8_0) ;

リファレンス マニュアル(p186)を読むと、出力にはモードを 01 に設定する必要があると書かれていますが、この方法でモードを 0 に設定すると問題なく動作します。理想的には、他のモードに変更できるようにしたいのですが、上記のコードでは、ポート G のピン 6 とピン 8 が入力ピンに変更されていると想定していました。私は何かが欠けているに違いない。

関連する場合の私の完全なメインドキュメントは次のとおりです。

#include "stm32f4xx.h"

/* We will use PG6 and PG8 connected to LEDs 1 and 2 because they're the same port. */
/* Find base register value for Port G                                              */


void delay (int a);

int main(void)
{
  /*!< At this stage the microcontroller clock setting is already configured,
       this is done through SystemInit() function which is called from startup
       file (startup_stm32f0xx.s) before to branch to application main.
       To reconfigure the default setting of SystemInit() function, refer to
       system_stm32f0xx.c file
    */

    /* GPIOG Periph clock enable */
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOGEN;

GPIOG->MODER |= (GPIO_MODER_MODER6_0 | GPIO_MODER_MODER8_0) ;
    /* Configure PG6 and PG8 in output  mode  */

GPIOG->OTYPER &= ~(GPIO_OTYPER_OT_6 | GPIO_OTYPER_OT_8) ;
// Ensure push pull mode selected--default

GPIOG->OSPEEDR |= (GPIO_OSPEEDER_OSPEEDR6|GPIO_OSPEEDER_OSPEEDR8);
//Ensure maximum speed setting (even though it is unnecessary)

GPIOG->PUPDR &= ~(GPIO_PUPDR_PUPDR6|GPIO_PUPDR_PUPDR8);
//Ensure all pull up pull down resistors are disabled

while (1)
{
    /* Set PG6 and PG8 */
    /* the bit set/reset low register SETS the output data register     */
    /* the bit set/reset high register RESETS the output data register  */

    GPIOG -> BSRRL = (1 << 6);
    GPIOG -> BSRRL = (1 << 8);
    delay(500000);
    /* Reset PC8 and PC9 */
    GPIOG -> BSRRH = (1 << 6);
    GPIOG -> BSRRH = (1 << 8);
    delay(500000);
    }

return 0;
} 

void delay (int a)
{
volatile int i,j;

for (i=0 ; i < a ; i++)
{
    j++;
}

return;
}
4

1 に答える 1