ARM(STM32)
STM32 Value Line Discovery - ARM †
絶賛工事中です
使う †
GPIOの使用 †
- 設定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypedef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; 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
|
|
GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_SET);
GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_RESET);
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 #define TIM3_FREQ 36000
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);
GPIO_InitTypedef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; 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;
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);
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);
TIM_Cmd(TIM3,ENABLE);
|
- 使う
1
2
3
4
5
6
|
| uint16_t duty=540;
TIM3->CCR3=duty;
|
EXTI(外部割り込み)の設定 †
- 設定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
|
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; EXTI_InitStruct.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStruct);
NVIC_InitTypeDef NVIC_InitStruct;
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
|
-
-
|
|
!
!
|
void EXTI0_IRQHandler(void){
if(EXTI_GetITStatus(EXTI_Line0)!=RESET){
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
|
USARTの設定 †
- 設定
1
2
3
4
5
6
7
8
9
10
11
12
13
|
| GPIO_PinRemapConfig(GPIO_PartialRemap_USART3,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOC, &GPIO_InitStructure);
|
- 使う
1
2
3
4
5
|
-
|
|
!
|
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の設定 †