0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Nucleo 8S208RB セットアップ + 小物

Posted at

インテルMac + VSCode + PIO
Platform: ST STM8 2.1.0

Lチカ

フォルダー
~/.platformio/platforms/ststm8/examples/spl-blink
をまとめてどこかにコピーします。

$ pio run -e nucleo_8s208rb --target upload

補足

最低限にしてみた

platformio.ini
[env:nucleo_8s208rb]
platform = ststm8
board = nucleo_8s208rb
framework = spl
main.c
#include "stm8s.h"
#include "stm8s_it.h"

void main(void)
{

  GPIO_Init(GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST);

  while (1)
  {
    GPIO_WriteReverse(GPIOC, GPIO_PIN_5);
    for (uint32_t c = 200000L; c > 0; c--) {}
  }

}

// from example

#ifdef USE_FULL_ASSERT

void assert_failed(uint8_t *file, uint32_t line)
{
  (void)file;
  (void)line;
  while (1)
  {
  }
}
#endif

最後の void assert_failed(uint8_t *file, uint32_t line) はエラーがあったときのためのようです。

デバッグ

未だに成功していません。やむを得ず,UARTによるデバッグを先に確かめます。

UARTを試す

フォルダー
~/.platformio/platforms/ststm8/examples/spl-uart-simple-printf
をまとめてどこかにコピーします。

platformio.ini
[env:nucleo_8s208rb]
platform = ststm8
board = nucleo_8s208rb
framework = spl

を追加します。

$ pio run -e nucleo_8s208rb --target upload; pio device monitor -b 115200

(中略)

--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
Hello, world!
Hello, world!

(Ctrl+C を押す)

$ 

補足

例によって簡略化すると

main.c
UART1_DeInit();
UART1_Init(
  (uint32_t)115200,
  UART1_WORDLENGTH_8D,
  UART1_STOPBITS_1,
  UART1_PARITY_NO,
  UART1_SYNCMODE_CLOCK_DISABLE,
  UART1_MODE_TXRX_ENABLE);

で設定完了です。NucleoではPA4/PA5がSTLINKのVCPと接続されていますので,そのままシリアルモニターで確認できます。

RM0016によれば,GPIOに Alternate Function のような設定はなく,
UART1を使えるようにすれば,割り当てられている PA4/PA5 がUART1として使えるようになるという感じのようです。

上のサンプルでは printf も使えるようになっているので,シリアルモニターでデバッグが可能ですね。

main.c
    printf("GPIOE->IDR [4] %d\r\n", ((GPIOE->IDR) & 1<<4) >> 4);

芸が無いですが... GPIOE IDR 4ビット目 NucleoではUSERボタンを読んでいます。

動作周波数を決める

16MHz

main.c
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

DIV1DIV2 にすれば 8MHz

タイマーでLチカ

以下のサンプルを移植させていただきました m(_ _)m

フォルダー
~/.platformio/platforms/ststm8/examples/spl-blink
をまとめてどこかにコピーします。

逆順になりましたが,stm8s_conf.h をよく見て,使うインクルードファイルがコメントアウトされていないか確認する必要があります。

以下追記しました。

stm8s_conf.h
#if defined (STM8S208) || defined (STM8AF52Ax)
// #include "stm8s_can.h"
#endif /* (STM8S208) || (STM8AF52Ax) */
//#include "stm8s_clk.h" // ここを使います。
//#include "stm8s_exti.h"
//#include "stm8s_flash.h"
#include "stm8s_gpio.h"
//#include "stm8s_i2c.h"
//#include "stm8s_itc.h"
//#include "stm8s_iwdg.h"
//#include "stm8s_rst.h"
//#include "stm8s_spi.h"
//#include "stm8s_tim1.h" // ここも使います。

変更後
image.png

SPLの場合,割り込みハンドラは stm8s_it.c に書く流儀のようです。ここにLチカ本体を書きます。

変更前
image.png

変更後

stm8s_it.c
INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
{
  TIM1_ClearFlag(TIM1_FLAG_UPDATE); // 再スタート
  GPIO_WriteReverse(GPIOC, GPIO_PIN_5);
  return;
}
main.c
#include "stm8s.h"
#include "stm8s_it.h"

void main(void)
{

  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); // 16MHz

  GPIO_Init(GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST);

  TIM1_DeInit();
  TIM1_TimeBaseInit(
    1599, // prescaler
    TIM1_COUNTERMODE_UP, 
    5000,  // period
    0);
  TIM1_ITConfig(TIM1_IT_UPDATE, ENABLE);
  TIM1_Cmd(ENABLE); // start TIM1

  enableInterrupts();

  while (1)
  {
  }

}

// 以下略

周波数は 16MHz / (1599+1) / 5000 = 2Hz です。

とりあえずここまで

カッコいい梱包箱ですね!

image.png

チップそのものはNRNDなのがちょっと残念ですが...

STM32より機能がシンプルな分,マニュアルとサンプルを読みながら理解してくのが楽しいです。

おまけ platformio CLI メモ

~/.platformio/penv にあるスクリプトで activate すると CLI も使えるようになることがわかり,それなりに便利ですね。

# create new project
$ pio project init

# Upload firmware
$ pio run --target upload

# Build specific environment
$ pio run -e nucleo_8s208rb

# Upload firmware for the specific environment
$  pio run -e nucleo_8s208rb --target upload

# Clean build files
$ pio run --target clean

# monitor
$ pio device monitor -b 115200
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?