天天看點

Doxygen生成注釋文檔

最終效果

最終通過檔案的注釋,生成一個幫助文檔。

Doxygen生成注釋文檔

軟體安裝

需要安裝3個軟體

1.Doxygen

2.graphviz(可以根據檔案的引用關系生成調用關系圖)

3.htmlhelp(生成windos脫機可用的幫助文檔)

打包位址 連結:.

提取碼:c98c

自行預設安裝即可

注釋規範

想要生成注釋文檔,首先你的注釋要符合Doxygen的要求

檔案注釋

/*!
  * @file     LQ_CTIME.h
  *
  * @brief    CTIME驅動檔案
  *
  * @company  北京龍邱智能科技
  *
  * @author   LQ-005
  *
  * @note     LPC55S69有5個32位的CTIME 
  *
  * @version  V1.1  2019/12/06 優化注釋 Doxygen
  *
  * @Software IAR8.32 or MDK5.28
  *
  * @par URL  http://shop36265907.taobao.com
  *           http://www.lqist.cn
  *
  * @date     2019/10/18 星期五
  */ 
           

生成的效果圖

Doxygen生成注釋文檔

宏定義注釋

/*! CTIMER 最大占空比 可自行修改 */
#define  CMTER_PWM_MAX    10000
           

生成的效果圖

Doxygen生成注釋文檔

結構體、枚舉體注釋

/** 
  * @brief CTIMER子產品 脈沖計數通道
  * @note  CTIMER 子產品 脈沖捕獲通道 
  * @note  CTIMER 子產品的輸入管腳并不是直接CTIMER連接配接的  而是通過INPUTMUX子產品連接配接的
  * @note  CTIMER計數器 ---  INPUTMUX輸入多路複用子產品17路通道  ----  晶片外部管腳
  * @note  簡單說 就是CTIMER的捕獲通道每個都可以與 INPUTMUX子產品的17路通道相連結
  * @note  INPUTMUX子產品的17路通道相連結的管腳如下
  */ 
typedef enum
{
    CTInput0_P0_1  = 0x0000 + 1,  CTInput0_P0_13 = 0x0000 + 2,     /*!< INPUTMUX—CTIMER 輸入通道0管腳  */  
    CTInput1_P0_14 = 0x0100 + 1,  CTInput1_P0_2  = 0x0100 + 2,     /*!< INPUTMUX—CTIMER 輸入通道1管腳  */  
    CTInput2_P1_0  = 0x0200 + 1,  CTInput2_P1_28 = 0x0200 + 2,     /*!< INPUTMUX—CTIMER 輸入通道2管腳  */  
    CTInput3_P1_1  = 0x0300 + 1,  CTInput3_P1_26 = 0x0300 + 2,     /*!< INPUTMUX—CTIMER 輸入通道3管腳  */  
    CTInput4_P1_9  = 0x0400 + 1,  CTInput4_P0_16 = 0x0400 + 2,     /*!< INPUTMUX—CTIMER 輸入通道4管腳  */  
    CTInput5_P1_11 = 0x0500 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道5管腳  */  
    CTInput6_P1_13 = 0x0600 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道6管腳  */  
    CTInput7_P1_15 = 0x0700 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道7管腳  */  
    CTInput8_P0_24 = 0x0800 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道8管腳  */  
    CTInput9_P0_25 = 0x0900 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道9管腳  */  
    CTInput10_P0_10= 0x0A00 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道10管腳  */  
    CTInput11_P0_28= 0x0B00 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道11管腳  */  
    CTInput12_P0_4 = 0x0C00 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道12管腳  */  
    CTInput13_P0_6 = 0x0D00 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道13管腳  */  
    CTInput14_P1_20= 0x0E00 + 1,  CTInput14_P0_26= 0x0E00 + 2,     /*!< INPUTMUX—CTIMER 輸入通道14管腳  */  
    CTInput15_P0_20= 0x0F00 + 1,  CTInput15_P0_22= 0x0F00 + 2,     /*!< INPUTMUX—CTIMER 輸入通道15管腳  */  
    CTInput16_P0_15= 0x1000 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道16管腳  */  
    
} CTIMER_InputChannel_t;
           

生成的效果圖

Doxygen生成注釋文檔

全局變量

/** DMA link傳輸描述符 */
extern dma_descriptor_t s_dma_descriptor_table0[];
           

生成的效果圖

