Freescale MKL26Z256xxx4初始化模板
来源:互联网 发布:从淘宝网上买劲霸男装 编辑:程序博客网 时间:2024/05/21 17:21
IAR配置:工程选项--通用选项:型号 Freescale MKL26Z256xxx4库设置:library 选 fullC/C++编译 preprocessor中:$PROJ_DIR$\..\..\App$PROJ_DIR$\..\..\App\Inc$PROJ_DIR$\..\..\Board\Inc$PROJ_DIR$\..\..\Chip\inc$PROJ_DIR$\..\..\Chip\inc\IAR$PROJ_DIR$\..\..\Chip\inc\kinetis$PROJ_DIR$\..\..\Lib\CMSIS\Inc$PROJ_DIR$\..\..\Lib\SD_CARD定义符号DEBUGMKL26Z4ARM_MATH_CM0PLUS链接器中:override default选中导入 $PROJ_DIR$\config files\256KB_Pflash.icf (此文件可以外加)延时函数=============================================================================================================DELAY_MS(500); //延时500毫秒(自动获取空闲定时器)DELAY_US(500); //延时500微秒DELAY(); //延时500毫秒lptmr_delay_ms(1000); //使用LPTMR延时: 1000mspit_delay_ms(PIT0, 1000); //使用PIT0延时: 1000mssystick_delay_ms(1000); //使用SysTick延时: 1000msGPIO配置=============================================================================================================gpio_init(PTD4,GPO,1); //GPIO初始化函数(必要!)参数1:引脚 参数2:输入输出选择(GPI入GPO出) 参数3:0为低1为高gpio_set(PTD4,0); //设置IO口电平gpio_ddr(PTD4,GPO); //1:引脚,2:输入输出gpio_turn(PTD4); //翻转电平gpio_get(PTD4); //获取端口电平GPIO_SET_NBIT(4,PTD4,9); //GPIO4~7(后4个)的输出电平情况是1001,转换为十进制为9GPIO_GET_NBIT(4,PTD4); //获取4~7电平内置LED控制函数======================================================================================================LED的对应引脚为:PTD4,PTD5,PTD6,PTD7led_init(LED0); //初始化PTD4为LED0led(LED0, LED_ON); //LED0 亮led_turn(LED0); //LED1翻转led(LED0, LED_OFF); //LED0 灭内置按键控制===========================================================================================================KEY引脚PTC7, PTC8, PTA4, PTC6, PTE26, PTC9, PTC16, PTC17用法:key_init(KEY_B);if(key_check(KEY_B) == KEY_DOWN) //检测key状态(带延时消抖){ printf("\n按键按下"); //通过串口助手查看,提示按键按下 DELAY_MS(500); }定时扫描按键:全局定义量:char * keyname[KEY_MAX]={"KEY_U","KEY_D","KEY_L","KEY_R","KEY_A","KEY_B","KEY_START","KEY_START"};//定义8个key引脚的别名(按顺序)char * keystatus[3]={"按下","弹起","长按"}; //定义key的3个状态别名(此为唯一顺序)main中:KEY_MSG_t keymsg; //定义消息结构体,名为keymsgkey_init(KEY_MAX); //初始化8个按键lptmr_timing_ms(10); // LPTMR 定时 10msset_vector_handler(LPTMR_VECTORn,lptmr_hander); // 设置中断服务函数到中断向量表里enable_irq(LPTMR_IRQn); // 使能LPTMR中断while(1) { while(get_key_msg(&keymsg) == 1) //如果KEY从引脚中得到消息(变化) { printf("\n按键%s%s",keyname[keymsg.key],keystatus[keymsg.status]); //.key为结构体指向引脚,.status为消息 } DELAY_MS(500); //可以 调 延时时间,除非 FIFO满溢出,不然不会出现漏识别按键 }全局函数:void lptmr_hander(void){ LPTMR0_CSR |= LPTMR_CSR_TCF_MASK; //清除LPT比较标志位 //下面由用户添加实现代码 key_IRQHandler(); //内置按键扫描函数(需要配置10ms一次),扫描8个脚}串口=================================================================================================================内置UART引脚定义:#define UART0_RX_PIN PTA15 //可选范围:PTA1、PTA15、PTB16、PTD6、PTE21#define UART0_TX_PIN PTA14 //PTA2、PTA14、PTB17、PTD7、PTE20#define UART1_RX_PIN PTC3 //PTA18、PTE1、PTC3 PTA18不要用 (与晶振冲突)#define UART1_TX_PIN PTC4 //PTA19、PTE0、PTC4 PTA19不要用 (与晶振冲突)#define UART2_RX_PIN PTD2 //PTD2、PTD4、PTE17、PTE23#define UART2_TX_PIN PTD3 //PTD3、PTD5、PTE16、PTE22uart_init(UART0,115200); //初始化串口(由于 printf 函数 所用的端口就是 UART0,已经初始化了,因此此处不需要再初始化)uart_putstr(UART0 ,"\n\n\n接收数据,并进行发送:"); //发送字符串if(uart_query (UART0) != 0) //查询是否接收到数据(是则进入if)uart_getchar (UART0,&ch); //等待接收一个数据,保存到 ch里uart_putchar(UART0, ch); //发送1个字节if(uart_querychar (UART0, &ch) != 0) //uart_getchar 和 uart_querychar 的区别在于 ,前者 需要等待接收到数据,后者查询是否接收到,接收到就接收,接收不到就退出char str[100];if(uart_querystr (UART0,str,sizeof(str)-1) != 0) //查询是否接收到字符串,是则存入str进入ifUART中断用法:set_vector_handler(UART0_VECTORn,uart0_handler); // 设置中断服务函数到中断向量表里uart_rx_irq_en (UART0); //开串口接收中断void uart0_handler(void) //中断函数,放到全局区{ char ch; if(uart_query (UART0) == 1) //接收数据寄存器满 { //用户需要处理接收数据 uart_getchar (UART0, &ch); //无限等待直到接受1个字节 uart_putchar (UART0 , ch); //发送字符串 }}ADC采集================================================================================================================adc_init(ADC0_DM0); //ADC初始化 ADC通道别名表: ADC0_DP0 = 0, // PTE20 ADC0_SE0 = 0, ADC0_DP1 = 1, // PTE16 ADC0_SE1 = 1, ADC0_DP2 = 2, // PTE18 ADC0_SE2 = 2, ADC0_DP3 = 3, // PTE22 ADC0_SE3 = 3, ADC0_DM0 = 4, // PTE21 ADC0_SE4a= 4, ADC0_DM1 = 5, // PTE17 ADC0_SE5a= 5, ADC0_DM2 = 6, // PTE19 ADC0_SE6a= 6, ADC0_DM3 = 7, // PTE23 ADC0_SE7a= 7,uint16 var;var = adc_once(ADC0_DM0, ADC_8bit); //一次采样printf("\nADC采样结果为:%d,电压为%dmV",var,(var*3300)/256);DAC模拟输出===========================================================================================================DAC0_OUT_PIN PTE30dac_init(DAC0);result =(uint16) (((sin(val)+1.0)/2.0 ) *((1<<12) - 1));//sin 的取值范围是 -1 ~ 1 ,加1 后变成 0~2 ,再 除以 2 确保范围在 0~1 之间,DAC 是 12bitdac_out(DAC0, result); //输出 DAC ,可通过示波器看到正弦波LPTMR定时中断=========================================================================================================lptmr_timing_ms(1000); //初始化LPTMR,定时时间为: 1000msset_vector_handler(LPTMR_VECTORn ,LPTMR_IRQHandler); //设置LPTMR的中断服务函数为 LPTMR_IRQHandlerenable_irq (LPTMR_IRQn); //使能LPTMR中断void LPTMR_IRQHandler(void){ led_turn(LED0); //闪烁 LED0 LPTMR_Flag_Clear(); //清中断标志位}LPTMR计时=============================================================================================================lptmr_time_start_ms(); //开始计时(已经经过失能清零使能)timevar = lptmr_time_get_ms(); //停止计时,获取计时时间,保存到变量中,单位为ms,返回 0xffffffff 表示溢出lptmr_time_close(); //先关了LPT,自动清计数器的值,清空溢出标记LPTMR脉冲计数=========================================================================================================LPTMR引脚:LPT0_ALT1 = 1, // PTA19LPT0_ALT2 = 2 // PTC5#define INT_COUNT 0xFFFF lptmr_pulse_init(LPT0_ALT2,INT_COUNT, LPT_Rising); //初始化脉冲计数器,用LPT0_ALT2,即PTC5输入,每隔INT_COUNT产生中断(需要开中断才能产生中断),上升沿触发lptmr_pulse_clean(); //清空脉冲计数器计算值(马上清空,这样才能保证计数值准确)count=lptmr_pulse_get(); //保存脉冲计数器计算值PIT定时中断===========================================================================================================void PIT_IRQHandler(void){ //PIT0 和 PIT1 共用相同中断号,所以两者都共用相同中断函数,需要根据标志位来判断是由哪个PIT触发中断 if(PIT_TFLG(PIT0) == 1 ) //判断是否 PIT0 进入中断 { led_turn(LED0); //闪烁 LED0 PIT_Flag_Clear(PIT0); //清中断标志位 }}pit_init_ms(PIT0, 1000); //初始化PIT0,定时时间为: 1000msset_vector_handler(PIT_VECTORn ,PIT_IRQHandler); //设置PIT0的中断服务函数为 PIT_IRQHandlerenable_irq (PIT_IRQn); //使能PIT0中断PIT计时===========================================================================================================pit_time_start (PIT0); //开始计时timevar = pit_time_get_us (PIT0); //获取计时时间(微秒)//pit_time_get_ms(PIT0); //毫秒//pit_close (PIT0); //关闭PIT(可选择是否关闭)systick================================================================================================================延时:systick_delay_ms(1000); //使用SysTick延时: 1000ms中断:systick_timing_ms(100); //初始化滴答定时器,定时时间为: 100msset_vector_handler(SysTick_VECTORn ,SysTick_IRQHandler); //设置滴答定时器的中断服务函数为 SysTick_IRQHandlervoid SysTick_IRQHandler(void){ led_turn(LED0); //闪烁 LED0}TPM_PMW================================================================================================================tpm_pwm_init(TPM0, TPM_CH3,200*1000,30); //初始化 TPM PWM ,使用 TPM0_CH3,频率为200k ,占空比为 30 /TPM0_PRECISON// port_cfg.h 里 配置 TPM0_CH3 对应为 PTE30tpm_pwm_duty(TPM0, TPM_CH3,30); //设置占空比 为 30 / TPM0_PRECISON内置TMP引脚定义:#define TPM0_CH0_PIN PTE24 //可选范围:PTE24、PTA3、PTC1、PTD0 PTA3不要用(与SWD冲突)#define TPM0_CH1_PIN PTE25 //PTE25、PTA4、PTC2、PTD1#define TPM0_CH2_PIN PTE29 //PTE29、PTA5、PTC3、PTD2#define TPM0_CH3_PIN PTE30 //PTE30、PTA6、PTC4、PTD3#define TPM0_CH4_PIN PTE31 //PTE31、PTA7、PTC8、PTD4#define TPM0_CH5_PIN PTE26 //PTE26、PTA0、PTC9、PTD5 PTA0不要用(与SWD冲突)#define TPM1_CH0_PIN PTA12 //PTA12、PTB0、PTE20#define TPM1_CH1_PIN PTA13 //PTA13、PTB1、PTE21 #define TPM2_CH0_PIN PTA1 //PTA1、PTB2、PTB18、PTE22#define TPM2_CH1_PIN PTA2 //PTA2、PTB3、PTB19、PTE23TPM脉冲计数=============================================================================================================引脚定义:#define TPM_CLKIN0_PIN PTC12 //可选范围:PTA18、PTB16、PTC12、PTE16、PTE29 PTA18不要用 (与晶振冲突)#define TPM_CLKIN1_PIN PTC13 //PTA19、PTB17、PTC13、PTE17、PTE30 PTA19不要用 (与晶振冲突)tpm_pulse_init(TPM2,TPM_CLKIN0,TPM_PS_1); //初始化 TPM2 为脉冲累加,输入管脚为 TPM_CLKIN0_PIN ,分频系数为 1// TPM0~TPM2 可任意选择 TPM_CLKIN0 /TPM_CLKIN1 来作为计数口,例如此处是 TPM2选择TPM_CLKIN0,也可以 TPM1选择TPM_CLKIN0等tpm_pulse_clean(TPM2); //清空脉冲计数器计算值(开始新的计数)count = tpm_pulse_get(TPM2); //保存脉冲计数器计算值,返回整数flash====================================================================================================#define SECTOR_NUM (FLASH_SECTOR_NUM-1) //尽量用最后面的扇区,确保安全uint32 data32;uint16 data16;uint8 data8;flash_init(); //初始化flashflash_erase_sector(SECTOR_NUM); //擦除扇区if( 1 == flash_write(SECTOR_NUM, 0, 0x12345678) ) //写入数据到扇区,偏移地址为0,必须一次写入4字节 //if是用来检测是否写入成功,写入成功了就读取 { data32 = flash_read(SECTOR_NUM, 0, uint32); //读取4字节 printf("一次读取32位的数据为:0x%08x\n", data32); data16 = flash_read(SECTOR_NUM, 0, uint16); //读取2字节 printf("一次读取16位的数据为:0x%04x\n", data16); data8 = flash_read(SECTOR_NUM, 0, uint8); //读取1字节 printf("一次读取8位的数据为:0x%02x\n", data8); }
0 0
- Freescale MKL26Z256xxx4初始化模板
- Freescale mx27 DDR 初始化代码分析
- Freescale mx27 DDR 初始化代码分析
- Freescale k60的GPIO的操作 (初始化)
- DIV+CSS初始化模板
- STM32F103官方初始化模板
- Android通用初始化Activity模板
- Android通用初始化Activity模板
- 重写初始化函数的模板
- 类模板零值初始化
- Android异步消息初始化模板
- Freescale 加速度计
- 12.27 freescale
- Freescale Smartcar
- freescale LTIB
- freescale UBOOT
- 模板的静态变量的初始化
- 随笔记录-模板类成员变量初始化
- java中gui编程ActionListener和itemListener
- 用xshell在Windows与Linux间传输文件
- 数据结构基础(5)--C语言实现循环队列--静态
- web安全测试之IBM Rational AppScan安全测试的使用
- 为交换机配置IP
- Freescale MKL26Z256xxx4初始化模板
- linux(centos)搭建SVN服务器
- android studio 开发(一)
- fastdfs断点续传
- Leetcode 41 First Missing Positive
- SolrCloud如何创建跟新索引信息
- java中gui实现跟踪鼠标
- Opencv—CvvImage的使用 opencv2.1后版本
- mysql安装完成之后,没有在服务启动列表出现?