【STM32】STM32之timer3產生PWM
//******************************************************************************
//name: GUA_Timer3_PWM.c
//introduce: 定時器3的PWM驅動
//author: 甜甜的大香瓜
//email: [email protected]
//QQ group 香瓜微控制器之STM8/STM32(164311667)
//changetime: 2017.01.14
//******************************************************************************
#include "stm32f10x.h"
#include "GUA_Timer3_PWM.h"
/*********************巨集定義************************/
//引腳巨集
#define GUA_TIMER3_PWM_PORT GPIOB
#define GUA_TIMER3_PWM_PIN GPIO_Pin_0
#define GUA_TIMER3_PWM_MODE GPIO_Mode_AF_PP
#define GUA_TIMER3_PWM_GPIO_CLOCK RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO
#define GUA_TIMER3_PWM_PERIPH_CLOCK RCC_APB1Periph_TIM3
//計數值
#define GUA_TIMER3_PWM_PERIOD (72 - 1)
/*********************內部函式宣告************************/
static void GUA_Timer3_PWM_IO_Init(void);
static void GUA_Timer3_PWM_Config_Init(GUA_U16 nGUA_Timer3_PWM_Prescaler);
//******************************************************************************
//name: GUA_Timer3_PWM_IO_Init
//introduce: 定時器3的PWM的IO初始化
//parameter: none
//return: none
//author: 甜甜的大香瓜
//email: [email protected]
//QQ group 香瓜微控制器之STM8/STM32(164311667)
//changetime: 2017.01.14
//******************************************************************************
static void GUA_Timer3_PWM_IO_Init(void)
{
//IO結構體
GPIO_InitTypeDef GPIO_InitStructure;
//時鐘配置
RCC_APB2PeriphClockCmd(GUA_TIMER3_PWM_GPIO_CLOCK, ENABLE);
//IO初始化
GPIO_InitStructure.GPIO_Pin = GUA_TIMER3_PWM_PIN;
GPIO_InitStructure.GPIO_Mode = GUA_TIMER3_PWM_MODE;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GUA_TIMER3_PWM_PORT, &GPIO_InitStructure);
}
//******************************************************************************
//name: GUA_Timer3_PWM_Config_Init
//introduce: 定時器3的PWM的配置初始化
//parameter: nGUA_Timer3_PWM_Prescaler:預分頻數值,如100則表示1000000/100=10000Hz
//return: none
//author: 甜甜的大香瓜
//email: [email protected]
//QQ group 香瓜微控制器之STM8/STM32(164311667)
//changetime: 2017.01.14
//******************************************************************************
static void GUA_Timer3_PWM_Config_Init(GUA_U16 nGUA_Timer3_PWM_Prescaler)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
//時鐘配置
RCC_APB1PeriphClockCmd(GUA_TIMER3_PWM_PERIPH_CLOCK, ENABLE);
//定時器配置
TIM_TimeBaseStructure.TIM_Period = GUA_TIMER3_PWM_PERIOD; //設定計數值
TIM_TimeBaseStructure.TIM_Prescaler = nGUA_Timer3_PWM_Prescaler - 1; //設定預分頻
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設定時鐘分頻係數:不分頻
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計數溢位模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
//PWM配置
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //配置為PWM模式1(小於計數值時為有效電平)
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
TIM_OCInitStructure.TIM_Pulse = 0; //設定待裝入捕獲比較暫存器的脈衝值
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //有效電平為低電平
TIM_OC3Init(TIM3, &TIM_OCInitStructure); //使能通道3
//預設關閉PWM
GUA_Timer3_PWM_Status(GUA_TIMER3_PWM_STATUS_OFF);
//使能
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //CH3預裝載使能
TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIM3過載暫存器ARR
TIM_Cmd(TIM3, ENABLE); //使能定時器3
}
//******************************************************************************
//name: GUA_Timer3_PWM_Status
//introduce: 定時器3的PWM開關
//parameter: nGUA_Timer3_PWM_Status: GUA_TIMER3_PWM_STATUS_ON or GUA_TIMER3_PWM_STATUS_OFF
//return: none
//author: 甜甜的大香瓜
//email: [email protected]
//QQ group 香瓜微控制器之STM8/STM32(164311667)
//changetime: 2017.01.14
//******************************************************************************
void GUA_Timer3_PWM_Status(GUA_U8 nGUA_Timer3_PWM_Status)
{
//開啟PWM
if(nGUA_Timer3_PWM_Status == GUA_TIMER3_PWM_STATUS_ON)
{
TIM_SetCounter(TIM3, 0);
TIM_CCxCmd(TIM3, TIM_Channel_3, TIM_CCx_Enable);
}
//關閉PWM
else
{
TIM_CCxCmd(TIM3, TIM_Channel_3, TIM_CCx_Disable);
}
}
//******************************************************************************
//name: GUA_Timer3_PWM_SetDutyCycle
//introduce: 定時器3的PWM設定佔空比
//parameter: nGUA_Timer3_PWM_DutyCycle: 0~100為0%~100%
//return: none
//author: 甜甜的大香瓜
//email: [email protected]
//QQ group 香瓜微控制器之STM8/STM32(164311667)
//changetime: 2017.01.14
//******************************************************************************
void GUA_Timer3_PWM_SetDutyCycle(GUA_U8 nGUA_Timer3_PWM_DutyCycle)
{
TIM_SetCompare3(TIM3, GUA_TIMER3_PWM_PERIOD*nGUA_Timer3_PWM_DutyCycle/100);
}
//******************************************************************************
//name: GUA_Timer3_PWM_Init
//introduce: 定時器3的PWM初始化
//parameter: nGUA_Timer3_PWM_Prescaler:預分頻數值,如100則表示1000000/100=10000Hz
//return: none
//author: 甜甜的大香瓜
//email: [email protected]
//QQ group 香瓜微控制器之STM8/STM32(164311667)
//changetime: 2017.01.14
//******************************************************************************
void GUA_Timer3_PWM_Init(GUA_U16 nGUA_Timer3_PWM_Prescaler)
{
//初始化IO
GUA_Timer3_PWM_IO_Init();
//初始化定時器配置
GUA_Timer3_PWM_Config_Init(nGUA_Timer3_PWM_Prescaler);
}
初始化後PWM預設是關閉的。
相關推薦
【STM32】STM32之timer3產生PWM
//****************************************************************************** //name: GUA_Timer3_PWM.c
【STM32】STM32之限位開關
五、基礎知識 1、限位開關是什麼? 答:限位開關其實就是會復原開關的開關按鍵。 也就是說按下限位開關的開關能觸發STM32的IO中斷,而鬆開手指時限位開關會復原。 2、限位開關有什麼用? 答:通常被用於限制電機轉動角度來使用。 例如兩個限位開關形成45°的夾角,一旦電機轉動觸發任意其中一個限
【記錄】STM32學習之第一個程式(點亮LED)
STM32學習之第一個程式(點亮LED) 開發板:Nucelo L053R8 芯 片:STM32L053R8 軟 件:IAR for ARM 7.4, STM32CubeL0 程式碼示例
【STM32】STM32之電量採集
//****************************************************************************** //name: GUA_ADC1.c //introduce:
【STM32】STM32之藍芽透傳模組(昇潤科技HY-254124 V8)
//****************************************************************************** //name: BLE_Uart.c //introduce: 藍芽串
【STM32】STM32之霍爾感測器模組
1、霍爾感測器是什麼? 答:霍爾感測器是根據霍爾效應制作的一種磁場感測器。 用磁鐵去靠近霍爾感測器時,霍爾感測器的引腳電平會產生變化。 2、霍爾感測器主要用在什麼地方? 答:霍爾感測器可測速、計數、限位上。 舉例限位功能:兩個霍爾感測器形成45°的夾角,電機邊緣粘著一個磁鐵,一旦電機轉動導致
【Debug】STM32 HardFault_Handler 故障
3、還是將中斷函式修改,列印中斷時的一些資訊: HardFault_Hander()定義如下: void HardFault_Handler(void) { uint
【STM32】STM32啟動方式
在少量晶片程式下載時,用JLINK或SWD的下載方式比較繁瑣,串列埠下載配合正點原子的FLYMCU比較快捷,STM32的串列埠下載時候需要注意MCU的啟動方式。在復位時,會按照boot的狀態判斷進入哪種模式,boot腳不用保持長狀態。在根據STM407參考手冊來看,STM32
【STM32】STM32 MCU系列介紹
STM32-32 微控制器(MCU)家族 系列 MCU 主流級別MCU STM32 F0系列-ARM Cortex-M0入門級MCU STM32 F1系列-A
【note】stm32 keilMDK出現warning: function XX declared implicitly
warning: #223-D: function "CLR_TX_DATA" declared implicitly 解決方法。 以上面錯誤提示為例: 1 找到定義函式 CLR_TX_DATA() 的原始檔 ,這裡假設在 a.c 中; 2 在 a.h
【STM32】STM32埠複用和重對映(AFIO輔助功能時鐘)
STM32F1xx官方資料:《STM32中文參考手冊V10》-第8章通用和複用功能IO(GPIO和AFIO)埠複用功能埠複用的定義STM32有許多的內建外設(如串列埠、ADC、DCA等等),這些外設的外部引腳都是和GPIO複用的。也就是說,一個GPIO如果可以複用為內建外設的
【轉】linux之cp/scp命令+scp命令詳解
特殊 是否 用戶登錄 usr 指定 highlight 顯示 檔案 三種 linux之cp/scp命令+scp命令詳解 名稱:cp 使用權限:所有使用者 使用方式: cp [options] source dest cp [options] source
【轉】c#之繼承
none 實現 void 運算符重載 調用方法 需要 strong 靜態 顯式 一.繼承的類型 在面向對象的編程中,有兩種截然不同繼承類型:實現繼承和接口繼承 1.實現繼承和接口繼承 *實現繼承:表示一個類型派生於基類型,它擁有該基類型的所有成員字段和函
【轉】C#之集合
tab 並發集合 get spa style con 都在 src 字典 數組(http://www.cnblogs.com/afei-24/p/6738128.html)的大小是固定的。如果元素的個數是動態的,就應使用集合類。 列表(http://www.cn
【Spring】SpringMVC之異常處理
存儲 targe 存在 cnblogs del file 處理機制 href click java中的異常分為兩類,一種是運行時異常,一種是非運行時異常。在JavaSE中,運行時異常都是通過try{}catch{}捕獲的,這種只能捕獲顯示的異常,通常項目上拋出的異常都是不可
【Spring】SpringMVC之攔截器
https javax request orm bin 支持 exceptio 賬號 intern Spring的HandlerMapping處理器支持攔截器應用。當需要為某些請求提供特殊功能時,例如實現對用戶進行身份認證、登錄檢查等功能。 攔截器必須實現HandlerI
【Spring】SpringMVC之REST編程風格
data springmvc 4.0 gen rip servle truct -name insert REST架構是一個抽象的概念,目前主要是基於HTTP協議實現,其目的是為了提高系統的可伸縮性、降低應用之間的耦合度、便於架構分布式處理程序。 在URL中設置使用
【22】Vue 之 Vue Devtools
rom 創建 png ins -c 擴展程序 安裝 搜索 項目 vue安裝: # 最新穩定版 $ npm install vue # 全局安裝 vue-cli $ npm install --global vue-cli # 創建一個基於 webpack 模板的新項目 $
【轉載】linux之sed用法
span 變量 常用 tdi 選擇 包括 div 輸入 記得 linux之sed用法 原文地址:http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html sed是一個很好的文件處理工具,本身是
【03】react 之創建component
更強 系列 生命周期 object mem efi 多余 element edi React推出後,出於不同的原因先後出現三種定義react組件的方式,殊途同歸;具體的三種方式: 函數式定義的無狀態組件 es5原生方式React.createClass定義的組件 es6形