Doxygen生成注釋文檔

函數注釋

/*!
  * @brief    初始化CTIMER為PWM輸出功能
  *
  * @param    matchChannel   :    CTIMER通道  LQ_CTIMER.h中枚舉體
  * @param    duty           :    占空比 * CMTER_PWM_MAX
  * @param    pwmFreq_Hz     :    頻率
  *
  * @return   無
  *
  * @note     一個CTIMER子產品隻能用作脈沖計數和PWM輸出的一種
  * @note     一個CTIMER子產品最多隻能輸出3路PWM頻率相同的PWM波
  *
  * @see      CTIMER_InitPwmConfig(CT0Outpute0_P0_0, 5000, 100);//初始化P0_0 作為CTIMER0的通道0 的PWM輸出口 頻率100Hz 占空比 百分之(5000/CMTER_PWM_MAX)*100
  *
  * @date     2019/5/7 星期二
  */ 
void CTIMER_InitPwmConfig(CTIMER_OutputChannel_t matchChannel,uint32_t duty,uint32_t pwmFreq_Hz);
           

生成的效果圖

Doxygen生成注釋文檔

Doxygen配置

1.首先我們建立一個檔案夾,将按上面規則注釋的代碼檔案放裡面(注意,需要所有的代碼保持一樣的編碼方式,這裡用的是GB2312)

Doxygen生成注釋文檔
/*!
  * @file     LQ_CTIME.c
  *
  * @brief    CTIME驅動檔案
  *
  * @company  北京龍邱智能科技
  *
  * @author   LQ-005
  *
  * @note     LPC55S69有5個32位的CTIME 
  *
  * @version  V1.1  2019/12/06 優化注釋 Doxygen
  *
  * @Software IAR8.32 or MDK5.28
  *
  * @par URL  http://shop36265907.taobao.com
  *           http://www.lqist.cn
  *
  * @date     2019/10/18 星期五
  */ 
#include "fsl_inputmux.h"
#include "fsl_iocon.h"
#include "fsl_ctimer.h"
#include "LQ_CTIME.h"
#include "LQ_GPIO.h"



/*!
  * @brief    初始化CTIMER為PWM輸出功能
  *
  * @param    matchChannel   :    CTIMER通道  LQ_CTIMER.h中枚舉體
  * @param    duty           :    占空比 * CMTER_PWM_MAX
  * @param    pwmFreq_Hz     :    頻率
  *
  * @return   無
  *
  * @note     一個CTIMER子產品隻能用作脈沖計數和PWM輸出的一種
  * @note     一個CTIMER子產品最多隻能輸出3路PWM頻率相同的PWM波
  *
  * @see      CTIMER_InitPwmConfig(CT0Outpute0_P0_0, 5000, 100);//初始化P0_0 作為CTIMER0的通道0 的PWM輸出口 頻率100Hz 占空比 百分之(5000/CMTER_PWM_MAX)*100
  *
  * @date     2019/5/7 星期二
  */
void CTIMER_InitPwmConfig(CTIMER_OutputChannel_t matchChannel, uint32_t duty, uint32_t pwmFreq_Hz)
{
	static uint8_t flag[5];
    uint8_t index = matchChannel >> 12;
    uint8_t channel_temp = (matchChannel&0x0F00)>>8;
	CTIMER_Type     * TIMERN[] = CTIMER_BASE_PTRS;
	CTIMER_Type     * base = TIMERN[index];
	
	assert(pwmFreq_Hz > 0);
	uint32_t reg;   
	ctimer_config_t cconfig;  

    /* 選擇時鐘源 */
    CLOCK_AttachClk((clock_attach_id_t)(kMAIN_CLK_to_CTIMER0 + index));
    
	if ((channel_temp) == kCTIMER_Match_3)
	{
		return ;   //周期通道
	}
	/* 防止重複初始化 */
	if(flag[index] < 1)
	{
		flag[index]++;
		/* 初始化 CTIMER */
		CTIMER_GetDefaultConfig(&cconfig);
		CTIMER_Init(base, &cconfig); 
	}

	/* 初始化對應管腳 */
	CTIME_PWMPinInit(matchChannel);
    
	pwmFreq_Hz = (CLOCK_GetCTimerClkFreq(index) / pwmFreq_Hz) - 1;
    
	/* 使能PWM模式 */
	base->PWMC |= (1U << (channel_temp));
	
	/* 清除标志位 */
	reg = base->MCR;
	reg &= ~((CTIMER_MCR_MR0R_MASK | CTIMER_MCR_MR0S_MASK | CTIMER_MCR_MR0I_MASK) << ((channel_temp) * 3));
	
	/* 設定周期通道  */
	reg |= CTIMER_MCR_MR3R_MASK;
	
	base->MCR = reg;  
	
	/* 配置PWM頻率 */
	base->MR[kCTIMER_Match_3] = pwmFreq_Hz;
	
	/* 配置占空比 */
	base->MR[(channel_temp)] = (uint32_t)(pwmFreq_Hz * ((float)(CMTER_PWM_MAX - duty)/CMTER_PWM_MAX)); 
	
	/* 清除标志位 */
	CTIMER_ClearStatusFlags(base, CTIMER_IR_MR0INT_MASK << (channel_temp));
	
	CTIMER_StartTimer(base);
	return;
}



