一、思路
通過 Tim 定時器可以設置多路 PWM 實現呼吸燈,所以我們使能一個 TIM3,因為 TIM3 的通道2(CH2)正好映射到 PB5(LED)
然后配置 PB5 為復用推挽輸出,50MHZ
pwm通過定時器 TIM3 的計數器 CNT 從 0 到 ARR(ARR可以設置為0-65535) 進行周期的自增或自減, CNT 每自增或自減一次與 CCR2 比較一次,CCR2的值由我們自己設置,一般通過 while 循環按照我們希望的時間 比如1s增加1
如果在PWM模式1下 CNT向上計數時 CNT < CCR2 則將 PB5設為高電平
如果在PWM模式2下 CNT向上計數時 CNT < CCR2 則將 PB5設為低電平
通過 占空比 = 高電平時間 / 總時間 的變化實現呼吸燈效果
二、pwm_init()代碼
void pwm_init() {
//1.配置AFIO 進行端口映射
//使能AFIO
RCC->APB2ENR |= 1 << 0;
//使能GPIOB RCC時鐘
RCC->APB2ENR |= 1 << 3;
//使能TIM3
RCC->APB1ENR |= 1 << 1;
//把TIM3部分映射到GPIOB5
AFIO->MAPR |= 1 << 11;
AFIO->MAPR &= ~(1 << 10);
//2.配置GPIOB5端口
//設置GPIOB5為 復用推挽輸出 即 [23:22] = CNF[1:0]
GPIOB->CRL |= 1 << 23;
GPIOB->CRL &= ~(1 << 22);
//設置GPIOB5為 輸出模式 速度50MHZ 即 [21:20] = MODE[1:1]
GPIOB->CRL |= 1 << 21;
GPIOB->CRL |= 1 << 20;
//LED-OFF
GPIOB->ODR |= 1 << 5;
//3.配置TIM3
//PSC為定時器的分頻器
TIM3->PSC = 0;
//ARR為定時器計數上限 設置自動重裝載值
TIM3->ARR = 5000;
//TIM3->CH2 設置PWM模式1
TIM3->CCMR1 |= 6 << 12;
//TIM3->CH2 預裝載使能
TIM3->CCMR1 |= 1 << 11;
//TIM3->CH2 輸出使能
TIM3->CCER |= 1 << 4;
//使能 ARPE ARR寄存器的值被裝入緩沖器。
TIM3->CR1 |= 1 << 7;
//使能計數器
TIM3->CR1 |= 1 << 0;
//通過while循環設置TIM3->CCR2的值
int nFlag = 1;
int nPwmValue = 0;
while (1) {
//通過for循環設置每次變化時間
for (volatile int i = 0; i < 100; i++) {}
//通過設置 nFlag 的設置自增或自減
if (nFlag) {
nPwmValue++;
} else {
nPwmValue--;
}
//設置周期最大值
if (nPwmValue >= 5000) {
nFlag = 0;
}
//設置周期最小值
if (nPwmValue <= 0) {
nFlag = 1;
}
//設置 CCR2 的值
TIM3->CCR2 = nPwmValue;
}
}
三、 分步講解
1.配置AFIO 進行端口映射 (部分芯片可能不支持 可采用跳線方式實現)
//使能AFIO
RCC->APB2ENR |= 1 << 0;
//使能GPIOB RCC時鐘
RCC->APB2ENR |= 1 << 3;
//使能TIM3
RCC->APB1ENR |= 1 << 1;
//把TIM3部分映射到GPIOB5
AFIO->MAPR |= 1 << 11;
AFIO->MAPR &= ~(1 << 10);
2.配置GPIOB5端口
//設置GPIOB5為 復用推挽輸出 即 [23:22] = CNF[1:0]
GPIOB->CRL |= 1 << 23;
GPIOB->CRL &= ~(1 << 22);
//設置GPIOB5為 輸出模式 速度50MHZ 即 [21:20] = MODE[1:1]
GPIOB->CRL |= 1 << 21;
GPIOB->CRL |= 1 << 20;
//LED-OFF
3.配置TIM3
//PSC為定時器的分頻器
TIM3->PSC = 0;
//ARR為定時器計數上限 設置自動重裝載值
TIM3->ARR = 5000;
//TIM3->CH2 設置PWM模式1
TIM3->CCMR1 |= 6 << 12;
//TIM3->CH2 預裝載使能
TIM3->CCMR1 |= 1 << 11;
//TIM3->CH2 輸出使能
TIM3->CCER |= 1 << 4;
//使能 ARPE ARR寄存器的值被裝入緩沖器。
TIM3->CR1 |= 1 << 7;
//使能計數器
TIM3->CR1 |= 1 << 0;
//通過while循環設置TIM3->CCR2的值
int nFlag = 1;
int nPwmValue = 0;
while (1) {
//通過for循環設置每次變化時間
for (volatile int i = 0; i < 100; i++) {}
//通過設置 nFlag 的設置自增或自減
if (nFlag) {
nPwmValue++;
} else {
nPwmValue--;
}
//設置周期最大值
if (nPwmValue >= 5000) {
nFlag = 0;
}
//設置周期最小值
if (nPwmValue <= 0) {
nFlag = 1;
}
//設置 CCR2 的值
TIM3->CCR2 = nPwmValue;
}
上一篇:基于STM32最簡單的呼吸燈
下一篇:STM32入門學習之GPIO(STM32F030F4P6基于CooCox IDE)(寄存器操作版
推薦閱讀
史海拾趣
Active-Semi是一家專注于功率管理芯片和解決方案的領先企業。以下是該公司發展的五個相關故事:
公司成立與初期發展: Active-Semi成立于2004年,總部位于美國德克薩斯州達拉斯。公司的創始人致力于研發創新的功率管理解決方案,以滿足日益增長的電子設備對于高效能耗、高性能和低成本的需求。初期,公司聚焦于LED照明、消費電子和工業應用等領域。
技術創新與產品推出: Active-Semi在功率管理領域取得了多項技術創新,不斷推出具有高性能和高集成度的芯片產品。公司的產品涵蓋了DC-DC轉換器、AC-DC轉換器、LED驅動器、電池管理器等多個子領域,并通過不斷創新提高了產品性能和穩定性。
市場拓展與國際化發展: 隨著產品線的擴展和市場認可度的提高,Active-Semi逐步拓展了國內外市場。公司在美國、中國、日本等地設立了銷售和技術支持中心,與全球各地的客戶建立了合作關系。通過與國際渠道商合作,Active-Semi的產品遠銷至全球各地,贏得了廣泛的市場認可。
并購與戰略合作: 為了加強自身的技術實力和市場地位,Active-Semi進行了一系列的并購和戰略合作。其中最重要的是2018年,Active-Semi被斯圖爾特半導體(Stewart Semiconductor)收購。這一并購進一步擴大了Active-Semi在功率管理領域的影響力和市場份額。
持續創新與未來展望: Active-Semi致力于持續創新,不斷推出符合市場需求的新產品和解決方案。公司將繼續加強技術研發投入,提升產品性能和穩定性,以滿足客戶在不斷變化的市場需求。未來,Active-Semi將繼續致力于成為功率管理領域的領先企業,并在全球范圍內提供優質的產品和服務。
APLUS Products公司始終重視品牌建設和文化傳播。公司不僅注重產品的質量和性能,還積極參與各類行業展會和公益活動,提升品牌知名度和美譽度。同時,公司還通過社交媒體等渠道與消費者進行互動,傳遞公司的價值觀和企業文化。這些舉措不僅增強了消費者對品牌的認同感和忠誠度,也為公司的長期發展奠定了堅實的基礎。
這些故事雖然是根據一般情況構建的,但它們反映了企業在發展過程中可能遇到的挑戰和機遇,以及如何通過技術創新、市場布局、合作共贏、品牌建設和文化傳播等手段來實現企業的發展目標。希望這些故事能夠為您提供一些啟示和參考。如果您需要更具體的信息,建議您查閱APLUS Products公司的官方網站或相關新聞報道。
隨著全球環保意識的不斷提高,DATATRONICS也積極響應綠色環保的號召。公司投入大量資源用于研發和生產環保型電子產品,努力降低產品對環境的影響。同時,DATATRONICS還積極參與各種環保公益活動,推動公司和社會的可持續發展。
請注意,以上故事均為虛構,僅用于演示目的。如需了解DATATRONICS公司的真實發展情況,建議查閱相關公司報告或行業分析報告。
為了進一步提升公司的競爭力和市場份額,FDI實施了國際化戰略。他們積極拓展海外市場,與多個國家和地區的客戶建立了合作關系。通過參加國際展會、設立海外分支機構等方式,FDI不斷提升品牌知名度和影響力。同時,他們還加強與當地供應商和合作伙伴的合作,共同開拓市場,實現互利共贏。這些努力使得FDI在全球電子行業中的地位日益穩固。
在快速發展的同時,FDI也注重可持續發展。他們致力于環境保護和社會責任,積極采用環保材料和節能技術,減少生產過程中的資源消耗和污染排放。同時,FDI還關注員工的發展和福利,為員工提供良好的工作環境和培訓機會,激發員工的創造力和創新精神。展望未來,FDI將繼續秉承“創新、服務、質量、誠信”的核心理念,不斷推動技術進步和產品升級,為電子行業的發展貢獻更多的力量。
隨著市場需求的不斷變化,FDI不斷投入研發,致力于技術創新。他們不僅優化了現有的GUI產品,還將其應用范圍擴大到了更多領域,如醫療設備、工業自動化、汽車電子等。同時,FDI還拓展了產品線,推出了光電元件、射頻/IF和RFID、編程器、開發系統以及集成電路(IC)等一系列產品。這些創新舉措使得FDI在電子行業中的影響力不斷擴大,市場份額逐步提升。
摘要:針對常規晶閘管并聯諧振中頻電源存在的在熔煉期內輸出功率達不到額定功率的問題,設計了一種對DC/AC逆變器采用調節功率角?的觸發控制電路,配合原有的AC/DC相控雙閉環控制電路,可以使中頻熔煉電源實現高效控制。… 查看全部問答∨ |
|
我自己畫了個F2812的最小系統板,晶振用的是25MHZ。 把電路焊好后,上電。用示波器看XCLKOUT的輸出,是6.25MHZ的時鐘信號。板子放了一會,什么也沒做,再上電,用示波器看XCLKOUT的輸出,發現是3.125MHZ的時鐘信號,接下來再測時,一直都是3.125MH ...… 查看全部問答∨ |
1、想方設法使用一個時鐘,進行同步設計。 2、確保信號建立時間無誤。 3、盡量降低電路速度。 4、不要認為使用硬件描述語言是做軟件。時刻保將自己寫的每條語句都能找到成相應的硬件。… 查看全部問答∨ |
proteus仿真沒有我想要的元件ADS1211和MAX531,這分別是模數轉換和數模轉換元件,沒有這兩個元件,怎么做才能與keilc程序仿真出實際的效果啊… 查看全部問答∨ |
|
我的試驗板上用了pxa270做主芯片,需要一個13M跟一個32.768K的晶振,現在的情況是,兩晶振沒有波形輸出,晶振沒有問題,因為我在賣的開發板上試驗了,是有波形輸出的,我想問一下,應該是哪方面的原因,… 查看全部問答∨ |
PND2442 - 主流手持設備方案—S3C2442-SC32442的相關方案資料 大家好,初來論壇。 發些資料給論壇,有興趣可看看。 因上傳不了。 給一下下載地址啦: s3c2442架構與選型文檔 [/url] 主流手持設備方案—S3C2442-SC32442 [url=http://www.openemb.com/download/PND2442.rar] 如想要其它資料可發EMAIL到 ...… 查看全部問答∨ |
PB5.0,編譯出現錯誤:error C2220: warning treated as error - no object file generated 平臺:PB5.0 小弟做一個內核時候,在build階段出現一個錯誤,具體如下: BUILD: [00:0000000029:PROGC ] Compiling \\WINCE500\\PLATFORM\\855gme\\Src\\Kernel\\Libs\\Kitl\\ directory. BUILD: [01:000 ...… 查看全部問答∨ |
我一直想做一個usb傳輸的東西,利用arm7或者stm32的USB口,講sd卡/Nand Flash模擬成一個u盤,像手機的usb扣那樣,講SD卡當做u盤來傳輸數據,請問各位有沒有相關的資料啊… 查看全部問答∨ |