中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

分類網(wǎng)站建設(shè)國(guó)內(nèi)網(wǎng)站建設(shè)公司

分類網(wǎng)站建設(shè),國(guó)內(nèi)網(wǎng)站建設(shè)公司,南寧網(wǎng)頁制作招聘網(wǎng),沈陽定制網(wǎng)站開發(fā)公司前言 STM32F103系列的MCU,相比普通的51單片機(jī),在輸出硬件PWM這個(gè)功能上要強(qiáng)不少,兩者實(shí)現(xiàn)的方式都類似,都是通過一個(gè)定時(shí)器來啟用硬件PWM輸出,不過在輸出PWM通道的數(shù)量上,32F103要強(qiáng)上不少。僅通過一個(gè)高級(jí)…

前言

STM32F103系列的MCU,相比普通的51單片機(jī),在輸出硬件PWM這個(gè)功能上要強(qiáng)不少,兩者實(shí)現(xiàn)的方式都類似,都是通過一個(gè)定時(shí)器來啟用硬件PWM輸出,不過在輸出PWM通道的數(shù)量上,32F103要強(qiáng)上不少。僅通過一個(gè)高級(jí)定時(shí)器1,即TIM1就可以輸出4路頻率相同,占空比獨(dú)立的PWM信號(hào),這四路PWM還分別有互補(bǔ)通道,且?guī)绤^(qū)和剎車功能。

利用TIM1來產(chǎn)生4路頻率相同,占空比不同的PWM信號(hào)

初始化的方法其實(shí)跟前面幾篇文章初始化其他外設(shè)的步驟類似,也是先定義一個(gè)結(jié)構(gòu)體變量,然后給這個(gè)結(jié)構(gòu)體變量的成員配置好相應(yīng)的初值,最后調(diào)用初始化函數(shù),這樣就完成外設(shè)初始化了。再通過調(diào)用開外設(shè)的函數(shù),就可以把外設(shè)功能使能。

首先定義一個(gè)結(jié)構(gòu)體變量來初始化TIM1(定義PWM信號(hào)的頻率)

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;        //配置時(shí)基結(jié)構(gòu)體,聲明一個(gè)結(jié)構(gòu)體變量方便傳參//=====================時(shí)基初始化======================//
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);   //開TIMER1外設(shè)時(shí)鐘TIM_TimeBaseStructure.TIM_Prescaler = 72-1;
// 計(jì)數(shù)器計(jì)數(shù)模式
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 10000-1;// 時(shí)鐘分頻因子 - 一分頻,配置死區(qū)時(shí)間需要用到
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV4;// 重復(fù)寄存器的值,沒有用到,不管
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);

我使用的是倍頻到72M的時(shí)鐘信號(hào)作為APB2的時(shí)鐘總線,然后我分頻器選擇的是72分頻,那么分頻之后的周期就是1/1M,即TIM1往上計(jì)數(shù)一次是1us,然后計(jì)數(shù)周期我設(shè)置為了從0計(jì)數(shù)到9999,即10000次,耗時(shí)就是10ms。所以我設(shè)置的PWM頻率就是100Hz的。

下一步開始設(shè)置PWM的結(jié)構(gòu)體,在手冊(cè)中,硬件PWM這部分內(nèi)容是屬于 高級(jí)定時(shí)器中的:輸出/比較模式 ,所以要配置PWM,我們就要配置 輸出/比較結(jié)構(gòu)體。