/*!
  * @brief    CTIMER 更新PWM占空比
  *
  * @param    matchChannel   :    CTIMER通道
  * @param    duty           :    占空比 * CMTER_PWM_MAX
  *
  * @return   無
  *
  * @note     使用前請先初始化對應通道
  *
  * @see      CTIMER_SetDuty(CT0Outpute0_P0_0, 4000); //設定P0_0 通道 PWM占空比 百分之 百分之(4000/CMTER_PWM_MAX)*100 
  *
  * @date     2019/5/7 星期二
  */
void CTIMER_SetDuty(CTIMER_OutputChannel_t matchChannel, uint32_t duty)
{ 
    CTIMER_Type     * TIMERN[] = CTIMER_BASE_PTRS;
    CTIMER_Type     * base = TIMERN[matchChannel >> 12];
    
    uint32_t pulsePeriod = 0, period;

    /* 擷取周期 */
    period = base->MR[kCTIMER_Match_3];

    if (duty == 0)
    {
        pulsePeriod = period + 1;
    }
    else
    {
        pulsePeriod = (uint32_t)(period * ((float)(CMTER_PWM_MAX - duty)/CMTER_PWM_MAX));
    }

    /* 更新占空比 */
    base->MR[((matchChannel&0x0F00)>>8)] = pulsePeriod;
}

/*!
  * @brief    初始化CTIMER 作為脈沖計數功能
  *
  * @param    base     : CTIMER0 - CTIMER4
  * @param    channel  : 輸入脈沖計數通道
  *
  * @return   無
  *
  * @note     LPC55S69隻能用帶方向編碼器  
  *
  * @see      CTIMER_InitCapConfig(CTIMER0, CTInput0_P0_1);//初始化CTIMER0 為脈沖捕獲功能 使用P0_1管腳捕獲脈沖
  *
  * @date     2019/10/21 星期一
  */
void CTIMER_InitCapConfig(CTIMER_Type *base, CTIMER_InputChannel_t channel)
{
    /* 開啟多路複用器時鐘 */
    CLOCK_EnableClock(kCLOCK_InputMux);
        
    uint8_t index = CTIMER_GetInstance(base);
    int32_t temp = 0;
    switch(index)
    {
      case 0:
        temp = (TIMER0CAPTSEL0 << PMUX_SHIFT);
        break;
      case 1:
        temp = (TIMER1CAPTSEL0 << PMUX_SHIFT);
        break;
      case 2:
        temp = (TIMER2CAPTSEL0 << PMUX_SHIFT);
        break;
      case 3:
        temp = (TIMER3CAPTSEL0 << PMUX_SHIFT);
        break;
      case 4:
        temp = (TIMER4CAPTSEL0 << PMUX_SHIFT);
        break;
    }
    /* 選擇時鐘源 */
    CLOCK_AttachClk((clock_attach_id_t)(kMAIN_CLK_to_CTIMER0 + index));
    
    /* 将多路複用器通道和CTIMER輸入捕獲通道連接配接起來 */
    INPUTMUX_AttachSignal(INPUTMUX, 0U, (inputmux_connection_t)((channel >> 8)+temp));
    
    /* 将對應管腳 複用為輸入捕獲通道 */
    CTIMER_CAPPinInit(channel);
    
    ctimer_config_t CTimerConfigStruct;
    
    // 配置CTimer為輸入捕捉模式、計數器模式,下降沿捕捉 
    CTimerConfigStruct.mode = kCTIMER_IncreaseOnFallEdge;
    CTimerConfigStruct.input= kCTIMER_Capture_0;  
    CTimerConfigStruct.prescale = 0U; // 設定分頻因子 

    CTIMER_Init(base, &CTimerConfigStruct);
    CTIMER_StartTimer(base);
}


