常用用户函数列举
学习英飞凌TC-264单片机时采用了逐飞的开源库,现将常用库函数总结如下:
//-------------------------------------------------------------------------------------------------------------------
// @brief PWM初始化
// @param pwmch PWM通道号及引脚
// @param freq PWM频率
// @param duty PWM占空比
// @return void
// Sample usage: gtm_pwm_init(ATOM0_CH7_P02_7, 50, 1000); //ATOM 0模块的通道7 使用P02_7引脚输出PWM PWM频率50HZ 占空比百分之1000/GTM_ATOM0_PWM_DUTY_MAX*100
// GTM_ATOM0_PWM_DUTY_MAX宏定义在zf_gtm_pwm.h 默认为10000
//-------------------------------------------------------------------------------------------------------------------
void gtm_pwm_init(ATOM_PIN_enum pwmch, uint32 freq, uint32 duty);
//-------------------------------------------------------------------------------------------------------------------
// @brief PWM占空比设置
// @param pwmch PWM通道号及引脚
// @param duty PWM占空比
// @return void
// Sample usage: pwm_duty(ATOM0_CH7_P02_7, 5000);//设置占空比为百分之5000/GTM_ATOM0_PWM_DUTY_MAX*100
// GTM_ATOM0_PWM_DUTY_MAX宏定义在zf_gtm_pwm.h 默认为10000
//-------------------------------------------------------------------------------------------------------------------
void pwm_duty(ATOM_PIN_enum pwmch, uint32 duty);
//-------------------------------------------------------------------------------------------------------------------
// @brief 校验FLASH是否有数据
// @param sector_num 需要写入的扇区编号 参数范围0-11
// @param page_num 当前扇区页的编号 参数范围0-1023
// @return 返回1有数据,返回0没有数据,如果需要对有数据的区域写入新的数据则应该对所在扇区进行擦除操作
// @since v1.0
// Sample usage: flash_check(0,0);//校验0号扇区,第0页是否有数据
//-------------------------------------------------------------------------------------------------------------------
uint8 flash_check(uint32 sector_num, uint32 page_num);
//-------------------------------------------------------------------------------------------------------------------
// @brief 擦除扇区
// @param sector_num 需要写入的扇区编号 参数范围0-11
// @return void
// @since v1.0
// Sample usage: eeprom_erase_sector(0);
//-------------------------------------------------------------------------------------------------------------------
void eeprom_erase_sector(uint32 sector_num);
//-------------------------------------------------------------------------------------------------------------------
// @brief 编程一页
// @param sector_num 需要写入的扇区编号 参数范围0-11
// @param page_num 需要写入的页编号 参数范围0-1023
// @param buf 需要写入的数据地址 传入的数组类型必须为uint32
// @return void
// @since v1.0
// Sample usage: eeprom_page_program(0,0, &buf);
//-------------------------------------------------------------------------------------------------------------------
void eeprom_page_program(uint32 sector_num, uint32 page_num, uint32 *buf);
//-------------------------------------------------------------------------------------------------------------------
// @brief eru触发dma初始化
// @param dma_ch 选择DMA通道
// @param source_addr 设置源地址
// @param destination_addr 设置目的地址
// @param eru_pin 设置触发的eru通道
// @param trigger 设置触发方式
// @param dma_count 设置dma搬移次数
// @return void
// Sample usage:
//-------------------------------------------------------------------------------------------------------------------
uint8 eru_dma_init(IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, ERU_PIN_enum eru_pin, TRIGGER_enum trigger, uint16 dma_count);
//-------------------------------------------------------------------------------------------------------------------
// @brief dma启动
// @param dma_ch 选择DMA通道
// @return void
// Sample usage:
//-------------------------------------------------------------------------------------------------------------------
void dma_start(IfxDma_ChannelId dma_ch);
//-------------------------------------------------------------------------------------------------------------------
// @brief dma停止
// @param dma_ch 选择DMA通道
// @return void
// Sample usage:
//-------------------------------------------------------------------------------------------------------------------
void dma_stop(IfxDma_ChannelId dma_ch);
//-------------------------------------------------------------------------------------------------------------------
// @brief eru初始化(gpio中断)
// @param eru_pin 设置eru通道及引脚
// @param trigger 设置触发方式
// @return void
// Sample usage: eru_init(ERU_CH0_REQ0_P15_4, RISING);//eru通道0 使用P10_7引脚,上升沿触发中断
//-------------------------------------------------------------------------------------------------------------------
void eru_init(ERU_PIN_enum eru_pin, TRIGGER_enum trigger);
//-------------------------------------------------------------------------------------------------------------------
// @brief 开启eru中断
// @param eru_pin 设置eru通道及引脚
// @return void
// Sample usage: eru_enable_interrupt(ERU_CH0_REQ0_P15_4);
//-------------------------------------------------------------------------------------------------------------------
void eru_enable_interrupt(ERU_PIN_enum eru_pin);
//-------------------------------------------------------------------------------------------------------------------
// @brief 关闭eru中断
// @param eru_pin 设置eru通道及引脚
// @return void
// Sample usage: eru_disable_interrupt(ERU_CH0_REQ0_P15_4);
//-------------------------------------------------------------------------------------------------------------------
void eru_disable_interrupt(ERU_PIN_enum eru_pin);
//-------------------------------------------------------------------------------------------------------------------
// @brief 获取GPIO基地址
// @param pin 选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
// @return void
// Sample usage: 文件内部使用,用户无需关心
//-------------------------------------------------------------------------------------------------------------------
volatile Ifx_P* get_port(PIN_enum pin);
//-------------------------------------------------------------------------------------------------------------------
// @brief GPIO初始化
// @param pin 选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
// @param dir 引脚的方向 输出:GPO 输入:GPI
// @param dat 引脚初始化时设置的电平状态,输出时有效 0:低电平 1:高电平
// @param pinmode 引脚配置(可设置参数由zf_gpio.h文件内GPIOMODE_enum枚举值确定)
// @return void
// Sample usage: gpio_init(P00_0, GPO, 1, PUSHPULL);//P00_0初始化为GPIO功能、输出模式、输出高电平、推挽输出
// @note 需要特别注意P20_2是不能用于输出的,仅仅只有输入的功能
//-------------------------------------------------------------------------------------------------------------------
void gpio_init(PIN_enum pin, GPIODIR_enum dir, uint8 dat, GPIOMODE_enum pinmode);
//-------------------------------------------------------------------------------------------------------------------
// @brief GPIO引脚驱动模式
// @param pin 选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
// @param pin_driver 引脚驱动模式设置
// @return void
// Sample usage: gpio_pin_driver(P00_0, IfxPort_PadDriver_cmosAutomotiveSpeed1)
//-------------------------------------------------------------------------------------------------------------------
void gpio_pin_driver(PIN_enum pin, IfxPort_PadDriver pin_driver);
//-------------------------------------------------------------------------------------------------------------------
// @brief GPIO输出设置
// @param pin 选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
// @param dat 0:低电平 1:高电平
// @return void
// Sample usage: gpio_set(P00_0, 1);//P00_0 输出高电平
//-------------------------------------------------------------------------------------------------------------------
void gpio_set(PIN_enum pin, uint8 dat)
{
if(dat) IfxPort_setPinHigh(get_port(pin), pin&0x1f);
else IfxPort_setPinLow(get_port(pin), pin&0x1f);
}
//-------------------------------------------------------------------------------------------------------------------
// @brief GPIO状态获取
// @param pin 选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
// @return uint8 0:低电平 1:高电平
// Sample usage: uint8 status = gpio_get(P00_0);//获取P00_0引脚电平
//-------------------------------------------------------------------------------------------------------------------
uint8 gpio_get(PIN_enum pin);
//-------------------------------------------------------------------------------------------------------------------
// @brief GPIO方向设置
// @param pin 选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
// @param dir 引脚的方向 输出:GPO 输入:GPI
// @param pinmode 引脚配置(可设置参数由zf_gpio.h文件内GPIOMODE_enum枚举值确定)
// @return void
// Sample usage: gpio_dir(P00_0, GPO, PUSHPULL);//设置P00_0为推挽输出模式
//-------------------------------------------------------------------------------------------------------------------
void gpio_dir(PIN_enum pin, GPIODIR_enum dir, GPIOMODE_enum pinmode);
//-------------------------------------------------------------------------------------------------------------------
// @brief GPIO 翻转
// @param pin 选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定)
// @return void
// Sample usage: gpio_toggle(P00_0);//P00_0引脚电平翻转
//-------------------------------------------------------------------------------------------------------------------
void gpio_toggle(PIN_enum pin);
//-------------------------------------------------------------------------------------------------------------------
// @brief GPT12初始化(编码器采集)
// @param gptn 选择所使用的GPT12定时器
// @param count_pin 设置计数引脚
// @param dir_pin 设置计数方向引脚
// @return void
// Sample usage: gpt12_init(GPT12_T2, GPT12_T2INA_P00_7, GPT12_T2EUDA_P00_8);//使用T2定时器 P00_7引脚进行计数 计数方向使用P00_8引脚
//-------------------------------------------------------------------------------------------------------------------
void gpt12_init(GPTN_enum gptn, GPT_PIN_enum count_pin, GPT_PIN_enum dir_pin);
//-------------------------------------------------------------------------------------------------------------------
// @brief GPT12计数读取(编码器采集)
// @param gptn 选择所使用的GPT12定时器
// @return int16
// Sample usage: speed = gpt12_get(GPT12_T2);//使用T2定时器
//-------------------------------------------------------------------------------------------------------------------
int16 gpt12_get(GPTN_enum gptn);
//-------------------------------------------------------------------------------------------------------------------
// @brief 清除GPT12计数(编码器采集)
// @param gptn 选择所使用的GPT12定时器
// @return void
// Sample usage: gpt12_clear(GPT12_T2);//使用T2定时器
//-------------------------------------------------------------------------------------------------------------------
void gpt12_clear(GPTN_enum gptn);
//-------------------------------------------------------------------------------------------------------------------
// @brief SPI初始化
// @param spi_n 选择SPI模块(SPI_1-SPI_4)
// @param cs_pin 选择SPI片选引脚
// @param sck_pin 选择SPI时钟引脚
// @param mosi_pin 选择SPI MOSI引脚
// @param miso_pin 选择SPI MISO引脚
// @param mode SPI模式 0:CPOL=0 CPHA=0 1:CPOL=0 CPHA=1 2:CPOL=1 CPHA=0 3:CPOL=1 CPHA=1 //具体细节可自行百度
// @param baud 设置SPI的波特率
// @return void
// Sample usage: spi_init(SPI_2, SPI2_SCLK_P15_3, SPI2_MOSI_P15_5, SPI2_MISO_P15_4, SPI2_CS0_P15_2, 0, 1*1000*1000);//硬件SPI初始化 模式0 波特率为1Mhz
//-------------------------------------------------------------------------------------------------------------------
void spi_init(SPIN_enum spi_n, SPI_PIN_enum sck_pin, SPI_PIN_enum mosi_pin, SPI_PIN_enum miso_pin, SPI_PIN_enum cs_pin, uint8 mode, uint32 baud);
//-------------------------------------------------------------------------------------------------------------------
// @brief SPI发送接收函数
// @param spi_n 选择SPI模块 (SPI_1-SPI_4)
// @param cs_pin 选择SPI片选引脚
// @param modata 发送的数据缓冲区地址
// @param midata 发送数据时接收到的数据的存储地址(不需要接收则传 NULL)
// @param len 发送的字节数
// @param continuous 本次通信是CS是否持续保持有效状态 1:持续保持 0:每传输完一个字节关闭CS(一般设置为1 即可)
// @return void
// @since v2.0
// Sample usage: spi_mosi(SPI_2,SPI2_CS0_P15_2,buf,buf,1,1); //发送buff的内容,并接收到buf里,长度为1字节 通信期间CS持续拉低
//-------------------------------------------------------------------------------------------------------------------
void spi_mosi(SPIN_enum spi_n, SPI_PIN_enum cs_pin, uint8 *modata, uint8 *midata, uint32 len, uint8 continuous);
//------------------------------------以下宏定义用于延时------------------------------------
#define systick_delay_ms(stmn, time) systick_delay(stmn, time*1000000) //设置延时时间 单位ms
#define systick_delay_us(stmn, time) systick_delay(stmn, time*1000) //设置延时时间 单位us
#define systick_delay_ns(stmn, time) systick_delay(stmn, time) //设置延时时间 单位ns
//------------------------------------以下宏定义用于获取当前时间------------------------------------
#define systick_getval_ms(stmn) systick_getval(stmn)/100000 //获取当前计时时间 单位ms
#define systick_getval_us(stmn) systick_getval(stmn)/100 //获取当前计时时间 单位us
#define systick_getval_ns(stmn) systick_getval(stmn)*10 //获取当前计时时间 单位ns
//-------------------------------------------------------------------------------------------------------------------
// @brief systick定时器启动
// @param stmn 选择使用的模块
// @return void
// Sample usage: systick_start(STM0);//记录下当前的时间
//-------------------------------------------------------------------------------------------------------------------
void systick_start(STMN_enum stmn);
//-------------------------------------------------------------------------------------------------------------------
// @brief 获得当前System tick timer的值
// @param stmn 选择使用的模块
// @return uint32 返回从开始到现在的时间(单位10ns)
// Sample usage: uint32 tim = systick_getval(STM0);
//-------------------------------------------------------------------------------------------------------------------
uint32 systick_getval(STMN_enum stmn);
//-------------------------------------------------------------------------------------------------------------------
// @brief 串口初始化
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param baud 串口波特率
// @param tx_pin 串口发送引脚
// @param rx_pin 串口接收引脚
// @return uint32 实际波特率
// Sample usage: uart_init(UART_0,115200,UART0_TX_P14_0,UART0_RX_P14_1); // 初始化串口0 波特率115200 发送引脚使用P14_0 接收引脚使用P14_1
//-------------------------------------------------------------------------------------------------------------------
void uart_init(UARTN_enum uartn, uint32 baud, UART_PIN_enum tx_pin, UART_PIN_enum rx_pin);
//-------------------------------------------------------------------------------------------------------------------
// @brief 串口字节输出
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param dat 需要发送的字节
// @return void
// Sample usage: uart_putchar(UART_0, 0xA5); // 串口0发送0xA5
//-------------------------------------------------------------------------------------------------------------------
void uart_putchar(UARTN_enum uartn, uint8 dat);
//-------------------------------------------------------------------------------------------------------------------
// @brief 串口发送数组
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param *buff 要发送的数组地址
// @param len 发送长度
// @return void
// Sample usage: uart_putbuff(UART_0,&a[0],5);
//-------------------------------------------------------------------------------------------------------------------
void uart_putbuff(UARTN_enum uartn, uint8 *buff, uint32 len);
//-------------------------------------------------------------------------------------------------------------------
// @brief 串口发送字符串
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param *str 要发送的字符串地址
// @return void
// Sample usage: uart_putstr(UART_0,"i lvoe you");
//-------------------------------------------------------------------------------------------------------------------
void uart_putstr(UARTN_enum uartn, const int8 *str);
//-------------------------------------------------------------------------------------------------------------------
// @brief 读取串口接收的数据(whlie等待)
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param *dat 接收数据的地址
// @return void
// Sample usage: uint8 dat; uart_getchar(UART_0,&dat); // 接收串口0数据 存在在dat变量里
//-------------------------------------------------------------------------------------------------------------------
void uart_getchar(UARTN_enum uartn, uint8 *dat);
//-------------------------------------------------------------------------------------------------------------------
// @brief 读取串口接收的数据(查询接收)
// @param uartn 串口模块号(UART_0,UART_1,UART_2,UART_3)
// @param *dat 接收数据的地址
// @return uint8 1:接收成功 0:未接收到数据
// Sample usage: uint8 dat; uart_query(UART_0,&dat); // 接收串口0数据 存在在dat变量里
//-------------------------------------------------------------------------------------------------------------------
uint8 uart_query(UARTN_enum uartn, uint8 *dat);
//-------------------------------------------------------------------------------------------------------------------
// @brief ADC初始化
// @param adcn 选择ADC模块(ADC_0、ADC_1、ADC_2)
// @param ch 选择ADC通道
// @return void
// Sample usage: adc_init(ADC_0, ADC0_CH0_A0);
//-------------------------------------------------------------------------------------------------------------------
void adc_init(VADCN_enum vadc_n, VADC_CHN_enum vadc_chn);
//-------------------------------------------------------------------------------------------------------------------
// @brief ADC转换一次
// @param adcn 选择ADC模块(ADC_0、ADC_1、ADC_2)
// @param ch 选择ADC通道
// @return 转换值
// Sample usage: adc_convert(ADC_0, ADC0_CH0_A0, ADC_12BIT);
//-------------------------------------------------------------------------------------------------------------------
uint16 adc_convert(VADCN_enum vadc_n, VADC_CHN_enum vadc_chn, VADC_RES_enum vadc_res);
//-------------------------------------------------------------------------------------------------------------------
// @brief ADC均值滤波
// @param adcn 选择ADC模块(ADC_0、ADC_1、ADC_2)
// @param ch 选择ADC通道
// @param count 均值滤波次数
// @return 平均转换值
// Sample usage: adc_mean_filter(ADC_0, ADC0_CH0_A0, ADC_12BIT, 5);//采集5次 然后返回平均值
//-------------------------------------------------------------------------------------------------------------------
uint16 adc_mean_filter(VADCN_enum vadc_n, VADC_CHN_enum vadc_chn, VADC_RES_enum vadc_res, uint8 count);