STM32CubeIDEでSTM32F411設定

はじめに

前の記事でArduino IDEを生かしてSTM32F411の設定、動作確認を行った。今回はST本家のIDE環境であるSTM32CubeIDEでSTM32F411を設定してから、UARTシリアル出力を確かめたい。

STM32CubeIDEでSTM32F411設定
STM32CubeIDEでSTM32F411設定

環境

・PC Ubuntu 18.04
・STM32F411CEU6 on Weact Black Pill
・USB-TTLモジュール(STM32シリアル送信の確認)
・J-Linkモジュール、4ピン簡易版(STM32へスケッチを書き込む)

結線

・PC USB<-> J-LinkのUSB (J-Linkモジュール) J-Linkの3V3、GND、SWDIO、SWCLK <-> Black Pillの3V3、GND、SWDIO、SWCLK
・PC USB<-> USB-TTLモジュールのUSB (USB-TTLモジュール) USB-TTLケーブルのRx、Tx <-> Black PillのTx、Rx

設定

・STM32CubeIDEを立ち上げる。
・New Projectのtestを作成する。
・test.iocを開いて、システムクロックを100MHz(RCC、HSE、Crystal、25MHz)になるように設定する。
・USART2(A2ピン、A3ピン)をAsyncに設定する。
・sys(J-Link)を設定する。
・test.iocを保存して、BUILDを行う。
・main.cを開いて、下記をwhile(1)ループに追加する。

HAL_UART_Transmit(&huart2, (uint8_t *)"Hello, world!\r\n", 15U, 100U);

・RUNをクリックする。
・ターミナルでsudo gtkterm(以下を参照)。

シリアルモニタ

今回は、Ubuntuターミナルのgtktermを使いたい。

$ls -lrt /dev/serial/by-id/
$sudo apt-get install gtkterm
$sudo gtkterm

gtktermを立ち上げて、PortとBaudrateの設定を行って、”Hello, world!”の繰り返すことを確認する。

結果確認

STM32F411シリアル出力確認
STM32F411シリアル出力確認

感想

Arduino IDEやPlatform.io等のIDEよりペリフェラルの可視化においては、STM32CubeIDEのほうが優れていると感じたので回路設計や、ファームウェア開発のスピードアップに活用していきたい。

STM32CubeIDEでUSART設定
STM32CubeIDEでUSART設定

関連記事

Arduino IDEでSTM32F411 Black Pillへスケッチを書き込む

0

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

SAMD21-ATmega328 SPI対向試験

概要

I2C(SCL+SDA)の信号線が1本(SDA)に対して、SPI(SCLK+MISO+MOSI+CS/SS)の信号線が2本(MISO+MOSI)あり、結線がやや複雑で、SAMD21、ATmega328のSPIの挙動が明らかに違う。しかしSPIの通信スループットはI2Cの数倍以上あるため、面倒でもやる価値がある。以下の対向試験でSPIでデータの送受が確認しよう。

Master=SAMD21

/**********************************************
  SAMD21 as SPI Master
**********************************************/
#include <SPI.h>
 
void setup() {
  Serial.begin(9600);
  Serial.println("---------SAMD21G18A as SPI Master--------");
  SPI.begin();
  digitalWrite(SS, HIGH);
}
 
void loop() {
  SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));//SPIトランザクション開始
  digitalPinToPort(SS)->OUTCLR.reg = digitalPinToBitMask(SS);//SS->LOW
  byte rx = SPI.transfer(0x11);//転送
  digitalPinToPort(SS)->OUTSET.reg = digitalPinToBitMask(SS);//SS->HIGH
  SPI.endTransaction();//SPIトランザクション終了

  Serial.print("tx = ");
  Serial.print("17");
  Serial.print(" / rx = ");
  Serial.println(rx);
   
  SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
  digitalPinToPort(SS)->OUTCLR.reg = digitalPinToBitMask(SS);
  rx = SPI.transfer(0x21);
  digitalPinToPort(SS)->OUTSET.reg = digitalPinToBitMask(SS);
  SPI.endTransaction();
  
  Serial.print("tx = ");
  Serial.print("33");
  Serial.print(" / rx = ");
  Serial.println(rx);
   
  delay(2000);
}

Slave=ATmega328

/**********************************************
  Arduino UNO as SPI Slave
**********************************************/
#include "SPI.h";