/*!
  * @brief    CTIMER 得到計數值
  *
  * @param    base        : CTIMER0 - CTIMER4
  * @param    pin         : 方向管腳 DIR
  *
  * @return   脈沖計數值
  *
  * @note     使用前需要對CTMIE初始化 方向管腳也需要初始化
  *
  * @see      CTIMER_GetCounter(CTIMER0, P1_11); //擷取CTIMER0脈沖計數值 P1_11接編碼器方向管腳(DIR)
  *
  * @date     2019/5/7 星期二
  */
uint32_t CTIMER_GetCounter(CTIMER_Type *base, GPIO_Name_t pin)
{          
    /* 擷取脈沖計數值 */
    uint32_t temp = CTIMER_GetTimerCountValue(base);
    
    /* 清除對應計數器 */
    CTIMER_Reset(base);
    
    if(PIN_Read(pin) == 0)
        return -temp;
    else
        return temp;
    
}


/*!
  * @brief    CTIMER 清除計數器
  *
  * @param    base        : CTIMER0 - CTIMER4
  *
  * @return   脈沖計數值
  *
  * @note     使用前需要對CTMIE初始化
  *
  * @see      CTIMER_ClearCounter(CTIMER0); //清除CTIMER0脈沖計數值
  *
  * @date     2019/5/7 星期二
  */
void CTIMER_ClearCounter(CTIMER_Type *base)
{    
    CTIMER_Reset(base);        
}




/*!
  * @brief    CTIMER PWM輸出管腳初始化
  *
  * @param    CTn_CHn  : PWM通道
  *
  * @return   無
  *
  * @note     内部調用
  *
  * @see      CTIME_PWMPinInit(CT0Output0_P0_0); //初始化P0_0 為CTIMER0 的通道0
  *
  * @date     2019/10/21 星期一
  */
void CTIME_PWMPinInit(CTIMER_OutputChannel_t CTn_CHn)
{    
    uint32_t PIOFun2_config = FUNC2|MODE_Up|MODE_GPIO|INVERT_Disable|DIGIMODE_Digital|FILTER_Disable;
    uint32_t PIOFun3_config = FUNC3|MODE_Up|MODE_GPIO|INVERT_Disable|DIGIMODE_Digital|FILTER_Disable;
    uint32_t PIOFun4_config = FUNC4|MODE_Up|MODE_GPIO|INVERT_Disable|DIGIMODE_Digital|FILTER_Disable;
    
    /* 開啟 時鐘 */
    CLOCK_EnableClock(kCLOCK_Iocon);
    
    switch(CTn_CHn)
    {
      case  CT0Output0_P0_0:       
        IOCON_PinMuxSet(IOCON, 0, 0, PIOFun3_config);
        break;
     
      case  CT0Output0_P0_30:       
        IOCON_PinMuxSet(IOCON, 0,30, PIOFun4_config);          
        break;     
        
      case CT0Output1_P0_3:        
        IOCON_PinMuxSet(IOCON, 0, 3, PIOFun2_config);
        break;
        
      case CT0Output1_P0_31:
        IOCON_PinMuxSet(IOCON, 0,31, PIOFun4_config);
        break;     
        
      case  CT0Output2_P0_19:        
        IOCON_PinMuxSet(IOCON, 0,19, PIOFun3_config);
        break;
        
      case CT0Output2_P1_31:
        IOCON_PinMuxSet(IOCON, 1,31, PIOFun4_config);
        break; 
        
      case CT1Output0_P0_18:       
        IOCON_PinMuxSet(IOCON, 0, 18, PIOFun3_config);
        break;
        
      case CT1Output0_P1_10:
        IOCON_PinMuxSet(IOCON, 1,10, PIOFun3_config);
        break;    
        
      case CT1Output1_P0_20:        
        IOCON_PinMuxSet(IOCON, 0, 20, PIOFun2_config);
        break;
        
      case CT1Output1_P1_12:
        IOCON_PinMuxSet(IOCON, 1,12, PIOFun3_config);
        break; 
        
      case CT1Output2_P0_23: 
        IOCON_PinMuxSet(IOCON, 0,23, PIOFun2_config);
        break;
        
      case CT1Output2_P1_14:
        IOCON_PinMuxSet(IOCON, 1,14, PIOFun3_config);  
        break;      
        
      case CT2Output0_P0_10: 
        IOCON_PinMuxSet(IOCON, 0,10, PIOFun3_config);
        break;
        
      case CT2Output0_P1_5:
        IOCON_PinMuxSet(IOCON, 1, 5, PIOFun3_config);    
        break;     
        
      case CT2Output1_P1_4: 
        IOCON_PinMuxSet(IOCON, 1, 4, PIOFun3_config);
        break;
        
      case CT2Output1_P1_6:
        IOCON_PinMuxSet(IOCON, 1, 6, PIOFun3_config);  
        break;      
        
      case CT2Output2_P0_11: 
        IOCON_PinMuxSet(IOCON, 0,11, PIOFun2_config);
        break;
        
      case CT2Output2_P1_7:
        IOCON_PinMuxSet(IOCON, 1,7, PIOFun3_config);
        break;      
        
      case CT3Output0_P0_5: 
        IOCON_PinMuxSet(IOCON, 0, 5, PIOFun3_config);
        break;      
        
      case CT3Output1_P1_19: 
        IOCON_PinMuxSet(IOCON, 1, 19, PIOFun3_config); 
        break;      
        
      case CT3Output2_P0_27: 
        IOCON_PinMuxSet(IOCON, 0,27, PIOFun3_config);
        break;
        
      case CT3Output2_P1_21:
        IOCON_PinMuxSet(IOCON, 1,21, PIOFun3_config);
        break;   
        
      case CT4Output0_P0_6: 
        IOCON_PinMuxSet(IOCON, 0, 6, PIOFun3_config);
        break;      

      default:
        break;
    }           
}

