前言
- (STM32H723xE/G) 所有定時(shí)器包括兩個(gè)高級(jí)控制定時(shí)器、十二個(gè)通用定時(shí)器、兩個(gè)基本定時(shí)器、五個(gè)低功耗定時(shí)器、兩個(gè)看門狗定時(shí)器和一個(gè)SysTick定時(shí)器 。所有計(jì)時(shí)器計(jì)數(shù)器都可以在Debug模式下凍結(jié)。本次實(shí)驗(yàn)主頻配置的是500MHz
一、分類
1.高級(jí)定時(shí)器(TIM1,TIM8)
高級(jí)控制定時(shí)器(TIM1,TIM8)可以看作是在6通道上復(fù)用的三相PWM發(fā)生器。它們具有互補(bǔ)的PWM輸出,可編程插入死區(qū)時(shí)間。它們也可以被認(rèn)為是完全通用的計(jì)時(shí)器。它們的4個(gè)獨(dú)立通道可用于:
- 輸入捕獲
- 輸出比較
- PWM產(chǎn)生(邊緣或中心對(duì)齊模式)
- 單脈沖模式輸出
如果配置為標(biāo)準(zhǔn)的16位計(jì)時(shí)器,它們具有與通用TIMx計(jì)時(shí)器相同的功能。如果配置為16位PWM發(fā)生器,它們具有完全調(diào)制能力(0-100%)。高級(jí)控制計(jì)時(shí)器可以與TIMx計(jì)時(shí)器一起工作,通過定時(shí)器鏈接功能進(jìn)行同步或事件鏈接。TIM1和TIM8支持獨(dú)立的DMA請(qǐng)求生成。
2.通用定時(shí)器(TIMx)
通用定時(shí)器(TIMx)在STM32H723xE/G器件中嵌入了10個(gè)可同步的通用定時(shí)器。
-
TIM2,TIM3,TIM4,TIM5,TIM23,TIM24
該器件包括4個(gè)全功能的通用定時(shí)器:TIM2,TIM3,TIM4,TIM5,TIM23 和 TIM24。TIM2,TIM5,TIM23 和 TIM24基于一個(gè)32位自動(dòng)加載上/下計(jì)數(shù)器和一個(gè)16位預(yù)分級(jí)器,而TIM3和TIM4基于一個(gè)16位自動(dòng)加載上/下計(jì)數(shù)器和一個(gè)16位預(yù)分級(jí)器。所有定時(shí)器都具有4個(gè)獨(dú)立的輸入捕獲/輸出比較通道,PWM或單脈沖模式輸出。這在最大的包上提供了24個(gè)輸入捕獲/輸出比較/PWM。TIM2,TIM3,TIM4,TIM5,TIM23 和 TIM24 通用定時(shí)器可以一起工作,或與其他通用定時(shí)器和高級(jí)控制定時(shí)器 TIM1 和 TIM8 通過定時(shí)器鏈接功能進(jìn)行同步或事件鏈接。這些通用定時(shí)器中的任何一個(gè)都可以用來產(chǎn)生PWM輸出。TIM2、TIM3、TIM4、TIM5、TIM23 和 TIM24都有獨(dú)立的DMA請(qǐng)求生成功能。它們能夠處理正交(增量)編碼器信號(hào)和1到4個(gè)霍爾效應(yīng)傳感器的數(shù)字輸出。 -
TIM12,TIM13,TIM14,TIM15,TIM16,TIM17
這些計(jì)時(shí)器是基于一個(gè)16位自動(dòng)重載上計(jì)數(shù)器和一個(gè)16位預(yù)縮放器。TIM13,TIM14,TIM16 和 TIM17有一個(gè)獨(dú)立的通道,而 TIM12 和 TIM15 有兩個(gè)獨(dú)立的通道用于輸入捕獲/輸出比較,PWM或單脈沖模式輸出。它們可以與TIM2,TIM3,TIM4,TIM5,TIM23 和 TIM24 全功能通用定時(shí)器同步,或用作簡(jiǎn)單的時(shí)基。
3.基本定時(shí)器(TIM6,TIM7)
基本定時(shí)器 TIM6 和 TIM7 這些定時(shí)器主要用于DAC觸發(fā)和波形生成。它們也可以用作通用的16位時(shí)基。TIM6 和 TIM7 支持獨(dú)立的 DMA 請(qǐng)求生成。
二、定時(shí)器比較
三、級(jí)聯(lián)關(guān)系
- 此處只介紹個(gè)別定時(shí)器級(jí)聯(lián)關(guān)系
四、定時(shí)器主從模式(STM32CubeMX)配置
1、主定時(shí)器配置(TIM1)
2、從模式配置(TIM2 其他的從定時(shí)器配置一致)
文章來源:http://www.zghlxwxcb.cn/news/detail-630889.html
五、代碼
1、用戶代碼
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
// 需要注意 STM32CubeMX 生成代碼后會(huì)將 TIM1 的初始化放在后面,在同步啟動(dòng)的情況下,需要將主定時(shí)器放在前面
MX_TIM1_Init();
MX_TIM2_Init();
MX_TIM5_Init();
MX_TIM23_Init();
MX_TIM24_Init();
/* USER CODE BEGIN 2 */
// 此 HAL 庫函數(shù)接口每次只會(huì)初始化其中一個(gè)定時(shí)器的一個(gè)通道,并開啟 PWM,但判斷不了是否是由 TIM1來控制同步開啟的
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim23, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim24, TIM_CHANNEL_1);
// 開啟 TIM1
__HAL_TIM_MOE_ENABLE(&htim1);
__HAL_TIM_ENABLE(&htim1);
/* USER CODE END 2 */
/* Infinite loop */
2、修改 HAL 庫函數(shù)代碼
- 屏蔽啟動(dòng)功能
HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
{
uint32_t tmpsmcr;
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
/* Check the TIM channel state */
if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY)
{
return HAL_ERROR;
}
/* Set the TIM channel state */
TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);
/* Enable the Capture compare channel */
TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);
//if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
//{
// /* Enable the main output */
// __HAL_TIM_MOE_ENABLE(htim);
//}
///* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
//if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
//{
// tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
// if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
// {
// __HAL_TIM_ENABLE(htim);
// }
//}
//else
//{
// __HAL_TIM_ENABLE(htim);
//}
/* Return function status */
return HAL_OK;
}
3、用示波器查看波形
- 從波形可以看出同步啟動(dòng)時(shí)的延遲不超過3ns
文章來源地址http://www.zghlxwxcb.cn/news/detail-630889.html
到了這里,關(guān)于【STM32H7 開發(fā)筆記】| 02 - 通過定時(shí)器級(jí)聯(lián)方式同步啟動(dòng)多個(gè)定時(shí)器并輸出 PWM 波形的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!