void setup() {
  Serial.begin(9600);
  Serial.println("----Arduino UNO as SPI Slave-----");
  SPI.setBitOrder(MSBFIRST);//最高位を先に
  pinMode(MISO, OUTPUT);//出力ピン設定
  SPCR |= _BV(SPE);//SPI Control Register
  SPI.attachInterrupt(); //割り込みを可能に
}
//割り込みハンドラー
ISR(SPI_STC_vect) {
  byte rx = SPDR;
  Serial.print("ISR! ");
  Serial.println(rx);
  SPDR = rx;//受信データをそのまま返す
}
void loop() {//空転
}

結果

Master側

tx = 33 / rx = 17
tx = 17 / rx = 33
tx = 33 / rx = 17
tx = 17 / rx = 33
tx = 33 / rx = 17
tx = 17 / rx = 33
tx = 33 / rx = 17
tx = 17 / rx = 33
tx = 33 / rx = 17
tx = 17 / rx = 33
tx = 33 / rx = 17
tx = 17 / rx = 33
tx = 33 / rx = 17
tx = 17 / rx = 33
tx = 33 / rx = 17

Slave側

ISR! 17
ISR! 33
ISR! 17
ISR! 33
ISR! 17
ISR! 33
ISR! 17
ISR! 33
ISR! 17
ISR! 33
ISR! 17
ISR! 33
ISR! 17

※ Master側の受信はずれている。最初からずれているのであとはずっとずれてしまった。

0

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

Arduino IDEでSTM32F411 Black Pillへスケッチを書き込む

はじめに

STM32F411CEU6実装のWeact Black Pillボードが簡易にArduino IDEでUSB Type-C or シリアル(USB→TTL 4ピン)経由、スケッチが書き込めるかを実験してみよう。当然、FlashLoader、keilなどでJTAG、SWD経由でもFlash書き込み可能とされる。因みに、出荷時の初期状態ではWeAct HID bootloaderが書き込み済みなので、電源を入れたら、C13 LEDが点滅状態に入るのを確認する。また、STM32CubeProgrammer 2.6.0STM32duino Bootloaderや、WeAct HID bootloaderを書き込んで出荷時の初期状態に設定できる。Bootloaderの書き込み先頭アドレスは0x8000000となる。

ボード情報

USB speed : Full Speed (12MBit/s)
Manuf. ID : STMicroelectronics
Product ID : STM32 BOOTLOADER
SN : 3197347F3030
FW version : 0x011a
Device ID : 0x0431
Device name : STM32F411xC/E
Flash size : 512 KBytes (default)
Device type : MCU
Device CPU : Cortex-M4

MCU情報

STM32F411CE、周波数100Mhz、RAM 128KB、ROM 512KB

手順

Flash書き込みソフトのSTM32CubeProgrammer 2.6.0をダウンロードして、Windows 64bit版の場合、exeファイルから、Ububtuの場合、linuxファイルからインストールする。上記STM32CubeProgを使ってUSB書き込みの場合、プログラムモードにあるUSBポートが認識できない。後述Arduino IDEで書き込みの場合でもUSBポートが認識できない。また、Windows10、ubuntu 18.04環境とも同現象が出る。
※追記、上記USBポート認識できない現象、dfu-utilをインストールすることで解消する。

$sudo apt-get update
$sudo apt-get install dfu-util
$dfu-util -l

STM32duinoの追加

Arduino IDEでファイル→環境設定→下記リンクを追加して、ツール→ボード→ボードマネージャ→STM32を検索してインストールする。

https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json

ボード情報などの設定

シリアルの場合

stm32f411_arduino_ide_serial_setting
stm32f411_arduino_ide_serial_setting

USBの場合

stm32f411_arduino_ide_usb_setting
stm32f411_arduino_ide_usb_setting

PC接続

ボードをUSB Type-C or シリアルケーブルでPCに接続する。

モードの切り替え

プログラムモードへ切り替えるため、BOOT0を押下と同時にNRSTを押下→NRSTを離す→0.5秒後BOOT0を離す→初期状態のLED点滅が消える。

スケッチの書き込み

ファイル→スケッチ例→01Basics→Blink、書き込みボタンをクリックする。ときに書き込み失敗が起きても、再びモードを切り替て試したらほとんどの場合、2回連続の書き込みで済むようになる。