TIM_OCInitTypeDef TIM_OCInitStructure;                //配置輸出比較結(jié)構(gòu)體,聲明一個(gè)結(jié)構(gòu)體變量方便傳參TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;   //PWM模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;       //TIM1通道1輸出使能
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;    //互補(bǔ)通道使能
TIM_OCInitStructure.TIM_Pulse = 4000;               //占空比
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;           //高電平有效
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;          //互補(bǔ)通道也是高電平有效
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;        //空閑狀態(tài) 低電平
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;      //互補(bǔ)通道空閑狀態(tài) 低電平
TIM_OC1Init(TIM1,&TIM_OCInitStructure);                             //初始化TIM1通道1輸出PWMTIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;   //PWM模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;       //TIM1通道2輸出使能
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;    //互補(bǔ)通道失能
TIM_OCInitStructure.TIM_Pulse = 6000;               //占空比
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;           //高電平有效
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;          //互補(bǔ)通道也是高電平有效
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;        //空閑狀態(tài) 低電平
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;      //互補(bǔ)通道空閑狀態(tài) 低電平
TIM_OC2Init(TIM1,&TIM_OCInitStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;   //PWM模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;       //TIM1通道3輸出使能
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;    //互補(bǔ)通道失能
TIM_OCInitStructure.TIM_Pulse = 8000;               //占空比
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;           //高電平有效
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;          //互補(bǔ)通道也是高電平有效
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;        //空閑狀態(tài) 低電平
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;      //互補(bǔ)通道空閑狀態(tài) 低電平
TIM_OC3Init(TIM1,&TIM_OCInitStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;   //PWM模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;       //TIM1通道4輸出使能
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;    //互補(bǔ)通道失能
TIM_OCInitStructure.TIM_Pulse = 9000;               //占空比
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;           //高電平有效
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;          //互補(bǔ)通道也是高電平有效
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;        //空閑狀態(tài) 低電平
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;      //互補(bǔ)通道空閑狀態(tài) 低電平
TIM_OC4Init(TIM1,&TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);                    //使能TIM1 輸出比較1的預(yù)裝載使能 想要改變占空比 得先輸出完當(dāng)前周期的波形之后 到下個(gè)波形才按照新的占空比(更新事件發(fā)生后才改變占空比)TIM_Cmd(TIM1,ENABLE);												//開啟TIM1
TIM_CtrlPWMOutputs(TIM1,ENABLE);									//開啟PWM輸出

其實(shí)看起來內(nèi)容多,實(shí)際上都是重復(fù)的內(nèi)容。高級(jí)定時(shí)器的每路PWM通道,都通過一個(gè)庫函數(shù)來初始化,比如通道1就是調(diào)用TIM_OC1Init(TIM1,&TIM_OCInitStructure); 前面這個(gè)形參是配置利用哪個(gè)定時(shí)器的通道1來產(chǎn)生PWM信號(hào),后面這個(gè)形參就是我們定義的結(jié)構(gòu)體變量的首地址,負(fù)責(zé)傳入我們配置的相應(yīng)參數(shù)。

除了高級(jí)定時(shí)器,通用定時(shí)器也可以產(chǎn)生PWM信號(hào),但是基本定時(shí)器是無法產(chǎn)生PWM信號(hào)的,基本定時(shí)器的功能只有下面這幾個(gè):
在這里插入圖片描述
回到正題,配置完時(shí)基和輸出/比較模式的PWM模式的寄存器之后,再把PWM四個(gè)通道的IO配置一下:

void AdvanceTim_GPIO_Config(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);//剎車通道GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStruct);GPIO_ResetBits(GPIOB,GPIO_Pin_12);      //默認(rèn)為低電平,這個(gè)腳一旦被拉高證明剎車有效,立刻停止輸出PWM//TIM1 CHANNEL1互補(bǔ)通道GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStruct);
}

這里暫時(shí)只需要關(guān)注PA8、PA9、PA10、PA11這四個(gè)IO的配置,其他的是后面做剎車和互補(bǔ)才需要用到的。
配置起來其實(shí)很簡(jiǎn)單,但是要注意GPIO模式要配置為復(fù)用的推挽輸出模式。

在設(shè)置完這些之后,就可以去主函數(shù)里面調(diào)用了。
給前面我們寫的初始化時(shí)基和PWM寄存器的代碼寫到同一個(gè)函數(shù)里:

void AdvanceTim_Mode_Config(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;        //配置時(shí)基結(jié)構(gòu)體,聲明一個(gè)結(jié)構(gòu)體變量方便傳參TIM_OCInitTypeDef TIM_OCInitStructure;                //配置輸出比較結(jié)構(gòu)體,聲明一個(gè)結(jié)構(gòu)體變量方便傳參//=====================時(shí)基初始化======================//RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);   //開TIMER1外設(shè)時(shí)鐘TIM_TimeBaseStructure.TIM_Prescaler = 72-1;// 計(jì)數(shù)器計(jì)數(shù)模式TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseStructure.TIM_Period = 10000-1;// 時(shí)鐘分頻因子 - 一分頻,配置死區(qū)時(shí)間需要用到TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV4;// 重復(fù)寄存器的值,沒有用到,不管TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);//====================================================//TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;   //PWM模式1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;       //TIM1通道1輸出使能TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;    //互補(bǔ)通道使能TIM_OCInitStructure.TIM_Pulse = 4000;               //占空比TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;           //高電平有效TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;          //互補(bǔ)通道也是高電平有效TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;        //空閑狀態(tài) 低電平TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;      //互補(bǔ)通道空閑狀態(tài) 低電平TIM_OC1Init(TIM1,&TIM_OCInitStructure);                             //初始化TIM1通道1輸出PWMTIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;   //PWM模式1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;       //TIM1通道2輸出使能TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;    //互補(bǔ)通道失能TIM_OCInitStructure.TIM_Pulse = 6000;               //占空比TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;           //高電平有效TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;          //互補(bǔ)通道也是高電平有效TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;        //空閑狀態(tài) 低電平TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;      //互補(bǔ)通道空閑狀態(tài) 低電平TIM_OC2Init(TIM1,&TIM_OCInitStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;   //PWM模式1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;       //TIM1通道3輸出使能TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;    //互補(bǔ)通道失能TIM_OCInitStructure.TIM_Pulse = 8000;               //占空比TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;           //高電平有效TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;          //互補(bǔ)通道也是高電平有效TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;        //空閑狀態(tài) 低電平TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;      //互補(bǔ)通道空閑狀態(tài) 低電平TIM_OC3Init(TIM1,&TIM_OCInitStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;   //PWM模式1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;       //TIM1通道4輸出使能TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;    //互補(bǔ)通道失能TIM_OCInitStructure.TIM_Pulse = 9000;               //占空比TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;           //高電平有效TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;          //互補(bǔ)通道也是高電平有效TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;        //空閑狀態(tài) 低電平TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;      //互補(bǔ)通道空閑狀態(tài) 低電平TIM_OC4Init(TIM1,&TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);                    //使能TIM1 輸出比較1的預(yù)裝載使能 想要改變占空比 得先輸出完當(dāng)前周期的波形之后 到下個(gè)波形才按照新的占空比(更新事件發(fā)生后才改變占空比)TIM_Cmd(TIM1,ENABLE);TIM_CtrlPWMOutputs(TIM1,ENABLE);}

在主函數(shù)中:

int main(void)
{GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);	  //禁用JTAGAdvanceTim_GPIO_Config();AdvanceTim_Mode_Config();while(1){}
}

下載到板子上,用邏輯分析儀抓取PA8/9/10/11這四個(gè)IO的波形,可以觀察到,四路PWM信號(hào)的頻率相同(因?yàn)槎际峭ㄟ^TIM1產(chǎn)生的),但是四路PWM信號(hào)的占空比分別為40%、60%、80%、90%。這就實(shí)現(xiàn)了硬件PWM的輸出。

輸出TIM1通道1的互補(bǔ)信號(hào)

其實(shí)這個(gè)不用單獨(dú)再拿出來講,在配置TIM1通道1的時(shí)候,有幾個(gè)結(jié)構(gòu)體成員的值修改一下,即可輸出通道1的互補(bǔ)信號(hào)。

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;   //PWM模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;       //TIM1通道1輸出使能
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;    //互補(bǔ)通道使能
TIM_OCInitStructure.TIM_Pulse = 4000;               //占空比
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;           //高電平有效
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;          //互補(bǔ)通道也是高電平有效
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;        //空閑狀態(tài) 低電平
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;      //互補(bǔ)通道空閑狀態(tài) 低電平
TIM_OC1Init(TIM1,&TIM_OCInitStructure);                             //初始化TIM1通道1輸出PWM

TIM_OutputNState 這個(gè)成員配置為TIM_OutputNState_Enable,那么互補(bǔ)通道就使能了;
TIM_OCNPolarity 這個(gè)成員是配置互補(bǔ)通道是什么電平有效;
TIM_OCNIdleState_Reset 這個(gè)成員是配置互補(bǔ)通道的空閑狀態(tài)應(yīng)該是什么電平。
一般如果要用到互補(bǔ)模式的話,互補(bǔ)通道的配置與通道1是相同的,如果需要產(chǎn)生錯(cuò)相的兩路PWM信號(hào),那么要用到中心對(duì)其模式才能做到,硬件PWM是不具備輸出錯(cuò)相PWM波的功能的。

