記事ディレクトリ
51マイコンとのタイミング比較
51 マイクロコントローラーの遅延 (ソフトウェア タイミング):
//由stc软件生成的51延时代码
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
短所: 不正確、CPU リソースを占有する
stm32タイマーの動作原理:
正確なタイムベースを使用して、ハードウェアを通じてタイミング機能を実装します。タイマーの核となるのはカウンターです。
タイマーの分類:
- 基本タイマー(TIM6~TIM7)
- 汎用タイマ(TIM2~TIM5)
- アドバンストタイマー (TIM1 および TIM8)
STM32F103C8T6 タイマー リソース:
一般的なタイマーの紹介:
- 16 ビットのアップ、ダウン、アップ/ダウン オートロード カウンター (TIMx_CNT)。
- 16 ビットのプログラマブル (リアルタイムで変更可能) プリスケーラー (TIMx_PSC)。カウンター クロック周波数の分周係数は1 ~ 65535 の
任意の値です。- 4 つの独立したチャネル (TIMx_CH1 ~ 4)、これらのチャネルは次のように使用できます。
A. 入力キャプチャB
。出力比較
C.PWM生成(エッジまたはセンターアライメントモード)
D. シングルパルスモード出力- タイマーの同期回路とタイマー相互接続 (1 つのタイマーを使用して別のタイマーを制御できます) は、外部信号 (TIMx_ETR) を使用して制御できます
。- 割り込み/DMA は、次のイベントが発生したときに生成されます
。更新: カウンタのオーバーフロー/アンダーフロー、カウンタの初期化 (ソフトウェアまたは内部/外部トリガ経由)
B. トリガーイベント (内部/外部トリガーによるカウンターの開始、停止、初期化またはカウント)
C. 入力キャプチャ D
。出力比較
E. 位置決め用のインクリメンタル (直角位相) エンコーダおよびホール センサー回路をサポート
F. 外部クロックとしてのトリガー入力またはサイクルごとの電流管理
タイマーカウントモード:
タイマークロックソース:
タイマーオーバーフロー時間の計算式は次のとおりです。
(PSC は分周係数) (ARR はリロード値) (Tout は出力時間 (必須)) (Tclk はクロック周波数)
既知: Tclk = 72MHZ
たとえば、1000ms の時間を測定したい場合は、次のようになります。 PSC=7199、ARR=9999、Tclk=72M
################################################ #########################
PWMリソース
- アドバンストタイマー(TIM1):7チャンネル
- 汎用タイマ(TIM2~TIM4):各4チャンネル
PWM出力モード:
-
PWM モード 1: カウントアップ時、CNT < CCRx の場合、出力は有効レベル、それ以外の場合は無効レベル、カウントダウン時、
CNT > CCRx の場合、出力は無効レベル、それ以外の場合は有効レベルです。 -
PWM モード 2: カウントアップ時、CNT < CCRx になると出力は無効レベルになり、それ以外の場合は有効レベルになります。カウントダウンする場合、出力は CNT > CCRx になると有効レベルになり、それ以外の場合は無効レベルになります
。
PWM デューティ サイクル: TIMx_CCRx レジスタによって決定されます。
PWM構成(Cube Max)
//启动tim2
HAL_TIM_Base_Start_IT(&htim2);
//配置占空比
//参数:句柄,通道,值
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal);
PWM呼吸光実験
int main()
{
// 定义变量
uint16_t pwmVal=0; //调整PWM占空比
uint8_t flag=1; //设置改变方向。1:占空比越来越大;0:占空比越来越小
// 使能 Timer4 第3通道 PWM 输出
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
// while循环实现呼吸灯效果
while (1)
{
HAL_Delay(1);
if (flag)
pwmVal++;
else
pwmVal--;
if (pwmVal > 500)
flag = 0;
if (pwmVal == 0)
flag = 1;
//修改比较值,修改占空比
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal);
}
}
仕上げる
ご質問がございましたら、お気軽にご質問いただき、一緒に前進してください。