stm32f411_arduino_ide_usb_ok
stm32f411_arduino_ide_usb_ok

動作確認

下図のようにUSB接続、USB書き込みの場合、うまくいくと再び初期状態と違うパタンの青色LED点滅が確認できる。

STM32F411SEU6_Black_Pill動作確認
STM32F411SEU6_Black_Pill動作確認

参考資料

WeActTC/MiniF4-STM32F4x1

関連記事

STM32CubeIDEでSTM32F411設定

0

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

KiCADの自動配線ツールの入手

概略

KiCAD自動配線に必要なツールはFreeroutingとJava SDKの2種類あります。以前利用したリンクは何故か切れてダウンロード不能となって、2020年9月時点において下記のリンクからダウンロードできた。また、必要に応じてインストールしておく。

リンク

・Freerouting releases
・Java SE Development Kit 15

以前、PHPの開発でNetBeans(IDE環境)に馴染み深いので、今回NetBeansとJDK 8を以下のリンクより同時にダウンロードしてそして一発でインストールすることもできて便利に感じる。
・Freerouting releases
・JDK 8u111 with NetBeans 8.2

なお、Freeroutingに関するトラブルが起きた場合、Freerouting issuesを参照する。

Windows10およびUbuntu18.04でKiCADをインストールして快適に利用して、2層基板の設計に充分に役立つ。

以上、ご参考まで。

2+

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

トランジスタ/FET接続

トランジスタ/FET増幅

能動素子のトランジスタ/FETをエミッタ/ソース接地回路、エミッタフロワー(コレクタ/ドレーン接地)回路、ベース/ゲート接地回路という基本増幅回路に組むことで電圧増幅または電流増幅、信号加工、数学演算の目的を達する。接地回路の特徴は以下に示す。一言で其々の特徴をいうと、エミッタ/ソース接地が電圧増幅、コレクタ/ドレーン接地は電流増幅、ベース/ゲート接地は高周波に向いている。また互いの良いのを生かすような、能動素子または接地回路の複用また併用することにより更に都合よく増幅可能となる。

増幅回路/特徴電圧増幅度電流増幅度入力抵抗出力抵抗
エミッタ接地 
コレクタ接地 低、約1倍
ベース接地低、約1倍
ソース接地
ドレーン接地 低、約1倍
ゲート接地低、約1倍

同種能動素子の複用

同種とはnpn同士またはpnp同士を指す。ダーリントン接続、カスコード接続(縦積み)、パラレル接続、差動増幅接続、カレントミラー、デュアルトランジスタ等。

異種能動素子の併用

異種とはnpnとpnpの混在を指す。プッシュプル接続、インバーテッドダーリントン接続、多段接続(例、電圧増幅のエミッタ接地回路+電流増幅エミッタフロワー回路)、オペアンプ等。

負帰還、正帰還回路

出力を反転させて入力に帰還する負帰還は周波数特性、歪み、雑音特性、安定性が改善される。出力を反転せずにぞのまま帰還させる正帰還は信号の増幅に伴い雑音もが増幅され、不安定な出力信号をなってしまう。負帰還回路であっても信号の周波数が高くなるにつれて位相が変化し、正帰還になってしまう。正帰還になっても不安定にならないようにコンデンサ等を使って回路の安定性を確保する。

入力、出力インピーダンス

入力抵抗は回路を入力側から見たときのインピーダンスに対して、出力抵抗は出力側から見たときのインピーダンスである。一般的には回路設計の目標として、入力抵抗は大きく即ち電圧を大きく入力して、出力抵抗が小さい即ち電圧を大きく出力可能な回路が好ましい。バッファ回路を組み合わせた多段回路は、出力抵抗を下げることができる。

抵抗、コンデンサ、コイルの併用

分圧の抵抗、結合(カップリング)=ハイパス(パスコン)で直流阻止、交流通過、デカップリング=ハイパス(パスコン)で電源の交流的な抵抗を下げて、安定させるコンデンサ、ハイパスフィルタ(微分回路)、ローパスフィルタ(積分回路)、高域増強、高周波広帯域増強するRC回路、同調増幅するLC回路等と併用する。

参考書籍

定本 トランジスタ回路の設計、鈴木雅臣氏、CQ出版社

1+

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア