新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 智林STM32程序源代碼的分析和整理04

智林STM32程序源代碼的分析和整理04

作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
一、定時器的配置

1、概述

本文引用地址:http://butianyuan.cn/article/201611/322961.htm

STM32的定時器功能比較多、配置也較復雜,我現(xiàn)在了解不多,邊用邊學吧。智林開發(fā)板上有兩個用定時器的地方,一個是液晶的背光電源,要求輸出一定的PWM波形,用于整流提供電源;二是用于控制喇叭,也是時鐘脈沖輸出。

定時器首先的選擇是計數(shù)、還是定時,我這里用的都是定時,輸出模式可以是輸入時定時器的捕獲,可以是比較匹配時設(shè)定輸出(經(jīng)常用到這一種)。

2、源程序

void TIMx_Config(void) {

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;//時基單元配置數(shù)據(jù)結(jié)構(gòu)

TIM_OCInitTypeDefTIM_OCInitStructure;//輸出模式設(shè)置數(shù)據(jù)結(jié)構(gòu)

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//PA2,復用輸出模式

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//即用于定時2通道3

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

TIM_TimeBaseStructure.TIM_Period = CCR3_Val;//40寫入自動裝載寄存器,150KHz輸出。

TIM_TimeBaseStructure.TIM_Prescaler = 2;//分頻系數(shù)3

TIM_TimeBaseStructure.TIM_ClockDivision = 0;//與什么采樣相關(guān),這里用不到

//向上計數(shù)的特點是:從0到加載值,產(chǎn)生溢出;然后重新從0計數(shù)。

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;//定時器計數(shù)與比較通道匹配時翻轉(zhuǎn)

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//開啟輸出通道

TIM_OCInitStructure.TIM_Pulse = CCR3_Val;//比較通道的計數(shù)值

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//低電平有效

TIM_OC3Init(TIM2, &TIM_OCInitStructure);

TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);//自動重裝載,預(yù)裝載

TIM_Cmd(TIM2, ENABLE);

//TIM_ITConfig(TIM2, TIM_IT_CC3, ENABLE);

}

這里只列出了液晶使用的定時器2通道3的輸出,輸出150kHz的頻率。沒用到中斷。這個頻率是怎么得到的呢?首先是TIM2使用APB1的36M,經(jīng)過預(yù)分頻,分頻系數(shù)為(Prescaler+1)=3,3分頻后為12MHz。計數(shù)周期為40,計數(shù)到40與輸出比較寄存器產(chǎn)生匹配,觸發(fā)輸出翻轉(zhuǎn),然后計數(shù)器重新開始計數(shù)。故輸出通道的頻率為12MHz除以80,得到150kHz。

二、串口的配置

按鍵輸入命令不怎么方便,很快我就要編寫串口通信程序,用串口輸入命令,控制開發(fā)板。串口配置用庫函數(shù)很方便。

void UART_Config(void){//進行串口的初始化配置

USART_InitTypeDef USART_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

USART1->BRR =0x0271;

USART_Cmd(USART1, ENABLE);

}



關(guān)鍵詞: 智林STM32程序源代

評論


技術(shù)專區(qū)

關(guān)閉