STM32系列基于專為要求高性能、低成本、低功耗的嵌入式應(yīng)用專門設(shè)計(jì)的ARM Cortex-M3內(nèi)核(ST‘s product portfolio contains a comprehensive range of microcontrollers, from robust, low-cost 8-bit MCUs up to 32-bit ARM-based Cortex?-M0 and M0+, Cortex?-M3, Cortex?-M4 Flash microcontrollers with a great choice of peripherals. ST has also extended this range to include an ultra-low-power MCU platform)[1] 。按內(nèi)核架構(gòu)分為不同產(chǎn)品:
其中STM32F系列有:STM32F103“增強(qiáng)型”系列STM32F101“基本型”系列STM32F105、STM32F107“互聯(lián)型”系列
增強(qiáng)型系列時(shí)鐘頻率達(dá)到72MHz,是同類產(chǎn)品中性能最高的產(chǎn)品;基本型時(shí)鐘頻率為36MHz,以16位產(chǎn)品的價(jià)格得到比16位產(chǎn)品大幅提升的性能,是32位產(chǎn)品用戶的最佳選擇。兩個(gè)系列都內(nèi)置32K到128K的閃存,不同的是SRAM的最大容量和外設(shè)接口的組合。時(shí)鐘頻率72MHz時(shí),從閃存執(zhí)行代碼,STM32功耗36mA,相當(dāng)于0.5mA/MHz。
gpio
General Purpose Input Output (通用輸入/輸出)簡(jiǎn)稱為GPIO,或總線擴(kuò)展器,人們利用工業(yè)標(biāo)準(zhǔn)I2C、SMBus或SPI接口簡(jiǎn)化了I/O口的擴(kuò)展。當(dāng)微控制器或芯片組沒有足夠的I/O端口,或當(dāng)系統(tǒng)需要采用遠(yuǎn)端串行通信或控制時(shí),GPIO產(chǎn)品能夠提供額外的控制和監(jiān)視功能。
分類:硬件/嵌入開發(fā)驅(qū)動(dòng)開發(fā)/核心開發(fā)
每個(gè)GPIO端口可通過軟件分別配置成輸入或輸出。Maxim的GPIO產(chǎn)品線包括8端口至28端口的GPIO,提供推挽式輸出或漏極開路輸出。提供微型3mm x 3mm QFN封裝。
PWM
PWM控制技術(shù)以其控制簡(jiǎn)單,靈活和動(dòng)態(tài)響應(yīng)好的優(yōu)點(diǎn)而成為電力電子技術(shù)最廣泛應(yīng)用的控制方式,也是人們研究的熱點(diǎn)。由于當(dāng)今科學(xué)技術(shù)的發(fā)展已經(jīng)沒有了學(xué)科之間的界限,結(jié)合現(xiàn)代控制理論思想或?qū)崿F(xiàn)無諧振波開關(guān)技術(shù)將會(huì)成為PWM控制技術(shù)發(fā)展的主要方向之一。其根據(jù)相應(yīng)載荷的變化來調(diào)制晶體管基極或MOS管柵極的偏置,來實(shí)現(xiàn)晶體管或MOS管導(dǎo)通時(shí)間的改變,從而實(shí)現(xiàn)開關(guān)穩(wěn)壓電源輸出的改變。這種方式能使電源的輸出電壓在工作條件變化時(shí)保持恒定,是利用微處理器的數(shù)字信號(hào)對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù)。
stm32單片機(jī)中使用GPIO口模擬PWM輸出解析
使用了STM32F10364引腳的MCU,在硬件設(shè)計(jì)中,因?yàn)橥庠O(shè)較多,導(dǎo)致每個(gè)通用定時(shí)器至少有兩個(gè)PWM輸出引腳被占用,現(xiàn)在要控制RGB燈,只能用一個(gè)普通IO引腳模擬PWM輸出。
相關(guān)的硬件電路設(shè)置如下:
GPIOA1------------------------------RGBBLUE燈
GPIOB1------------------------------RGBGREEN燈
GPIOD2------------------------------RGBRED燈
RGB燈采用了共陽(yáng)極電路,所以在PWM的輸出急性設(shè)置時(shí),將極性設(shè)置為高電平,定時(shí)器的初始化如下圖所示:
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_DeInit( TIM2 );
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure );
TIM_TimeBaseStructure.TIM_Period =TIMER_PERIOD;
TIM_TimeBaseStructure.TIM_Prescaler =TIMER_PRESCALER;
TIM_TimeBaseStructure.TIM_ClockDivision= TIM_CKD_DIV1; // 不分頻
TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
TIM_OCStructInit(&TIM_OCInitStructure );
TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Disable;
TIM_OCInitStructure.TIM_Pulse =DEFAULT_DUTY_CYCLE;
TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_High;
//
TIM_OC1Init(TIM2,&TIM_OCInitStructure);
//
TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);
//
TIM_OC2Init(TIM2,&TIM_OCInitStructure);
//
TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);
//
TIM_OC3Init(TIM3,&TIM_OCInitStructure);
//
TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);
//
TIM_OC4Init(TIM3,&TIM_OCInitStructure);
//
TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);
//
TIM_OCStructInit(&TIM_OCInitStructure );
TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_Timing;
TIM_OCInitStructure.TIM_Pulse =DEFAULT_DUTY_CYCLE;
//
TIM_OC2Init(TIM3,&TIM_OCInitStructure);
//
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
// ARR重裝載使能
TIM_ARRPreloadConfig(TIM2,ENABLE);
TIM_ARRPreloadConfig(TIM3,ENABLE);
//
TIM_ClearITPendingBit( TIM2,TIM_IT_Update );
TIM_ClearITPendingBit( TIM3,TIM_IT_Update | TIM_IT_CC2 );
//定時(shí)器2和3中斷使能
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
TIM_ITConfig(TIM3,TIM_IT_Update |TIM_IT_CC2, ENABLE);
}
輸出極性為高電平的意思就是說,假如說占空比為20%,那么他表示,低電平占整個(gè)周期20%的時(shí)間,反之如果設(shè)置極性為低電平,那么表示高電平占用整個(gè)周期的20%。
如何用GPIOD2模擬PWM波形呢? 關(guān)鍵的地方就是同時(shí)必須使用定時(shí)器中斷
評(píng)論