STM32L010F4PxとCubeMXでhello world
動機
mbedライブラリでやってる人がいた。
STM32L010のシリアルでHello Worldと出力 - Qiita
ためしにCubeMXでもやってみた。
設定
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チカチカも。
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少なすぎて何やればいいのかわからないけど。気が向いたら試してみよう。
Author And Source
この問題について(STM32L010F4PxとCubeMXでhello world), 我々は、より多くの情報をここで見つけました https://qiita.com/amutou/items/f521bdbf616b5ef4cf5d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .