標(biāo)題:
STM32定時器捕獲,計算頻率成功例程源代碼
[打印本頁]
作者:
我手寫我心
時間:
2018-5-15 10:49
標(biāo)題:
STM32定時器捕獲,計算頻率成功例程源代碼
親自試過,調(diào)試成功
1.0 從此版本開始,代碼中所有變量都定義在sysconfig.h中
2.0 PB6接步進電機脈沖
PC9接步進電機方向
PC8接電磁閥
PC7接泄氣閥
PC1接AD采樣
3.0 A5 A6 06 03 05 00 點動前進
A5 A6 06 04 05 07 點動后退
A5 A6 05 05 00 持續(xù)前進
A5 A6 05 06 03 持續(xù)后退
A5 A6 05 07 02 停止
單片機源程序如下:
/********************************************************************************
* 文件名 :main.c
* 描述 :
* 實驗平臺:STM32開發(fā)板
* 庫版本 :ST3.5.0
* 作者 :liuzhen
********************************************************************************/
#include "stm32f10x.h"
#include "sysconfig.h"
#include "usart1.h"
#include "BSP.H"
#include "led.h"
#include "tim2.h"
#include "pwm_output.h"
#include "exti.h"
#include "moto.h"
#include "adc.h"
//================================ 串口所用變量 ==============================================
u8 Rx1Buffer[Rx1Buffer_Length]; //串口1接收數(shù)據(jù)緩沖區(qū)
u8 Tx1Buffer[Tx1Buffer_Length]; //串口1發(fā)送數(shù)據(jù)緩沖區(qū)
u8 Rx1Cnt=0; //串口1接收數(shù)據(jù)計數(shù)
u8 RX1_Recive_Frame_State=0; //串口1接收幀頭狀態(tài),初始化位0
u8 RX1_Recive_FrameCnt_State=0; //串口1接收一幀數(shù)據(jù)的總長度(即一幀數(shù)據(jù)的第三個元素表示該幀的總長度)
u8 RX1_Over_Flag=0; //串口1接收數(shù)據(jù)完成標(biāo)志位
//=============================== 壓接機所用變量 ==============================================
u8 Press_Mold_Length=0; //定義壓膜長度
u8 Press_Overlap=0; //定義疊壓長度
u8 Press_Mold_Cnt=0; //定義總壓膜次數(shù)
u16 Mid_Unpress_Length=0; //定義中間不壓區(qū)長度
u8 Press_Mold_Effect_Length=0; //定義滑塊有效行走長度,等于壓膜長度-疊壓長度
u8 Latest_PressQuality_Flag=0; //上次壓接質(zhì)量合格標(biāo)志位
u8 Current_Press_Cnt=0; //定義當(dāng)前壓膜編號
u32 LeftDone_MoveRight_NeedPWMCnt=0; //接續(xù)管左邊全部壓完,右移時需多少PWM回到右邊壓接初始點
u8 Press_Cnt_OddEven_Flag=0; //總壓接次數(shù)為偶數(shù)是該位0,總壓接次數(shù)為奇數(shù)是該位1
u8 Hydraumatic_80MPa_Flag=0; //液壓達到80MPa標(biāo)志位
u8 Hydropress_Reset_Flag=0; //液壓機復(fù)位標(biāo)志位,如果液壓機不完全釋放,會影響滑臺前進
u8 Hydropress_Finish_Onepress_Flag=0; //液壓機完成一次壓接標(biāo)志位
u8 Manual_ContinueMove_Flag=0; //手動下,持續(xù)控制滑臺行走
u8 AutoPressTest_Start_Flag = 0; //自動壓接檢測開始標(biāo)志位,也是整個設(shè)備開始工作標(biāo)志位
u8 AutoPressTest_SlipStep_FinishFlag = 0; //自動壓接檢測時,滑塊每完成一個最小單位的移動標(biāo)志位
u8 DiameterDetect_FinishFlag=0; //檢測裝置檢測完成標(biāo)志位
u8 SlidBlock_GoBackMove_Flag=0; //滑臺返工標(biāo)志位,返回不合格處時,只需再次壓接,檢測裝置不需要檢測
//============================= 滑臺步進電機所用變量 ===========================================
float mm_PWMCnt=0.0; //滑塊行走1mm需要的脈沖數(shù)
u32 PWMCnt=0; //當(dāng)前輸出PWM脈沖,正方向加,反方向減
u32 PWMAll=0; //記錄從開始到結(jié)束發(fā)出的PWM總數(shù),默認(rèn)正方向加,反方向減
u8 Move_SequenceNO=0; //滑塊在第一壓接處Move_SequenceNO為0,下一壓機處Move_SequenceNO為1......
/*=====================================================================
Move_order[0] == 1表示滑塊已處在第一模壓接處,開始壓接前默認(rèn)處于第一模位置
Move_order[1] == 1表示滑塊開始向第二模壓接處移動
Move_order[2] == 1表示滑塊開始向第三模壓接處移動
。。。。。。
=====================================================================*/
u8 Move_order[30]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
u16 Tim6_Frequency = 0;
u16 Tim2_CH2 =0;
u16 Tim3_CH2 =0;
u16 Tim4_CH2 =0;
u16 Tim5_CH2 =0;
u16 Tim8_CH2 =0;
u16 Tim1_CH2 =0;
//============================= 壓力傳感器所用變量 ===========================================
__IO uint16_t ADC_ConvertedValue;
//================================= 函數(shù)原型聲明 ===========================================
void Delay(__IO uint32_t nCount); //延時函數(shù)原型聲明
void GPIO_Configuration(void); //TIM2 channel 2 pin (PA.01) configuration
/*=================================================================================
* 函數(shù)名:SYS_INIT
* 描述 :外設(shè)初始化
* 輸入 :無
* 輸出 : 無
* 調(diào)用 :內(nèi)部調(diào)用
================================================================================*/
void SYS_INIT(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO ,ENABLE); //先打開APB2的復(fù)用時鐘AFIO
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //使能SWD關(guān)閉JTAG,釋放被占用的引腳
USART1_Config(115200); //配置串口1為:115200 8-N-1
LED_GPIO_Config();
GPIO_Configuration(); /* TIM2 channel 2 pin (PA.01) configuration */
Nvic_Init();
Tim6_Init(500); //Tim6用于基本定時,Tim6_Init(500)代表500us中斷一次
Tim1_Init(); //Tim5捕獲初始化
Tim2_Init(); //Tim2捕獲初始化
Tim3_Init(); //Tim3捕獲初始化
Tim4_Init(); //Tim4捕獲初始化
Tim8_Init(); //Tim5捕獲初始化
printf("\r\n 初始化完畢 \r\n");
}
/*=================================================================================
* 函數(shù)名:main
* 描述 :主函數(shù)
================================================================================*/
int main(void)
{
SYS_INIT();
while(1)
{
;
}
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/* GPIOA clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);/* GPIOA clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);/* GPIOA clock enable */
/* TIM2 channel 2 pin (PA.01) configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO,ENABLE); //開啟即將使用重映射的時鐘
GPIO_PinRemapConfig(GPIO_FullRemap_TIM1,ENABLE); //TIM1復(fù)用功能完全映射
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
}
/*=================================================================================
* 函數(shù)名:Delay
* 描述 :延時函數(shù)
* 輸入 :無
* 輸出 : 無
* 調(diào)用 :外部調(diào)用
================================================================================*/
void Delay(__IO uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
//typedef enum { FAILED = 0, PASSED = !FAILED} TestStatus;
//__IO TestStatus TransferStatus1 = FAILED;
//TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength);
/******************* (C) COPYRIGHT 2012 WildFire Team *****END OF FILE************/
復(fù)制代碼
所有資料51hei提供下載:
TimBuHuo_20160415wan.rar
(470.25 KB, 下載次數(shù): 46)
2018-5-15 18:35 上傳
點擊文件名下載附件
代碼
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1