在STM32F105和STM32F107互連型系列微控制器之前,意法半導(dǎo)體已經(jīng)推出STM32基本型系列、增強(qiáng)型系列、USB基本型系列、互補(bǔ)型系列;新系列產(chǎn)品沿用增強(qiáng)型系列的72MHz處理頻率。內(nèi)存包括64KB到256KB閃存和 20KB到64KB嵌入式SRAM。新系列采用LQFP64、LQFP100和LFBGA100三種封裝,不同的封裝保持引腳排列一致性,結(jié)合STM32平臺(tái)的設(shè)計(jì)理念,開發(fā)人員通過選擇產(chǎn)品可重新優(yōu)化功能、存儲(chǔ)器、性能和引腳數(shù)量,以最小的硬件變化來滿足個(gè)性化的應(yīng)用需求。
市面流通的型號(hào)有:
基本型:STM32F101R6、STM32F101C8、STM32F101R8、STM32F101V8、STM32F101RB、STM32F101VB
增強(qiáng)型:STM32F103C8、STM32F103R8、STM32F103V8、STM32F103RB、STM32F103VB、 STM32F103VE、STM32F103ZE
STM32型號(hào)的說明:以STM32F103RBT6這個(gè)型號(hào)的芯片為例,該型號(hào)的組成為7個(gè)部分,其命名規(guī)則如下:
1STM32STM32代表ARM Cortex-M內(nèi)核的32位微控制器。
2FF代表芯片子系列。
3103103代表增強(qiáng)型系列。
4RR這一項(xiàng)代表引腳數(shù),其中T代表36腳,C代表48腳,R代表64腳,V代表100腳,Z代表144腳,I代表176腳。
5BB這一項(xiàng)代表內(nèi)嵌Flash容量,其中6代表32K字節(jié)Flash,8代表64K字節(jié)Flash,B代表128K字節(jié)Flash,C代表256K字節(jié)Flash,D代表384K字節(jié)Flash,E代表512K字節(jié)Flash,G代表1M字節(jié)Flash。
6TT這一項(xiàng)代表封裝,其中H代表BGA封裝,T代表LQFP封裝,U代表VFQFPN封裝。
766這一項(xiàng)代表工作溫度范圍,其中6代表-40——85℃,7代表-40——105℃。
確定PWM頻率。
這里配置的這兩個(gè)定時(shí)器確定了PWM的頻率,我的理解是:PWM的周期(頻率)就是ARR寄存器值與PSC寄存器值相乘得來,但不是簡(jiǎn)單意義上的相乘,例如要設(shè)置PWM的頻率參考上次通用定時(shí)器中設(shè)置溢出時(shí)間的算法,例如輸出100HZ頻率的PWM,首先,確定TIMx的時(shí)鐘,除非APB1的時(shí)鐘分頻數(shù)設(shè)置為1,否則通用定時(shí)器TIMx的時(shí)鐘是APB1時(shí)鐘的2倍,這時(shí)的TIMx時(shí)鐘為72MHz,用這個(gè)TIMx時(shí)鐘72MHz除以(PSC+1),得到定時(shí)器每隔多少秒漲一次,這里給PSC賦7199,計(jì)算得定時(shí)器每隔0.0001秒漲一次,即此時(shí)頻率為10KHz,再把這個(gè)值乘以(ARR+1)得出PWM頻率,假如ARR值為0,即0.0001*(0+1),則輸出PWM頻率為10KHz,再假如輸出頻率為100Hz的PWM,則將ARR寄存器設(shè)置為99即可。如果想調(diào)整PWM占空比精度,則只需降低PSC寄存器的值即可。
TIMx_CCRx寄存器,
確定PWM的占空比。
TIMx_CCR1—TIMx_CCR4確定定時(shí)器的CH1—CH4四路PWM的占空比。直接給該寄存器賦0—65535值即可確定占空比。占空比計(jì)算方法:TIMx_CCRx的值除以ARR寄存器的值即為占空比,因?yàn)檎伎毡仍?—100%之間,所以一般TIMx_CCRx寄存器值不能超過ARR寄存器的值,否則可能會(huì)引起PWM的頻率或占空比的準(zhǔn)確性。
//
void TIM4_GPIOB_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Configure the LED_pin as output push-pull for LD3 & LD4 usage*/
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOB,ENABLE);
//
GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_TIM4); //GPIO口引腳復(fù)用到TIM4的1通道 .PB6
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void TIM4_PwmConfig(void)
{
TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
TIM_DeInit(TIM4);
//
TIM_BaseInitStructure.TIM_Period = 10000; //自動(dòng)重裝載寄存器周期的值(計(jì)數(shù)值) 單位US ,那這里就是10000uS =10mS中斷一次
TIM_BaseInitStructure.TIM_Prescaler = 3599; // 原來83預(yù)分頻數(shù),定時(shí)器主頻位84M,預(yù)分頻設(shè)置為83,分頻84倍,84/84=1m, 一個(gè)時(shí)鐘脈沖位1uS
TIM_BaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //時(shí)鐘分割 采樣分頻
TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //計(jì)數(shù)器向上計(jì)數(shù)
TIM_TimeBaseInit(TIM4, &TIM_BaseInitStructure); //執(zhí)行初始化函數(shù)
//
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; //PWM1 為正常占空比模式,PWM2 為反極性模式
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; //使能輸出
// TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Disable; //互補(bǔ)輸出禁止
// TIM_OCInitStruct.TIM_Pulse = PWM_Value; //改變占空比
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High ; //High 為占空比高極性,此時(shí)占空比為20%;Low 則為反極性,占空比為80%
// TIM_OutputState_Disable
TIM_OC1Init(TIM4,&TIM_OCInitStruct); //使能timer4的通道1
TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable); //CCR 自動(dòng)裝載默認(rèn)也是打開的
TIM_ARRPreloadConfig(TIM4, ENABLE); //ARR 自動(dòng)裝載默認(rèn)是打開的,可以不設(shè)置 啟用ARR的影子寄存器(直到產(chǎn)生更新事件才更改設(shè)置)
//
TIM_Cmd(TIM4, ENABLE); //使能定時(shí)器2
//
}
//
void TIM4_PWM_Init(void)
{
TIM4_PwmConfig();
TIM4_GPIOB_Init();
}
評(píng)論