シリアル通信 その4

今回は(今回も?)簡単に。 今後のために、文字列と、16ビット値を表示する関数を追加しました。 void USART_prints(unsigned char *s) { while (*s !='\0') USART_putc(*(s++)); } void USART_print16(uint16_t n) { int zf; uint16_t c; uint16_t dv; zf …

シリアル通信その3

シリアル通信の送信割り込みを使ってみます。 USART_IT_TXE割り込みを使えば簡単か、と思ったら、送信レジスタが空のあいだ、 ずっと割り込みが発生し続けることが分かりました。やむを得ず、送信するときだけ 割り込みを有効にしました。 とりあえずリング…

シリアル通信その2

今度は送受信を試してみます。受信した文字の文字コードを+1して送信しています。 前回のコードは、マイコン側のRXピンの設定を間違っていました。 受信なので入力ポートにするのかと思っていましたが、Mode_AFにしないと動きませんでした。 プログラム自体…

シリアル通信

シリアル通信を試してみます。今回は、ポーリングで送信するだけです。 GPIOAのポート9、10に、シリアル-USB変換ケーブルを接続します。3.3Vであることに注意です。 プログラムは、送信バッファが空になるのを待て、送信データをレジスタに書き込んでいます…

PWM出力

TIM1がLEDにつながっているので、TIM1のPWMでLEDの明るさを変えてみます。 すべてのLEDを点灯させているので妙に長いリストですが、やっていることは単純です。 GPIOでは、GPIO_Mode_AFを指定してAlternateFunctionを選びます。 GPIO_PinAFConfigで、Alterna…

タイマTIM1

タイマTIM1を使おうとして、つまづいてしまったので、地道に使い方を学習します。 まずは、TIM3のときと同様に、割り込みでLEDを点滅させます。 TIM3のプログラムをTIM1に書き換えるだけかと思ったら、それでは動きませんでした。 まずTIM1はAPB2につながっ…

タイマ・コンペアモード

タイマをコンペアモードで使ってみます。 タイマ値がOC1に設定した値と一致したときと、規定値になったときに割り込みを発生させます。 int main(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; NVIC_Init…

タイマその2

今度はTIM3を使います。TIM3は16ビットタイマなのでプリスケーラを併用します。 タイマの値とプリスケーラの値の設定以外は前回と同じです。 TIM2とTIM3でそれぞれLEDを点滅させています。 int main(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;…

タイマ

こんどは汎用のタイマを使ってみます。32ビットカウンタのTIM2を使います。 まずは、カウントアップしていって、設定値になったら割り込みを発生させます。 int main(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStr…

SysTickその2

今後のために、時間待ちをするdelay関数を作っておきます。 といっても、たいしたことはしてないんですけど。 #include "delay.h" static volatile unsigned int delayCount = 0; void decrementDelay(void) { if (delayCount > 0) --delayCount; } void del…

SysTick

SysTickタイマを使ってみます。 1秒ごとにLEDを点滅させます。1秒を作り出すためにSysTickタイマを使います。 最初、SysTick_Config(SystemCoreClock)のように設定しようとすると、エラーになってしまいました。 マイコンは72MHzで動いているので、SystemCor…

チャタリング

STM32F3とは直接関係しないのですが・・・ サンプルプログラムを見ていると、スイッチのチャタリング対策が行われていました。 ただし、割り込みハンドラ内でループを回っていて、私の好みに合わないので、次のようにしてみました。 LEDをトグルしたあとルー…

EXTIその2

今回もライブラリを使わず、ペリフェラルドライバに書き換えてみました。 GPIOのスイッチに対応するピンの設定を行い、 SYSCFGでGPIOとEXTIを接続し、 EXTIで割り込み要求を出すように設定し、 NVICで割り込みを受け付けるように設定しています。 そうそう、…

EXTI

外部からの割り込みを試してみます。 ボタンを押すと割り込みが発生するようにします。 main.cはこんなかんじ。ライブラリを使うと、引数にBUTTON_MODE_EXTIを指定するだけです。 int main(void) { STM_EVAL_LEDInit(LED3); STM_EVAL_LEDOn(LED3); STM_EVAL_…

GPIOスイッチ入力 その2

同様にペリフェラルドライバで書き直してみました。 データレジスタが入力用と出力用の2つあるんですね。 int main(void) { GPIO_InitTypeDef GPIO_InitStructure; STM_EVAL_LEDInit(LED3); /* Enable the BUTTON Clock */ RCC_AHBPeriphClockCmd(RCC_AHBPer…

GPIOスイッチ入力

今度はスイッチ入力を試してみます。 スイッチを押すとLEDが光ります。 int main(void) { STM_EVAL_LEDInit(LED3); STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_GPIO); while (1) { if (STM_EVAL_PBGetState(BUTTON_USER) != 0) { STM_EVAL_LEDOn(LED3); } el…

GPIOその2

前回のプログラムを、STのペリフェラルドライバだけで書き直してみました。 といっても、ライブラリの内容をそのままもらってきただけ。 点滅周期を長くしています。 int main(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable the GPIO_LED Clock *…

GPIOその1

とりあえず、LEDを点滅させてみました。 8個あるLEDのうち、一番上の赤色が点滅します。 ライブラリを使ったお手軽プログラムです。 int main(void) { STM_EVAL_LEDInit(LED3); STM_EVAL_LEDOn(LED3); while (1) { Delay(2000000); STM_EVAL_LEDToggle(LED3)…

ロジアナ

あると便利なのでロジアナを買ってきました。 とりあえず使ってみたら、こんな感じ。

ドライバとライブラリとサンプルプログラムの準備

STのサイトから、ST-Link/V2のドライバと、ライブラリとサンプルプログラムがまとまった物をダウンロードしてインストール。で、STM32F3-Discoveryをつないでみると、なんかエラーになって認識されません。 ごにょごにょやってみても解決しないので、デバイ…

STM32F3-Discoveryはじめました

STマイクロのマイコン評価ボード STM32F3-Discovery で遊んでみます。秋月で950円で売っていました。 ST-Linkとターゲット部が1枚の基板に乗っています。ターゲットマイコンはSTM32F303VCT6で、Cortex-M4Fコア、メモリはフラッシュ256KBとRAM 48KB、ペリフェ…