LoginSignup
1
1

More than 3 years have passed since last update.

STM32L010F4PxとCubeMXでhello world

Posted at

動機

mbedライブラリでやってる人がいた。

STM32L010のシリアルでHello Worldと出力 - Qiita

ためしにCubeMXでもやってみた。

設定

image.png

USART2を有効にして、LEDのピンも定義。基本的に全部デフォルト。

mainのループ

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
    {
        const uint32_t tick = HAL_GetTick();
        char buff[30] = "hello world XXXX.XXX\n";

        buff[12] = tick / 1000000 % 10 + '0';
        buff[13] = tick / 100000 % 10 + '0';
        buff[14] = tick / 10000 % 10 + '0';
        buff[15] = tick / 1000 % 10 + '0';
        // ピリオド
        buff[17] = tick / 100 % 10 + '0';
        buff[18] = tick / 10 % 10 + '0';
        buff[19] = tick / 1 % 10 + '0';

        HAL_UART_Transmit(&huart2, (uint8_t *)buff, strlen(buff), 10);
    }

    HAL_GPIO_TogglePin(USER_LED_GPIO_Port, USER_LED_Pin);
    HAL_Delay(500);

    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */

適当なバッファを作ってhello world nnnn.nnn\nの文字列を作る(nnnn.nnnはマイコン内の時間を秒で書き込む)。
あとはHALに丸投げしてUARTで転送。LEDチカチカも。

2021-05-07_05-48-13_IMG_0381.jpg

image.png

1回毎に2ミリ秒ずつくらい時間がずれてる。
20バイトあまりを115.2kbaudで送ると1.8msほどかかるので、1回毎に2msずつずれていく。


バイナリサイズは7KBくらいになった。ROMは16Kなので、もう少しいろいろできそう。
sprintfで"hello world %lu\n"みたいに文字列化させるとバイナリは9KBくらいになる。

arm-none-eabi-objdump -h -wにELFを読み込ませると、.dataと.bssがそれぞれ0xC、0xE4と表示された。-fstack-usageで各関数のスタック使用量を出してみると、SystemClock_Configが104バイトで最多だった。
スタックが余裕を見て256バイト、dataとbss合わせて256バイト、として、512バイトが使用済み、1.5KiBの空き、ということかな? 結構余裕ありそうな気がしてきた。

試しにRTOSも入れてみたけど、CMSIS-v2ラッパーはメモリ不足でビルドすらできず、v1ラッパーならあちこち削ってかろうじてタスク3個くらいは最低限動くかも、くらい。100円未満のマイコンにRTOSなんてのせちゃいけない(戒め)。
100円以上のマイコンなら載せてもいいのかって? STM32G031J6MxならRAMが8Kと、STM32L010F4Pxの4倍もあるから、RTOSもそれなりに使い物になりそうな気がする。今度はGPIO少なすぎて何やればいいのかわからないけど。気が向いたら試してみよう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1