STM32L010 プロジェクトの作成 / MPUの設定 / Lチカコーディング
TM32L010を使用しPA0にLEDを接続、250ms毎に点灯・消灯を繰り返すプログラムを作成します。
1. プロジェクトの作成
ワークスペースとなるフォルダを選択します。
ここでは、D:\Project\MyPrj\CubeIDE を作成し、ここをワークスペースとして使用します。
プロジェクトを作成すると、このフォルダの配下に作成されます。
ここでは、D:\Project\MyPrj\CubeIDE を作成し、ここをワークスペースとして使用します。
プロジェクトを作成すると、このフォルダの配下に作成されます。
次にターゲットデバイスを設定します。 ここではSTM32L010F4P6を選択します。
選択後、NEXTを押下します。
プロジェクト名を入力し、NEXTを押下します。
Next>を押下するとワークスペースが開きます。
プロジェクト名を入力し、NEXTを押下します。
Next>を押下するとワークスペースが開きます。
2. MPUの設定
2.1 ST-LINK設定
System Core の SYS を選択し、Debug Serial Wire をチェックします。
これで ST-LINK でデバッグが出来るようになります。
これで ST-LINK でデバッグが出来るようになります。
2.2 GPIO設定
Pinout view 上、PA0 のにマウスポインタを合わせ、左クリックするとリストが表示されるので GPIO Output を選択します。
System Core の GPIO を選択し、以下の様に設定します。
GPIO output level
High
GPIO mode
Open Drain
GPIO Pull-up/Pull-down
No pull up and no pull down
Maximum output speed
Very High
User Label
LED
GPIO output level
High
GPIO mode
Open Drain
GPIO Pull-up/Pull-down
No pull up and no pull down
Maximum output speed
Very High
User Label
LED
2.3 CLOCK設定
Clock Configuration タブを選択し、以下のように設定します。
System clock mux
PLLCLK
PLL PllMul
x4
System clock mux
PLLCLK
PLL PllMul
x4
2.4 コード生成
【Project】メニュー【Ganerate Code】またはメニューバーのアイコン
をクリック
【YES】ボタンを押下するとソースコードが生成されます。
GPIO初期化のコードはこの様になります。
2.5. 入力ポートの追加
これだけではつまらないので、入力ポートにタクトSWを接続し、タクトSWを押下している間だけLチカさせる処理を追加します。
Project Explorer の LED-Flash.ioc をクリックしてPinout Configurationを表示させます。
Project Explorer の LED-Flash.ioc をクリックしてPinout Configurationを表示させます。
System Core の GPIO を選択し、以下の様に設定します。
GPIO mode
Input mode
GPIO Pull-up/Pull-down
Pull-up
User Label
KEY
GPIO mode
Input mode
GPIO Pull-up/Pull-down
Pull-up
User Label
KEY
定義した入力ポートの設定処理が追加されました。
3. コーディング
Lチカのコーディングを行います。
main()の/* USER CODE BEGIN 3 */の下もしくは/* USER CODE END WHILE */の上に記述します。
ここに記述しないと、次回Code Genertateで削除されてしまいます。
HAL_GPIO_ReadPin()関数でポートKEYの状態を取得します。
トグルはHAL_GPIO_ReadPinで実行しHAL_Delayで250ms待ちます。
HAL_GPIO_WritePin()関数でキーが押されていないときはLEDを消灯させます。
以下は追加したコードです。
main()の/* USER CODE BEGIN 3 */の下もしくは/* USER CODE END WHILE */の上に記述します。
ここに記述しないと、次回Code Genertateで削除されてしまいます。
HAL_GPIO_ReadPin()関数でポートKEYの状態を取得します。
トグルはHAL_GPIO_ReadPinで実行しHAL_Delayで250ms待ちます。
HAL_GPIO_WritePin()関数でキーが押されていないときはLEDを消灯させます。
以下は追加したコードです。
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_RESET) {
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
HAL_Delay(250);
}
else {
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
}
}
/* USER CODE END 3 */
今回の回路図です。
今回、GPIOにLEDをダイレクトに接続していますが、MPUのIINJは余り大きくありません。
回路図では1KΩを接続し、1.2mA程度にしていますので暗いです。明るくしたい場合はTrを追加してください。
今回、GPIOにLEDをダイレクトに接続していますが、MPUのIINJは余り大きくありません。
回路図では1KΩを接続し、1.2mA程度にしていますので暗いです。明るくしたい場合はTrを追加してください。