ARM(STM32)

STM32 Value Line Discovery - ARM

絶賛工事中です

使う

GPIOの使用

  • 設定
    すべて開くすべて閉じる
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
    
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    
    /* Supply APB2 Clock for GPIOA */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
     
    GPIO_InitTypedef GPIO_InitStructure;
     
    /* Configure Input Pin: input floating */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;    // PA0
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
     
    /* Configure Output Pin: output push-pull */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;    // PA1
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
  • 使う
    すべて開くすべて閉じる
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
    
     
     
     
     
     
     
     
     
     
     
     
     
    
    /* Set PA1 to HIGH */
    GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_SET);
     
    /* ... */
     
    /* Set PA1 to LOW */
    GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_RESET);
     
    /* ... */
     
    /* Read from PA0 */
    uint8_t hoge = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);

PWMの設定(TIM使用、ピンの機能割り当て変更)

  • 設定
    すべて開くすべて閉じる
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
    
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    
    #define TIM3_CNTRCLK 24000000UL // TIM3 Clock Frequency : 24MHz
    #define TIM3_FREQ 36000         // TIM3 PWM Frequency   : 36KHz
     
    /* ... */
     
    /* Supply APB1 Clock for TIM3 */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
     
    /* Remap Configuration */
    GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);
     
    GPIO_InitTypedef GPIO_InitStructure;
     
    /* Configure LED-Blue(PWM) : alternate function push-pull */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;    // PC8
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
     
    TIM3_PrescalerValue=(uint16_t)(SystemCoreClock/TIM3_CNTRCLK)-1;
    TIM3_TimerPeriod=(uint16_t)(TIM3_CNTRCLK/TIM3_FREQ)-1;
     
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
    TIM_OCInitTypeDef TIM_OCInitStruct;
     
    /* Configure time base of TIM3 */
    TIM_TimeBaseInitStruct.TIM_Period=TIM3_TimerPeriod;
    TIM_TimeBaseInitStruct.TIM_Prescaler=TIM3_PrescalerValue;
    TIM_TimeBaseInitStruct.TIM_ClockDivision=0;
    TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
     
    /* Configure output channel */
    TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
    TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
    TIM_OCInitStruct.TIM_Pulse=0;
    TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;
    TIM_OC1Init(TIM3,&TIM_OCInitStruct);
    TIM_OC2Init(TIM3,&TIM_OCInitStruct);
    TIM_OC3Init(TIM3,&TIM_OCInitStruct);
    TIM_OC4Init(TIM3,&TIM_OCInitStruct);
     
    /* Enable TIM3 */
    TIM_Cmd(TIM3,ENABLE);
  • 使う
    すべて開くすべて閉じる
      1
      2
      3
      4
      5
      6
    
     
     
     
     
     
     
    
    uint16_t duty=540;
     
    /* ... */
     
    /* Set value of TIM3 Ch3 */
    TIM3->CCR3=duty;

EXTI(外部割り込み)の設定

  • 設定
    すべて開くすべて閉じる
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
    
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    
    /* Configure EXTI Line0 : on-board switch */
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
     
    EXTI_InitTypeDef EXTI_InitStruct;
     
    EXTI_InitStruct.EXTI_Line=EXTI_Line0;
    EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
    EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising; // Detect Rising Edges
    EXTI_InitStruct.EXTI_LineCmd=ENABLE;
    EXTI_Init(&EXTI_InitStruct);
     
    NVIC_InitTypeDef NVIC_InitStruct;
     
    /* Configure NVIC Priority for EXTI Line0 */
    NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0x00;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority=0x00;
    NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
    NVIC_Init(&NVIC_InitStruct);
  • 使う(通常はstm32f10x_it.cに記述)
    すべて開くすべて閉じる
      1
      2
      3
      4
      5
      6
      7
    
     
    -
    -
    |
    |
    !
    !
    
    /* Interrupt Handler of EXTI Line0 */
    void EXTI0_IRQHandler(void){
        if(EXTI_GetITStatus(EXTI_Line0)!=RESET){
            EXTI_ClearITPendingBit(EXTI_Line0);
            /* Write your code here */
        }
    }

USARTの設定

  • 設定
    すべて開くすべて閉じる
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
    
     
     
     
     
     
     
     
     
     
     
     
     
     
    
    GPIO_PinRemapConfig(GPIO_PartialRemap_USART3,ENABLE);
     
    GPIO_InitTypeDef GPIO_InitStructure;
     
    /* Configure USART3_Tx : alternate function push-pull */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;    // PC10
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
     
    /* Configure USART3_Rx : in floating */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;    // PC11
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
  • 使う
    すべて開くすべて閉じる
      1
      2
      3
      4
      5
    
     
    -
    |
    |
    !
    
    /* Example of putc */
    void USART_putc(uint8_t ch){
        USART_SendData(USART3,ch);
        while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
    }

その他

  • ブレッドボードを2つ使うとボードそのままで使える。ただし一部ピンは使用できない。
  • ライブラリのドキュメントがchm形式でしかないため不便。
  • 基本的にはサンプルコードを見ながらやるべし。

特に注意する項目

GPIOに関する注意

PA13〜15とPB3〜4はJTAG用に使われるピンなので、通常はGPIOとして使用しないこと。
また、PC13〜15はバッテリバックアップドメインに使用されるので、GPIOには使用できない。

割り込みを使用する際のNVICの設定


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-08-30 (木) 01:35:15 (2041d)