配置了有關(guān)PWM的寄存器之后,配置一下互補(bǔ)通道的GPIO,也是配置為復(fù)用推挽輸出模式。不過要注意的是每路PWM信號(hào)的輸出腳和互補(bǔ)腳都有很多個(gè),我這邊因?yàn)镸CU腳位只有64個(gè),所以還不需要選擇在哪個(gè)IO輸出;推測(cè)應(yīng)該是如果把IO設(shè)置為了復(fù)用輸出模式,那么PWM就會(huì)從那個(gè)復(fù)用腳輸出出來,不需要再配置相應(yīng)的寄存器了。

剎車功能的使用

這個(gè)功能我僅限于能使用,一些較為深層次的原理和使用場(chǎng)景我就說不出來了。

在前面定義的AdvanceTim_Mode_Config(void)函數(shù)中,多聲明一個(gè)結(jié)構(gòu)體成員,并且調(diào)用初始化函數(shù)來初始化 剎車 和 死區(qū)寄存器。

TIM_BDTRInitTypeDef TIM_BDTRInitStructure;            //配置有關(guān)剎車和死區(qū)結(jié)構(gòu)體,聲明一個(gè)結(jié)構(gòu)體變量方便傳參// TIM_BDTRInitStructure這個(gè)結(jié)構(gòu)體配置的是 剎車和死區(qū)寄存器(TIMx_BDTR)
// 當(dāng) BKIN 引腳檢測(cè)到低電平的時(shí)候,輸出比較信號(hào)被禁止,就好像是剎車一樣
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;         // 運(yùn)行模式下的“關(guān)閉狀態(tài)”選擇 - 使能
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;         // 空閑模式下的"關(guān)閉狀態(tài)"選擇 - 使能
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;              // 鎖定等級(jí)1
TIM_BDTRInitStructure.TIM_DeadTime  = 0xFF;
TIM_BDTRInitStructure.TIM_Break     = TIM_Break_Enable;             // 剎車功能使能 - 開啟剎車輸入
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;   // 剎車信號(hào) - 高電平剎車
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; // 自動(dòng)輸出使能
TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);

TIM_OSSRState 和 TIM_OSSIState 這兩個(gè)成員配置的是 TIMx_BDTR寄存器里面的 OSSR位 和 OSSI位,其他的成員,互相之間是有關(guān)聯(lián)的,比如 TIM_LOCKLevel 鎖定等級(jí)如果配置的是 2 或者 3,那么 TIMx_BDTR這個(gè)寄存器在配置完之后,有一些成員是沒法再改變值的,這是ST對(duì)這個(gè)功能的一些保護(hù)機(jī)制。后面的幾個(gè)成員就比較好理解,注釋有寫,不再過多解釋。
關(guān)于TIM_DeadTime 這個(gè)成員,配置的是DTG[7:0]這七位數(shù)據(jù),這7位數(shù)據(jù)比較有意思,手冊(cè)是這樣寫的:
在這里插入圖片描述
5-7位填入不同的值,Tdtg的值不同,Tdts是我們?cè)谂渲脮r(shí)基那里配置的,我為了讓死區(qū)時(shí)間更加明顯,所以我配置的都比較久,Tdts我配置為了TIM1時(shí)鐘的四分頻,我的TIM1時(shí)鐘配置為了1M,那么Tdts就是250Khz 的頻率,Tdtg=16/250Khz,在乘以(32+(0-4位配置的數(shù)值))。

