質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

Q&A

2回答

2604閲覧

NUCLEO-F446REのTIMレジスタを操作してPWM出力を作り、ボード上のLEDの明るさを調整したい。

HB_Kevin

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

0グッド

0クリップ

投稿2021/04/30 07:49

編集2022/01/12 10:55

私は今NUCLEO-F446REのTIMレジスタを操作してPWM出力を作り、ボード上のLED(PA-5)の明るさを調整するコードを書いています。リファレンスを見ながら以下のように出力ピンとタイマの設定をしました。出力比較モードにてCCR1レジスタとCNTレジスタの値を比較してPWM信号を作成するまでは分かるのですが、その作られた信号がどのピンから出力されるのかが分かりません。どのようにレジスタを設定すれば、PA-5ピンへPWM信号が出力されるのでしょうか。
タイマはTIM2を用いています。CNTは1秒周期でARRに到達して0に戻るように設定しました。
また、CCR1レジスタの値はARRの50%としています。

C

1#include "stm32f4xx.h" 2 3int main(void){ 4 RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // PA-5ピンへのクロック供給の有効化 5 RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; //TIM2へのクロック供給の有効化 6 7 /*GPIOピン(PA-5)の設定*/ 8 GPIOA->MODER &= (~GPIO_MODER_MODER5); 9 GPIOA->MODER |= (GPIO_MODE_OUTPUT_PP << GPIO_MODER_MODER5_Pos); 10 11 /*Timerの設定*/ 12 //TIM2のclockは16MHz...16000000回のクロックで1秒 13 TIM2->CR1 |= TIM_CR1_CEN;//CounterをENableにする 14 TIM2->DIER |= TIM_DIER_CC1IE;//Capture/Compare1InturruptをEnableにする 15 TIM2->ARR = 1599;//AutoReloadRegisterに1599を設定(0~1599=1600カウント) 16 TIM2->PSC = 9999;//PreSCalerに10000を設定(0~9999=10000クロックで1カウント) 17 TIM2->CCR1 = 799;//Capture/CounterRegister1に799を設定(0~799=800カウント)ARRの50% 18 19 /*main program*/ 20 while(1){ 21 22 } 23 return 0; 24}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2021/04/30 08:19

CubeMXとかでちゃっちゃかやっちゃわないのは課題かなにかなのですか?
HB_Kevin

2021/04/30 09:03

課題ではないですが、個人的にレジスタに興味があってあえて挑戦しています。
guest

回答2

0

「興味があって挑戦」なら...
CubeMXでPA5をGPIOとPWM出力と切り替えてみて生成したコードの差分を探るとか、質問する前に自力でできることがまだあるような気がするのですけれどどうでしょう。
私自身は面倒なんでこのへんCubeMXに任せちゃうのであまり強くも言えませんけどね。

C

1int main(void){ 2 RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // PA-5ピンへのクロック供給の有効化 3 RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; //TIM2へのクロック供給の有効化 4 5 /*GPIOピン(PA-5)の設定*/ 6 GPIOA->MODER &= (~GPIO_MODER_MODER5); 7 GPIOA->MODER |= (MODE_AF << GPIO_MODER_MODER5_Pos);//Changed 8 GPIOA->AFR[0] |= 1<<GPIO_AFRL_AFSEL5_Pos;//Changed 9 10 /*Timerの設定*/ 11 //TIM2のclockは16MHz...16000000回のクロックで1秒 12 TIM2->CR1 |= TIM_CR1_CEN;//CounterをENableにする 13 TIM2->DIER |= TIM_DIER_CC1IE;//Capture/Compare1InturruptをEnableにする 14 TIM2->ARR = 1599;//AutoReloadRegisterに1599を設定(0~1599=1600カウント) 15 TIM2->PSC = 9999;//PreSCalerに10000を設定(0~9999=10000クロックで1カウント) 16 TIM2->CCR1 = 799;//Capture/CounterRegister1に799を設定(0~799=800カウント)ARRの50% 17 TIM2->CCMR1=6<<TIM_CCMR1_OC1M_Pos;//Changed 18 TIM2->CCER=TIM_CCER_CC1E;//Changed 19 20 /*main program*/ 21 while(1){ 22 } 23 return 0; 24}

投稿2021/04/30 14:06

thkana

総合スコア7610

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HB_Kevin

2021/04/30 15:13

なるほど、そういうやり方もあるのですね…勉強になります。ありがとうございます。
guest

0

STM32 はちょっと詳しくないんですが、タイマーというのは直接信号を作るのではなく、割り込みを発生させて設定したハンドラを実行してもらうためにあります。実際の使い方はこちらが参考になるかもしれません。
STM32いじってみた(6) タイマー割り込み編
これを参考に割り込みのたびに PA-5 の出力を切り替えれば PWM が行えると思います(かなり霊感に頼った回答なので多分です)。

投稿2021/04/30 08:19

A_kirisaki

総合スコア2853

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2021/04/30 14:09

タイマーカウンタと比較レジスタの比較結果を直接ピンに出力できることになっているので、質問者さんはそういう話をしたいのだと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問