久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
STM32編程輸出可調(diào)的硬件PWM,頻率范圍1Hz-1MHz,占空比0-100%
[打印本頁(yè)]
作者:
hushe
時(shí)間:
2015-12-22 19:49
標(biāo)題:
STM32編程輸出可調(diào)的硬件PWM,頻率范圍1Hz-1MHz,占空比0-100%
【原創(chuàng)】編程輸出可調(diào)的硬件PWM,頻率范圍1Hz-1MHz,占空比0-100%
uint32_t TIM4_PWM_FQ = 50; /* TIM4_CH1_PWM輸出 頻率設(shè)置值,1-1000000 */
uint32_t TIM4_PWM_FQ_Old = 0;
uint16_t TIM4_PWM_Pulse = 50; /* TIM4_CH1_PWM輸出 占空比設(shè)置值,0-100 */
uint16_t TIM4_PWM_Pulse_Old = 0;
uint32_t SystemCoreClock = 168000000;
/*
* 函數(shù)功能: 定時(shí)器4配置為硬件PWM模式(不開(kāi)啟TIM4的定時(shí)及DMA傳輸中斷)
* TIM4_PWM_FQ: TIM4_CH1_PWM 頻率 1Hz至1000000Hz
* TIM4_PWM_Pulse: TIM4_CH1_PWM 占空比 0-100%
*/
void StdPeriph_TIM4_PWM_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
uint32_t temp32;
uint32_t uhTimerfrequency;
uint16_t uhTimerPeriod;
uint16_t uhTimerPulse;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
#ifdef USE_PB6_PWM
// TIM4_CH1_PWM: PB6
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
// GPIOB Configuration
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_TIM4);
#else
// TIM4_CH1_PWM: PD12
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
// GPIOD Configuration
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_TIM4);
#endif
uhTimerfrequency = 200000; /* 初始化 200KHz */
temp32 = ((SystemCoreClock /2) / uhTimerfrequency);
if(temp32 > 65535) temp32 = 65535;
uhTimerPeriod = (uint16_t) temp32;
uhTimerPulse = uhTimerPeriod * 50 / 100; /* 占空比50% */
// Time base configuration
TIM_TimeBaseStructure.TIM_Period = uhTimerPeriod - 1; /* 0x0000 and 0xFFFF */
TIM_TimeBaseStructure.TIM_Prescaler = 0; /* 0x0000 and 0xFFFF */
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
// PWM1 Mode configuration: Channel1
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = uhTimerPulse;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OC1Init(TIM4, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM4, ENABLE);
TIM_GenerateEvent(TIM4, TIM_EventSource_Update);
TIM_Cmd(TIM4, ENABLE);
}
/*
* 函數(shù)功能: 刷新TIM4_CH1_PWM輸出的頻率和占空比
* 修改TIM4_PWM_FQ的值,調(diào)節(jié)PWM頻率(1Hz至1MHz)
* 修改TIM4_PWM_Pulse的值,調(diào)節(jié)PWM的占空比(0-100)
*/
void StdPeriph_TIM4_PWM_Update(void)
{
uint32_t temp32;
uint32_t uhTimerfrequency;
uint16_t uhTimerPeriod;
uint16_t uhTimerPrescaler;
uint16_t uhTimerPulse;
if ((TIM4_PWM_FQ_Old != TIM4_PWM_FQ) || (TIM4_PWM_Pulse_Old != TIM4_PWM_Pulse)){
TIM4_PWM_FQ_Old = TIM4_PWM_FQ;
TIM4_PWM_Pulse_Old = TIM4_PWM_Pulse;
if(TIM4_PWM_FQ >= 4000){
uhTimerfrequency = TIM4_PWM_FQ; /* 定時(shí)器計(jì)時(shí)頻率和PWM頻率相等 */
uhTimerPrescaler = 1; /* 實(shí)際頻率TIM4_PWM_FQ較大時(shí),TIM4設(shè)置分頻為1(不分頻) */
}else{
uhTimerfrequency = 4000; /* 實(shí)際頻率TIM4_PWM_FQ較小時(shí),和4000Hz的頻率比較,看相差幾倍 */
uhTimerPrescaler = 4000 / TIM4_PWM_FQ; /* 實(shí)際頻率和4000相差的倍數(shù)作為T(mén)IM4的分頻設(shè)置值 */
uhTimerfrequency = uhTimerPrescaler * TIM4_PWM_FQ; /* TIM4分頻后,計(jì)時(shí)周期變長(zhǎng),需要將uhTimerfrequency倍頻 */
}
/* TIM4的周期要通過(guò)倍頻uhTimerfrequency來(lái)計(jì)算,uhTimerPeriod = 84MHz / uhTimerfrequency */
temp32 = ((SystemCoreClock /2) / uhTimerfrequency);
if(temp32 > 65535) temp32 = 65535;
uhTimerPeriod = (uint16_t) temp32;
if(TIM4_PWM_Pulse > 100) TIM4_PWM_Pulse = 100;
uhTimerPulse = uhTimerPeriod * TIM4_PWM_Pulse/ 100;
TIM4->ARR = uhTimerPeriod - 1;
TIM4->PSC = uhTimerPrescaler - 1;
TIM4->CCR1 = uhTimerPulse;
TIM4->EGR = TIM_PSCReloadMode_Update;
}
}
作者:
--eternal--
時(shí)間:
2018-5-9 22:24
樓主你好,請(qǐng)問(wèn)有工程代碼打包嗎?能給個(gè)下載鏈接不?
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
激情丁香婷婷
|
日韩网站免费观看
|
在线视频一区二区三区
|
日韩有码av
|
日韩成人在线免费观看
|
欧美精品日韩
|
男人天堂网在线
|
国产深夜福利
|
高潮毛片无遮挡免费看
|
久久欧美
|
精品黑人一区二区三区国语馆
|
伊人久久综合
|
日韩欧美久久
|
午夜成人影片
|
色网站在线
|
99亚洲精品
|
精品热久久
|
国产日韩一区
|
日韩在线网址
|
午夜爱
|
欧美午夜精品久久久久免费视
|
超碰在线国产
|
亚洲人成免费
|
青青青视频在线
|
97精品视频
|
黑人精品一区二区
|
欧美精品区
|
国产免费黄色片
|
成人看片网站
|
日本特级黄色片
|
拍床戏真做h文黄肉1v1
|
国产视频黄
|
久久a级片
|
九九久久精品
|
欧美日韩国
|
国产精品人人做人人爽人人添
|
国产精品一区二区三区不卡
|
91福利在线观看
|
白白色免费视频
|
久久久久久黄色
|
www.操
|