配置了BDTR寄存器之后,配置一下剎車通道的輸入,這里是我當(dāng)時(shí)比較疑惑的,我不太明白為什么剎車通道也是配置為復(fù)用推挽輸出模式。反正按照這樣設(shè)置完之后,把PB12這個(gè)IO一拉高,所有的硬件PWM信號(hào)全部停止輸出,會(huì)全部回到空閑狀態(tài)我配置的那個(gè)電平狀態(tài)。

//剎車通道GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStruct);GPIO_ResetBits(GPIOB,GPIO_Pin_12);      //默認(rèn)為低電平,這個(gè)腳一旦被拉高證明剎車有效,立刻停止輸出PWM

到這,TIM1的PWM輸出、互補(bǔ)輸出、死區(qū)、剎車,這幾個(gè)功能就全都實(shí)現(xiàn)了。

http://www.risenshineclean.com/news/60340.html

相關(guān)文章:

  • 孕婦做兼職上哪家網(wǎng)站深圳網(wǎng)絡(luò)推廣建站
  • 網(wǎng)站建設(shè) 核對(duì)流程網(wǎng)站seo優(yōu)化服務(wù)
  • 電商類網(wǎng)站開發(fā)百度指數(shù)怎么提升
  • 網(wǎng)站開發(fā)實(shí)戰(zhàn)教程保定seo推廣公司
  • 成人大專報(bào)考條件seo 重慶
  • wordpress大數(shù)據(jù)插件搜索引擎優(yōu)化代理
  • 大學(xué)培訓(xùn)中心網(wǎng)站建設(shè)系統(tǒng)清理優(yōu)化工具
  • 濟(jì)南行知網(wǎng)站建設(shè)全國(guó)唯一一個(gè)沒有疫情的城市
  • 數(shù)字中國(guó)建設(shè)峰會(huì) 官方網(wǎng)站seo引擎優(yōu)化方案
  • 網(wǎng)站設(shè)計(jì)開發(fā)中的具體步驟站長(zhǎng)之家域名信息查詢
  • 做mg動(dòng)畫賺錢網(wǎng)站小紅書seo
  • 網(wǎng)站上的圖片一般多大網(wǎng)站統(tǒng)計(jì)系統(tǒng)
  • 地方生活門戶網(wǎng)站名稱網(wǎng)站運(yùn)營(yíng)與維護(hù)
  • 淮北做網(wǎng)站公司百度經(jīng)驗(yàn)官網(wǎng)首頁
  • 注冊(cè)公司域名后如何做網(wǎng)站愛站網(wǎng)域名查詢
  • 軟件工程分為幾個(gè)階段網(wǎng)站seo入門基礎(chǔ)教程書籍
  • 做網(wǎng)站做地區(qū)好還是全國(guó)的好處谷歌seo搜索引擎
  • 可以看任何東西的瀏覽器seo是什么車
  • 淄博建設(shè)局網(wǎng)站網(wǎng)站推廣關(guān)鍵詞工具
  • 合肥專業(yè)手機(jī)網(wǎng)站制作價(jià)格網(wǎng)站流量統(tǒng)計(jì)分析
  • 開發(fā)網(wǎng)站網(wǎng)絡(luò)公司百度在西安有分公司嗎
  • 廉政網(wǎng)站建設(shè)經(jīng)驗(yàn)交流今日nba戰(zhàn)況
  • 織夢(mèng)怎么查看網(wǎng)站點(diǎn)擊夫唯seo
  • 網(wǎng)站的系統(tǒng)建設(shè)方式有哪些內(nèi)容個(gè)人網(wǎng)頁模板
  • 青島科技網(wǎng)站建設(shè)今日小說百度搜索風(fēng)云榜
  • 企業(yè)網(wǎng)站配色免費(fèi)發(fā)布廣告信息網(wǎng)
  • 建設(shè)門戶網(wǎng)站所需廣告門
  • 哪里網(wǎng)站海報(bào)做的比較好沈陽沈河seo網(wǎng)站排名優(yōu)化
  • 微網(wǎng)站免費(fèi)搭建平臺(tái)高端營(yíng)銷型網(wǎng)站建設(shè)
  • 響應(yīng)式網(wǎng)站特點(diǎn)百度廣告多少錢