/*!
  * @brief    CTIMER 脈沖計數管腳初始化
  *
  * @param    channel  : 脈沖捕獲通道
  *
  * @return   無
  *
  * @note     内部調用
  *
  * @see      CTIMER_CAPPinInit(CTInput0_P0_1); //初始化P0_1 管腳複用為CTIMER輸入管教
  * 
  * @date     2019/10/21 星期一
  */
void CTIMER_CAPPinInit(CTIMER_InputChannel_t channel)
{
    uint32_t PIOFun2_config = FUNC2|MODE_Up|MODE_GPIO|INVERT_Disable|DIGIMODE_Digital|FILTER_Disable;
    uint32_t PIOFun3_config = FUNC3|MODE_Up|MODE_GPIO|INVERT_Disable|DIGIMODE_Digital|FILTER_Disable;
    
    /* 開啟 時鐘 */
    CLOCK_EnableClock(kCLOCK_Iocon);
    
    switch(channel)
    {
      case  CTInput0_P0_1:        
        IOCON_PinMuxSet(IOCON, 0, 1, PIOFun3_config);     
        break;     
        
      case  CTInput4_P1_9:       
        IOCON_PinMuxSet(IOCON, 1, 9, PIOFun3_config);
        break;      
        
      case  CTInput6_P1_13:       
        IOCON_PinMuxSet(IOCON, 1,13, PIOFun3_config);
        break;      
        
      case  CTInput14_P1_20:       
        IOCON_PinMuxSet(IOCON, 1,20, PIOFun3_config);
        break;     
        
      case  CTInput2_P1_0:       
        IOCON_PinMuxSet(IOCON, 1, 0, PIOFun3_config);
        break;      
        
      case  CTInput4_P0_16:       
        IOCON_PinMuxSet(IOCON, 0,16, PIOFun3_config);
        break;      
        
      case  CTInput10_P0_10:       
        IOCON_PinMuxSet(IOCON, 0,10, PIOFun2_config);
        break;
        
      case  CTInput16_P0_15:       
        IOCON_PinMuxSet(IOCON, 0,15, PIOFun3_config);
        break;
        
      case  CTInput3_P1_1:       
        IOCON_PinMuxSet(IOCON, 1,1,  PIOFun3_config);
        break;
     
      case  CTInput14_P0_26:       
        IOCON_PinMuxSet(IOCON, 0,26, PIOFun3_config);
        break;
      
      case  CTInput11_P0_28:       
        IOCON_PinMuxSet(IOCON, 0,28, PIOFun3_config);
        break;  
        
      case  CTInput3_P1_26:       
        IOCON_PinMuxSet(IOCON, 1,26, PIOFun3_config);
        break;
        
      case  CTInput8_P0_24:       
        IOCON_PinMuxSet(IOCON, 0,24, PIOFun3_config);
        break;
        
      case  CTInput0_P0_13:       
        IOCON_PinMuxSet(IOCON, 0,13, PIOFun3_config);
        break;
      
      case  CTInput1_P0_14:       
        IOCON_PinMuxSet(IOCON, 0,14, PIOFun3_config);
        break;
        
      case  CTInput2_P1_28:       
        IOCON_PinMuxSet(IOCON, 1,28, PIOFun3_config);
        break;
        
      case  CTInput15_P0_20:       
        IOCON_PinMuxSet(IOCON, 0,20, PIOFun3_config);
        break;
        
      case  CTInput15_P0_22:       
        IOCON_PinMuxSet(IOCON, 0,22, PIOFun3_config);
        break;
       
      case  CTInput1_P0_2:       
        IOCON_PinMuxSet(IOCON, 0, 2, PIOFun2_config);
        break;
       
      case  CTInput7_P1_15:       
        IOCON_PinMuxSet(IOCON, 1,15, PIOFun3_config);
        
      case  CTInput12_P0_4:       
        IOCON_PinMuxSet(IOCON, 0, 4, PIOFun3_config);
        
      case  CTInput13_P0_6:       
        IOCON_PinMuxSet(IOCON, 0, 6, PIOFun2_config);
        
      case  CTInput5_P1_11:       
        IOCON_PinMuxSet(IOCON, 1,11, PIOFun3_config);
        break;
      default:
        break;
    }   

}
           
