告知です.
コミケ99にて当社のDDC/DACを頒布いたします.
日付 2021年12月31日(金) 東地区 テ-40b 東5ホール
サークル名 bangflat
コミケにお越しの際はお立ち寄りいただけますとありがたいです.
商品紹介ページを作りました.
ーーーー
さぁ、今日も張り切って行きましょう.在宅勤務だからダレてるそこの人、シャキッとしろよ~ (エガちゃんみたいなのでやめときます)デバイス変更とかやめてくれぇ~、、、という葛藤を抑え込んでEZ-USB→STM32へデバイス変更することにしたわたくし.
最近のSTM32のIDEを知らないし、ライブラリも知らない.work flowが全然わからん.
そういう時にやるのは、タイマ割り込みでLEDチカチカを動かすことだ.これでwork flowを知れるのと、ライブラリも少々知ることができる.
INDEXページへ
------
前回チロッと書いた STM32CubeIDE、STM32CubeMX を使う.インスト必要.
それでは開始.まずはSTM32CubeIDEを起動する.
【新project】
↓新projectを作る.
↓少し待つと「target selector」が起動する.
ここでやりたいのは、NUCLEO-F401RE を使うことである.①②③を操作する.
↓project名を入力するよう促されるのでここではtest2とした.
↓peripheralをデフォにしといていい?と訊かれる.これの意味は、後で使うSTM32CubeMXの設定をデフォにしとくよという意味だ.YESでいい
↓しばらく待たされる.裏でSTM32CubeMXが動いてるのだろう.やがてSTM32CubeIDE画面が開くのだが、わけわからん小窓ばっかり開いて操作に窮するかもしれないので、perspective設定のやり方を知っておいたらいいかもしれない.
window→perspective→open perspective→other
↓C/C++(default)を選ぶ
↓ようやく、見慣れたIDE画面っぽく表示された
【雛形ができた】
ここまでで、新projectの開始となったわけであるが、STM32CubeMXが何やらデフォ設定してくれているのでまずはそれをみてみよう.
Core→Src→main.c を開いてみる.
こんなのがproto宣言されている.
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
これらは、Clock treeの初期化、GPIOの初期化、UARTの初期化 ルーチンだ.
STM32CubeMXはデフォでこれらのperipheralをオンにしたという事である.
もちろん後からカスタマイズできるので心配ゴム用.
さらにmain.cを下へ降りると、いつものloopが居る.ここにuser programを書くのだ.
while (1)
{
ここに書く
}
というわけで、STM32CubeMXがperipheralを初期化するルーチンと、main()の雛形を吐き出してくれたのだとわかった.
【Peripheralの編集】
当面の目標は、タイマ割り込みでLEDチカチカであるから、UARTなんか不要である.
また、雛形に無いタイマを追加しなくちゃいけない.
そのためには、STM32CubeMXを使わなくちゃいけない.
↓STM32CubeMXを別窓で開く必要はない.test2.iocを開けばよい.
ここで軽く注意がある.執筆時点のSTM32CubeIDEが対応しているSTM32CubeMXのversionは5.6.0だった.しかし、DL可能な最新版は5.6.1だった.version不整合で動かなかった.STM32CubeMX 5.6.0をインストするしかなかった.
↓test2.iocタブがSTM32CubeMXそのものである.
↓まずは不要なUARTを削除しようか.要するに③Disableにすれば殺せるのだ.便利でいいね.
↓次はタイマを追加しようか.これにはちょっとタイマの知識が必要だ.
いまやりたいのは、
1)タイマが一定周期で自走する
2)タイマが一定周期で割り込み発生
3)おまけでLEDチカチカ
こういう仕様である.
これを実現できるのは、Output Compareというモードなのである.マイコンタイマには一般的なモードだ.他にもいろいろな一般的モードがあるのだが紙面の都合で解説は略させていただく.
①timer
②とりあえず末席のTIM11
③Activate
④output compare CH1
⑤PB9にCH1出力ピンが自動でアサインされる
⑥割り込みを有効にする
↓次は割り込み動作確認のためにGPIOを1つ使う設定.
PC8を出力ピンに設定したいとする.
PC8でマウスクリックするとセレクタが出てくるのでGPIO_Outputを選ぶ.簡単.
↓clock configurationタブを開くと、タイマに供給されるclockは84MHzになっているとわかる.変更はできるが今はこのままとする.
↓タイマ設定に戻る.
84MHz ÷ 840 ÷ 10000 = 10Hz
Enableは、クルクル回れの意味がある.
Tggle on matchは、PB9を10Hzでトグルせよの意味=5Hz
Pulse=0は、カウンタ値0の時にトグルせよの意味
↓雛形を吐き出させる.
編集済みのmain.cなどは上書きされてしまうので注意が必要だ.
USER CODE BEGIN~ENDの間に書けばMXで上書きされない.
【code編集】
雛形をコンパイルしただけでは動かない.main()とタイマ割り込みの飛び先にcodeを追加してあげる必要がある.
main.c
/* USER CODE BEGIN 2 */
HAL_TIM_OC_Start(&htim11, TIM_CHANNEL_1);
HAL_TIM_Base_Start_IT(&htim11);
/* USER CODE END 2 */
タイマ11を動かすのと、割り込みを動かす意味がある.
stm32f4xx_it.c
void TIM1_TRG_COM_TIM11_IRQHandler(void)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8);
HAL_TIM_IRQHandler(&htim11);
}
割り込み処理のお仕事として、PC8をトグルしてもらう.10Hzで割り込むので、その度にPC8をトグルするので、LEDは5Hzでチカチカする予定.
【RUN】
コンパイルして焼く.初回のみダイアログが出るかもだがOKを押す.
↓はいっ、2つのLEDが交互にチカチカしております.
PB9は、タイマのhardwareでチカチカさせている.
PC8は、割り込み処理でチカチカさせている.
-----
work flowはわかった.
でも、HALライブラリがまださっぱり.
HALのdocumentは1800ページもあるこれらしい.
音よ出でよ!
かしこ
------
前回チロッと書いた STM32CubeIDE、STM32CubeMX を使う.インスト必要.
それでは開始.まずはSTM32CubeIDEを起動する.
【新project】
↓新projectを作る.
↓少し待つと「target selector」が起動する.
ここでやりたいのは、NUCLEO-F401RE を使うことである.①②③を操作する.
↓project名を入力するよう促されるのでここではtest2とした.
↓peripheralをデフォにしといていい?と訊かれる.これの意味は、後で使うSTM32CubeMXの設定をデフォにしとくよという意味だ.YESでいい
↓しばらく待たされる.裏でSTM32CubeMXが動いてるのだろう.やがてSTM32CubeIDE画面が開くのだが、わけわからん小窓ばっかり開いて操作に窮するかもしれないので、perspective設定のやり方を知っておいたらいいかもしれない.
window→perspective→open perspective→other
↓C/C++(default)を選ぶ
↓ようやく、見慣れたIDE画面っぽく表示された
【雛形ができた】
ここまでで、新projectの開始となったわけであるが、STM32CubeMXが何やらデフォ設定してくれているのでまずはそれをみてみよう.
Core→Src→main.c を開いてみる.
こんなのがproto宣言されている.
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
これらは、Clock treeの初期化、GPIOの初期化、UARTの初期化 ルーチンだ.
STM32CubeMXはデフォでこれらのperipheralをオンにしたという事である.
もちろん後からカスタマイズできるので心配ゴム用.
さらにmain.cを下へ降りると、いつものloopが居る.ここにuser programを書くのだ.
while (1)
{
ここに書く
}
というわけで、STM32CubeMXがperipheralを初期化するルーチンと、main()の雛形を吐き出してくれたのだとわかった.
【Peripheralの編集】
当面の目標は、タイマ割り込みでLEDチカチカであるから、UARTなんか不要である.
また、雛形に無いタイマを追加しなくちゃいけない.
そのためには、STM32CubeMXを使わなくちゃいけない.
↓STM32CubeMXを別窓で開く必要はない.test2.iocを開けばよい.
ここで軽く注意がある.執筆時点のSTM32CubeIDEが対応しているSTM32CubeMXのversionは5.6.0だった.しかし、DL可能な最新版は5.6.1だった.version不整合で動かなかった.STM32CubeMX 5.6.0をインストするしかなかった.
↓test2.iocタブがSTM32CubeMXそのものである.
↓まずは不要なUARTを削除しようか.要するに③Disableにすれば殺せるのだ.便利でいいね.
↓次はタイマを追加しようか.これにはちょっとタイマの知識が必要だ.
いまやりたいのは、
1)タイマが一定周期で自走する
2)タイマが一定周期で割り込み発生
3)おまけでLEDチカチカ
こういう仕様である.
これを実現できるのは、Output Compareというモードなのである.マイコンタイマには一般的なモードだ.他にもいろいろな一般的モードがあるのだが紙面の都合で解説は略させていただく.
①timer
②とりあえず末席のTIM11
③Activate
④output compare CH1
⑤PB9にCH1出力ピンが自動でアサインされる
⑥割り込みを有効にする
↓次は割り込み動作確認のためにGPIOを1つ使う設定.
PC8を出力ピンに設定したいとする.
PC8でマウスクリックするとセレクタが出てくるのでGPIO_Outputを選ぶ.簡単.
↓clock configurationタブを開くと、タイマに供給されるclockは84MHzになっているとわかる.変更はできるが今はこのままとする.
↓タイマ設定に戻る.
84MHz ÷ 840 ÷ 10000 = 10Hz
Enableは、クルクル回れの意味がある.
Tggle on matchは、PB9を10Hzでトグルせよの意味=5Hz
Pulse=0は、カウンタ値0の時にトグルせよの意味
↓雛形を吐き出させる.
USER CODE BEGIN~ENDの間に書けばMXで上書きされない.
【code編集】
雛形をコンパイルしただけでは動かない.main()とタイマ割り込みの飛び先にcodeを追加してあげる必要がある.
main.c
/* USER CODE BEGIN 2 */
HAL_TIM_OC_Start(&htim11, TIM_CHANNEL_1);
HAL_TIM_Base_Start_IT(&htim11);
/* USER CODE END 2 */
タイマ11を動かすのと、割り込みを動かす意味がある.
stm32f4xx_it.c
void TIM1_TRG_COM_TIM11_IRQHandler(void)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8);
HAL_TIM_IRQHandler(&htim11);
}
割り込み処理のお仕事として、PC8をトグルしてもらう.10Hzで割り込むので、その度にPC8をトグルするので、LEDは5Hzでチカチカする予定.
【RUN】
コンパイルして焼く.初回のみダイアログが出るかもだがOKを押す.
↓はいっ、2つのLEDが交互にチカチカしております.
PB9は、タイマのhardwareでチカチカさせている.
PC8は、割り込み処理でチカチカさせている.
-----
work flowはわかった.
でも、HALライブラリがまださっぱり.
HALのdocumentは1800ページもあるこれらしい.
音よ出でよ!
かしこ
I think it’s cheap, it’s fun to watch, but you can try it before I bought it at mokoPCB.
返信削除