新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 智林STM32程序源代碼的分析和整理04

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

        作者: 時間:2016-11-28 來源:網絡 收藏
        一、定時器的配置

        1、概述

        本文引用地址:http://www.104case.com/article/201611/322961.htm

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

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

        2、源程序

        void TIMx_Config(void) {

        TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;//時基單元配置數據結構

        TIM_OCInitTypeDefTIM_OCInitStructure;//輸出模式設置數據結構

        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;//分頻系數3

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

        //向上計數的特點是:從0到加載值,產生溢出;然后重新從0計數。

        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;//定時器計數與比較通道匹配時翻轉

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

        TIM_OCInitStructure.TIM_Pulse = CCR3_Val;//比較通道的計數值

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

        TIM_OC3Init(TIM2, &TIM_OCInitStructure);

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

        TIM_Cmd(TIM2, ENABLE);

        //TIM_ITConfig(TIM2, TIM_IT_CC3, ENABLE);

        }

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

        二、串口的配置

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

        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);

        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 富民县| 蓬安县| 阿合奇县| 武宁县| 肥西县| 宁强县| 贵州省| 满洲里市| 太白县| 搜索| 虹口区| 临湘市| 桐梓县| 松阳县| 永修县| 克东县| 鄄城县| 无棣县| 句容市| 满洲里市| 孟村| 徐闻县| 商城县| 姜堰市| 彝良县| 临澧县| 巴彦淖尔市| 孟州市| 舒兰市| 永寿县| 新余市| 江津市| 托克托县| 垦利县| 清苑县| 通化市| 济南市| 德阳市| 雅江县| 梁平县| 邵东县|