/*!
  * @file     LQ_CTIME.h
  *
  * @brief    CTIME驅動檔案
  *
  * @company  北京龍邱智能科技
  *
  * @author   LQ-005
  *
  * @note     LPC55S69有5個32位的CTIME 
  *
  * @version  V1.1  2019/12/06 優化注釋 Doxygen
  *
  * @Software IAR8.32 or MDK5.28
  *
  * @par URL  http://shop36265907.taobao.com
  *           http://www.lqist.cn
  *
  * @date     2019/10/18 星期五
  */ 
#ifndef __LQ_CTIME_H
#define __LQ_CTIME_H

#include "stdint.h"
#include "LQ_GPIO.h"


/** 
  * @brief CTIMER子產品 PWM輸出通道
  * @note  CTIMER 用做PWM輸出通道 一個CTIMER子產品隻能用作脈沖計數和PWM輸出中的一種
  */ 
typedef enum  
{
    //CTIMER PWM通道 ,一行最多選一個(一個CT最多輸出3路周期相同的PWM,四個通道中通道3用作周期通道)     
    CT0Output0_P0_0 = 1 + 0x0000, CT0Output0_P0_30 = 2 + 0x0000,  /*!< CTIME0 PWM輸出通道0管腳  */    
    CT0Output1_P0_3 = 1 + 0x0100, CT0Output1_P0_31 = 2 + 0x0100,  /*!< CTIME0 PWM輸出通道1管腳  */       
    CT0Output2_P0_19= 1 + 0x0200, CT0Output2_P1_31 = 2 + 0x0200,  /*!< CTIME0 PWM輸出通道2管腳  */       
 
    CT1Output0_P0_18= 1 + 0x1000, CT1Output0_P1_10 = 2 + 0x1000,  /*!< CTIME1 PWM輸出通道0管腳  */   
    CT1Output1_P0_20= 1 + 0x1100, CT1Output1_P1_12 = 2 + 0x1100,  /*!< CTIME1 PWM輸出通道1管腳  */   
    CT1Output2_P0_23= 1 + 0x1200, CT1Output2_P1_14 = 2 + 0x1200,  /*!< CTIME1 PWM輸出通道2管腳  */   

    CT2Output0_P0_10= 1 + 0x2000, CT2Output0_P1_5  = 2 + 0x2000,  /*!< CTIME2 PWM輸出通道0管腳  */  
    CT2Output1_P1_6 = 1 + 0x2100, CT2Output1_P1_4  = 2 + 0x2100,  /*!< CTIME2 PWM輸出通道1管腳  */  
    CT2Output2_P1_7 = 1 + 0x2200, CT2Output2_P0_11 = 2 + 0x2200,  /*!< CTIME2 PWM輸出通道2管腳  */
    
    CT3Output0_P0_5 = 1 + 0x3000,                                 /*!< CTIME3 PWM輸出通道0管腳  */
    CT3Output1_P1_19= 1 + 0x3100,                                 /*!< CTIME3 PWM輸出通道1管腳  */
    CT3Output2_P0_27= 1 + 0x3200, CT3Output2_P1_21 = 2 + 0x3200,  /*!< CTIME3 PWM輸出通道2管腳  */
    
    CT4Output0_P0_6= 1 + 0x4000,                                  /*!< CTIME4 PWM輸出通道0管腳  */
    
} CTIMER_OutputChannel_t;



