開発環境はWSL(Ubuntu24.04) VSCode+riscv-gnu-toolchain 環境構築
SRCフォルダは公式ファームウェア
STM32マイコンを触ったことのない、初学者のメモです。
PA0のLチカ
ボタンを押して電圧がかかると割り込み。
GPIO_InitTypeDef GPIO_InitStructure = {0};
EXTI_InitTypeDef EXTI_InitStructure = {0};
NVIC_InitTypeDef NVIC_InitStructure = {0};
の3つを初期化し、
GPIO_Init(GPIOA, &GPIO_InitStructure);
EXTI_Init(&EXTI_InitStructure);
NVIC_Init(&NVIC_InitStructure);
初期化後それぞれポインタをわたす。
void EXTI0_IRQHandler(void) __attribute__((interrupt("machine")));
void EXTI0_IRQHandler(void)
{
Delay_Ms(550);
printf("Run at EXTI\r\n");
EXTI_ClearFlag(EXTI_Line0);
}
↑関数を追記し、関数内に割り込み時の処理を書く。
void EXTI0_IRQHandler(void) attribute((interrupt("machine")));は、
デフォルトではinterrupt("WCH-Interrupt-fast")ですが、書き換える必要があるみたい。
参考
公式サンプルのADC/DMAは DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
になっているためリセット時に一度だけしか値を読み取ることができない?
DMA_Mode_Circularに変更で値を更新することができる。
main > whileの
uint8_t v1 = v / 10; 一桁目
uint8_t v2 = v % 10; 小数点一位
system_ch32v20x.cのL27のコメントを外し144Mhzに変更する。 タイマーを初期化し、割り込みを登録する。