目次

コミックマーケット95

出すぞ

抵抗つけろよとかそういう話,ARMの規格書とか参照 .

HALはタイマ使ってるので,RTOS使うなら別に一つ割当してやる話
LLAPIやっちゃう?

STM32 microcontroller debug toolboxより解説できそうな部分をいかに抜粋,この辺は書きたいなぁ

0割

一部のレジスタ設定してやればよい.
ハンドラに飛んでくれるようになる(はず)

Printfデバッグ

基本的にGCC(SW4STM32含む)ベース
基本的にint __io_putchar(int ch)を定義してやることで解決
syscall.cの有無,コンパイラにより追加で関数が必要になる.基本的に取り上げるのはGCCだけだけどね

#include "stdio.h"
int __io_putchar(int ch){
  HAL_UART_Transmit(&UartHandle, (uint8_t *)&ch, 1, 0xFFFF);
  return ch;
}

syscall.cを使用しない場合には以下も追加

int _write(int file, char *ptr, int len){
  int DataIdx;
  for (DataIdx = 0; DataIdx < len; DataIdx++){
    __io_putchar( *ptr++ );
  }
  return len;
}

UART

SWO/SWV

#include "stdio.h"
int __io_putchar(int ch){
  ITM_SendChar(ch);
  return(ch);
}

syscall.cを使用しない場合には以下も追加

int _write(int file, char *ptr, int len){
  int DataIdx;
  for (DataIdx = 0; DataIdx < len; DataIdx++){
    __io_putchar(*ptr++);
  }
  return len;
}

semihosting

EclipseのWEBヘルプを参照
各ソフトウェアのバージョンを確認する,いまのところ最新入れとけば問題ない

DebugからReleaseへ

以下の事項に注意しよう

stm32に限らないけど使ってみたtips,解説入れればまぁ許される?

5V↔3.3Vのレベル変換

抵抗2つとMOSFET1つでok
MOSFETにダイオードが入ってることがミソ
Vgs(th)が低電圧側の電源電圧より低いこと,Vdsが高電圧側の電源電圧より高いMOSFETを選んでやれば,任意のレベル変換ができる?
小信号用のFETを使えばいいと思うが,めちゃくちゃ高速な信号のレベル変換には適さないと思う,それが問題になるレベルであれば素直にバッファ回路を組んで上げるほうが確実