/** 
  * @brief CTIMER子產品 脈沖計數通道
  * @note  CTIMER 子產品 脈沖捕獲通道 
  * @note  CTIMER 子產品的輸入管腳并不是直接CTIMER連接配接的  而是通過INPUTMUX子產品連接配接的
  * @note  CTIMER計數器 ---  INPUTMUX輸入多路複用子產品17路通道  ----  晶片外部管腳
  * @note  簡單說 就是CTIMER的捕獲通道每個都可以與 INPUTMUX子產品的17路通道相連結
  * @note  INPUTMUX子產品的17路通道相連結的管腳如下
  */ 
typedef enum
{
    CTInput0_P0_1  = 0x0000 + 1,  CTInput0_P0_13 = 0x0000 + 2,     /*!< INPUTMUX—CTIMER 輸入通道0管腳  */  
    CTInput1_P0_14 = 0x0100 + 1,  CTInput1_P0_2  = 0x0100 + 2,     /*!< INPUTMUX—CTIMER 輸入通道1管腳  */  
    CTInput2_P1_0  = 0x0200 + 1,  CTInput2_P1_28 = 0x0200 + 2,     /*!< INPUTMUX—CTIMER 輸入通道2管腳  */  
    CTInput3_P1_1  = 0x0300 + 1,  CTInput3_P1_26 = 0x0300 + 2,     /*!< INPUTMUX—CTIMER 輸入通道3管腳  */  
    CTInput4_P1_9  = 0x0400 + 1,  CTInput4_P0_16 = 0x0400 + 2,     /*!< INPUTMUX—CTIMER 輸入通道4管腳  */  
    CTInput5_P1_11 = 0x0500 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道5管腳  */  
    CTInput6_P1_13 = 0x0600 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道6管腳  */  
    CTInput7_P1_15 = 0x0700 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道7管腳  */  
    CTInput8_P0_24 = 0x0800 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道8管腳  */  
    CTInput9_P0_25 = 0x0900 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道9管腳  */  
    CTInput10_P0_10= 0x0A00 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道10管腳  */  
    CTInput11_P0_28= 0x0B00 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道11管腳  */  
    CTInput12_P0_4 = 0x0C00 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道12管腳  */  
    CTInput13_P0_6 = 0x0D00 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道13管腳  */  
    CTInput14_P1_20= 0x0E00 + 1,  CTInput14_P0_26= 0x0E00 + 2,     /*!< INPUTMUX—CTIMER 輸入通道14管腳  */  
    CTInput15_P0_20= 0x0F00 + 1,  CTInput15_P0_22= 0x0F00 + 2,     /*!< INPUTMUX—CTIMER 輸入通道15管腳  */  
    CTInput16_P0_15= 0x1000 + 1,                                   /*!< INPUTMUX—CTIMER 輸入通道16管腳  */  
    
} CTIMER_InputChannel_t;
   
/**********************************  CTIMER子產品 結束 ***************************************/


/*! CTIMER 最大占空比 可自行修改 */
#define  CMTER_PWM_MAX    10000


/*!
  * @brief    初始化CTIMER為PWM輸出功能
  *
  * @param    matchChannel   :    CTIMER通道  LQ_CTIMER.h中枚舉體
  * @param    duty           :    占空比 * CMTER_PWM_MAX
  * @param    pwmFreq_Hz     :    頻率
  *
  * @return   無
  *
  * @note     一個CTIMER子產品隻能用作脈沖計數和PWM輸出的一種
  * @note     一個CTIMER子產品最多隻能輸出3路PWM頻率相同的PWM波
  *
  * @see      CTIMER_InitPwmConfig(CT0Outpute0_P0_0, 5000, 100);//初始化P0_0 作為CTIMER0的通道0 的PWM輸出口 頻率100Hz 占空比 百分之(5000/CMTER_PWM_MAX)*100
  *
  * @date     2019/5/7 星期二
  */ 
