#include "common.h" /********************************************************************************* ************************启明欣欣 STM32F407核心开发板****************************** ********************************************************************************** * 文件名称: common.c * * 文件简述:各个工程所需调用的公共文件 * * 创建日期:2015.03.03 * * 版 本:V1.0 * * 作 者:Clever * * 说 明:包涵数据类型定义、IO口位定义、位段定义与延时函数定义 * ********************************************************************************** *********************************************************************************/ /**************************************************************************** * 名 称: void GPIO_group_OUT(_gpio_group *group,u16 outdata) * 功 能:使用随意16个IO口组成一个16位并行输出口 * 入口参数:*group: 任意16个IO口为元素的结构体指针 outdata: 16位输出数值 * 返回参数:无 * 说 明:outdata从高位开始赋值 ****************************************************************************/ void GPIO_group_OUT(_gpio_group *group,u16 outdata) { u8 t; for(t=0;t<16;t++) { if((outdata&0x8000)>>15) { switch(t) { case 0: group->data15=1; break; case 1: group->data14=1; break; case 2: group->data13=1; break; case 3: group->data12=1; break; case 4: group->data11=1; break; case 5: group->data10=1; break; case 6: group->data9=1; break; case 7: group->data8=1; break; case 8: group->data7=1; break; case 9: group->data6=1; break; case 10: group->data5=1; break; case 11: group->data4=1; break; case 12: group->data3=1; break; case 13: group->data2=1; break; case 14: group->data1=1; break; case 15: group->data0=1; break; } } else { switch(t) { case 0: group->data15=0; break; case 1: group->data14=0; break; case 2: group->data13=0; break; case 3: group->data12=0; break; case 4: group->data11=0; break; case 5: group->data10=0; break; case 6: group->data9=0; break; case 7: group->data8=0; break; case 8: group->data7=0; break; case 9: group->data6=0; break; case 10: group->data5=0; break; case 11: group->data4=0; break; case 12: group->data3=0; break; case 13: group->data2=0; break; case 14: group->data1=0; break; case 15: group->data0=0; break; } } outdata<<=1; } } /**************************************************************************** * 名 称: void GPIO_bits_OUT(GPIO_TypeDef* GPIOx, u8 start_bit, u8 bit_size,u16 outdata) * 功 能:位段操作实现,同一IO口的几位并行输出操作 * 入口参数:* GPIOx: 对应的IO口 * start_bit: 并行输出的起始位 * bit_size: 要并行输出的位数 * 返回参数:无 * 说 明:start_bit: 0~14 bit_size: 1~16 bit_size<=16-start_bit ****************************************************************************/ void GPIO_bits_OUT(GPIO_TypeDef* GPIOx, u8 start_bit, u8 bit_size,u16 outdata) { u8 i=0; u16 bu1=0;u16 middata=1; if( bit_size>(16-start_bit) ) bit_size=16-start_bit; i=start_bit; if(i>0) { while(i--) { bu1+=middata; middata*=2;} } GPIOx->ODR&=( ( (0xffff<ODR|=(outdata<LOAD; //LOAD的值 ticks=nus*fac_us; //需要的节拍数 told=SysTick->VAL; //刚进入时的计数器值 while(1) { tnow=SysTick->VAL; if(tnow!=told) { if(tnow=ticks)break; //时间超过/等于要延迟的时间,则退出. } }; } /**************************************************************************** * 名 称: void delay_ms(u16 nms) * 功 能:延时nms * 入口参数:要延时的毫妙数 * 返回参数:无 * 说 明: ****************************************************************************/ void delay_ms(u16 nms) { u32 i; for(i=0;i