這個pwm幾天前就搞出來了,但是覺得不是很難,就沒有寫
今天jlink固件壞了,修了半天沒有修好,現在就先扔著吧,先借大黃的用用,下面閑著木事,就把pwm寫下吧


好吧,開始今天的pwm
還是老話,先附上一段代碼:(由于stm的pwm有多個,每個又有多個通道,我們今天選TIM2_CH1來產生)
~~~
/*
* TIM2_CH1
*/
int pwm_init(u16 arr,u16 psc)
{
RCC->APB1ENR = 1<<0; //enable timer2
RCC->APB2ENR = 1<<2; //enable GPIOA
GPIOA->CRL &= ~(0xF<<0); //Clear bit0 Control Register
GPIOA->CRL |= 0xb<<0; //Set Bit0 Control Register
// GPIOA->ODR |= 1<<0; //Enable Bit0
TIM2->ARR = arr;
TIM2->PSC = psc;
TIM2->CCMR1 |= 7<<4;
TIM2->CCMR1 |= 1<<3;
TIM2->CCER |= 1<<0;
TIM2->CR1 |= 1<<0;
return 0;
}
~~~
前5句,現在大家都應該懂了吧,TIMER時鐘配置,管腳時鐘配置,管腳模式配置,這里肯定要配置稱輸出模式
由于咱們選用的是TIMER2,那我們就用TIM2
先設置自動裝載寄存器ARR和預分頻寄存器PSC,這兩個寄存器一起來設置分頻的頻率
舉個例子:
PCLK = 72M = 72000KHz,設置ARR = 900,PSC = 1;
則輸出的PWM周期為:72 000 /(900*(1+1) ) = 40KHz
至于CCMR比較/捕獲模式寄存器

他有 兩個功能,當選擇比較寄存器的時候,看上面一欄,捕獲模式時看下面一欄
輸出比較模式,他有兩種輸出模式,OC1和OC2,其實總共有4組,他有4路輸出,CCMR1,CCMR2分別控制兩組;
我們這里用的是CH1通道,所以我們需要配置0~7bit的數據。
首先我們來了解下pwm輸出模式:

根據這段描述,這里的無效電平,會導致OCxREF為低電平,從而管腳輸出電壓即為低電平。
所以,011:在把低電平換位高電平,高電平換成低電平
100:輸出全部為低電平
101:輸出全為高電平
110:先輸出高電平,再輸出低電平,之類的CCR1比較/捕獲寄存器是用來區分什么時候發生電平跳變的,CCRx寄存器也有4組,我們用的是CH1通道,估大家都懂,我們應該用CCR1
111:跟上一組相反

~~~
int main()
{
sys_init(9);
pwm_init(900,3); //Set Period
RCC->APB2ENR |= 1<<6;
GPIOE->CRL &= ~(0xf<<0);
GPIOE->CRL |= 0xb<<0;
GPIOE->ODR |= 1<<0;
TIM2->CCR1 = 0;
sw5_config();
while(1)
{
if(!(GPIOE->IDR & GPIO_Pin_14))
{
delay_ms(20);
if(!(GPIOE->IDR & GPIO_Pin_14))
{
TIM2->CCR1 += 10;
}
while(!(GPIOE->IDR & GPIO_Pin_14));
}
}
}
~~~

這里ARR = 900,PSC = 3
所以: F = 72000KHz/(900*(3+1)) = 20KHz
基本上跟示波器上的一樣
關于pwm的配置是相對比較簡單的,大家不要被他寄存器的數量嚇到了,那么多寄存器,是因為他有多路,所以,他會有那么多,學會了一路,其他都是非常easy的!
- 前言
- 【菜鳥入門】stm32的第一個程序--LED
- 【菜鳥入門】stm32 之 掃描按鍵
- 【菜鳥入門】stm32 之 中斷按鍵
- 【菜鳥入門】stm32 之 USART
- 【菜鳥入門】stm32 之 iic
- 【菜鳥入門】stm32 之 eeprom
- 【菜鳥入門】stm32 之 pwm
- 【菜鳥入門】stm32 之 ADC 模數轉換
- 【菜鳥入門】stm32 之 實時時鐘
- 【菜鳥入門】stm32 之 DMA
- 【菜鳥入門】stm32 之 DAC
- 【STM庫應用】stm32 之 USART
- 中斷源去抖辦法
- stm32 啟動代碼應用技巧
- 【STM庫應用】stm32 之 IIC應用
- 【STM庫應用】stm32 之 中斷按鍵初始化(注意事項)
- 關于結構體初始化
- 【STM庫應用】stm32 之 TIM (詳解一 通用定時器)
- 【STM庫應用】stm32 之 TIM (詳解二 脈沖寬度、周期測量)
- 【stm32庫應用】SD驅動移植(基于SDIO外設)
- SD卡fat文件系統移植
- stm32 DMA初始化選項研究
- stm32 靈活靜態存儲控制器(FSMC)(NORFLASH\PSRAM)
- 【stm32+uC/OS-II】ucosii移植簡單詳細步驟
- STM32 加入調試信息來調試代碼
- NRF24L01 無線通信模塊使用