void CTIMER_InitPwmConfig(CTIMER_OutputChannel_t matchChannel,uint32_t duty,uint32_t pwmFreq_Hz);



/*!
  * @brief    CTIMER 更新PWM占空比
  *
  * @param    matchChannel   :    CTIMER通道
  * @param    duty           :    占空比 * CMTER_PWM_MAX
  *
  * @return   無
  *
  * @note     使用前請先初始化對應通道
  *
  * @see      CTIMER_SetDuty(CT0Outpute0_P0_0, 4000); //設定P0_0 通道 PWM占空比 百分之 百分之(4000/CMTER_PWM_MAX)*100 
  *
  * @date     2019/5/7 星期二
  */
void CTIMER_SetDuty(CTIMER_OutputChannel_t matchChannel, uint32_t duty);



/*!
  * @brief    初始化CTIMER 作為脈沖計數功能
  *
  * @param    base     : CTIMER0 - CTIMER4
  * @param    channel  : 輸入脈沖計數通道
  *
  * @return   無
  *
  * @note     LPC55S69隻能用帶方向編碼器  
  *
  * @see      CTIMER_InitCapConfig(CTIMER0, CTInput0_P0_1);//初始化CTIMER0 為脈沖捕獲功能 使用P0_1管腳捕獲脈沖
  *
  * @date     2019/10/21 星期一
  */
void CTIMER_InitCapConfig(CTIMER_Type *base, CTIMER_InputChannel_t channel);



/*!
  * @brief    CTIMER 得到計數值
  *
  * @param    base        : CTIMER0 - CTIMER4
  * @param    pin         : 方向管腳 DIR
  *
  * @return   脈沖計數值
  *
  * @note     使用前需要對CTMIE初始化 方向管腳也需要初始化
  *
  * @see      CTIMER_GetCounter(CTIMER0, P1_11); //擷取CTIMER0脈沖計數值 P1_11接編碼器方向管腳(DIR)
  *
  * @date     2019/5/7 星期二
  */
uint32_t CTIMER_GetCounter(CTIMER_Type *base, GPIO_Name_t pin);


/*!
  * @brief    CTIMER 清除計數器
  *
  * @param    base        : CTIMER0 - CTIMER4
  *
  * @return   脈沖計數值
  *
  * @note     使用前需要對CTMIE初始化
  *
  * @see      CTIMER_ClearCounter(CTIMER0); //清除CTIMER0脈沖計數值
  *
  * @date     2019/5/7 星期二
  */
void CTIMER_ClearCounter(CTIMER_Type *base);


/*!
  * @brief    CTIMER PWM輸出管腳初始化
  *
  * @param    CTn_CHn  : PWM通道
  *
  * @return   無
  *
  * @note     内部調用
  *
  * @see      CTIME_PWMPinInit(CT0Output0_P0_0); //初始化P0_0 為CTIMER0 的通道0
  *
  * @date     2019/10/21 星期一
  */
void CTIME_PWMPinInit(CTIMER_OutputChannel_t CTn_CHn);



/*!
  * @brief    CTIMER 脈沖計數管腳初始化
  *
  * @param    channel  : 脈沖捕獲通道
  *
  * @return   無
  *
  * @note     内部調用
  *
  * @see      CTIMER_CAPPinInit(CTInput0_P0_1); //初始化P0_1 管腳複用為CTIMER輸入管教
  * 
  * @date     2019/10/21 星期一
  */
void CTIMER_CAPPinInit(CTIMER_InputChannel_t channel);
#endif

           

設定Doxygen

Doxygen生成注釋文檔
Doxygen生成注釋文檔
Doxygen生成注釋文檔
Doxygen生成注釋文檔
Doxygen生成注釋文檔
Doxygen生成注釋文檔
Doxygen生成注釋文檔
Doxygen生成注釋文檔
Doxygen生成注釋文檔
Doxygen生成注釋文檔
Doxygen生成注釋文檔
Doxygen生成注釋文檔
Doxygen生成注釋文檔
Doxygen生成注釋文檔

重新編譯OK

Doxygen生成注釋文檔

繼續閱讀