本帖最后由 hotpower 于 2011-10-14 01:51 编辑
http://v.youku.com/v_show/id_XMzEyMzM5NTQ4.html
这个视频时 怎么测创建KEIL 的M0工程和NU-LINK+KEIL下载
串口和ISP的问题还没解决,所以先写了个GPIO的而调试方法就变成了蜂鸣器的响铃次数了。
对GPIO的操作主要就几个函数
1,int32_t DrvGPIO_Open(E_DRVGPIO_PORT port, int32_t i32Bit, E_DRVGPIO_IO mode)
这个函数主要是打开GPIO,并且设置GPIO的工作模式,输入输出等等。并且是直接对位进行操作
第一个变量时,端口。第二个变量时第几口,第三个是工作模式
2,int32_t DrvGPIO_Close(E_DRVGPIO_PORT port, int32_t i32Bit)
这个是关闭那个端口的第几个口。
3,int32_t DrvGPIO_ClrBit(E_DRVGPIO_PORT port, int32_t i32Bit)
这个函数为把那个端口的第几个口的电平拉低, 这个函数工作在IO口为OUTPUT的模式下
4,int32_t DrvGPIO_SetBit(E_DRVGPIO_PORT port, int32_t i32Bit)
这个函数为把那个端口的第几个口的电平拉高, 这个函数工作在IO口为OUTPUT的模式下
5,int32_t DrvGPIO_GetBit(E_DRVGPIO_PORT port, int32_t i32Bit)
这二个函数是取得端口电压
6,void DrvGPIO_EnableEINT0(E_DRVGPIO_INT_TYPE TriggerType, E_DRVGPIO_INT_MODE Mode, GPIO_EINT0_CALLBACK pfEINT0Callback)
看名字也知道 时能外部中断0
7,void DrvGPIO_DisableEINT0(void)
see name 关闭外部中断0
8,int32_t DrvGPIO_InitFunction(E_DRVGPIO_FUNC function)
设置IO口处于第几功能。 例如UART,SPI等, 如果使用这些功能就要进行相应的设置!
对GPIO的主要操作就是这些
如果我们要把一个IO口拉高,那么顺序就是
打开IO口并且设置为输出(Open函数)---->拉高IO口(SetBit函数)---->任务结束以后就(Close函数)。
如果我们要使用UART功能首先就要把GPIO的UART打开
DrvGPIO_InitFunction(E_FUNC_UART0);
相应的外部中断等等都是如此
- *本实验主要验证GPIO口的 输出,输入功能。 置高,置低。对GPIO进行基本的操作*/
- #include <stdio.h>
- #include "NUC1xx.h"
- #include "DrvGPIO.h"
- #include "DrvUART.h"
- #include "DrvSYS.h"
- #define SUCCESS 0xff
- #define FALI 0x00
- #define OPENBEEP DrvGPIO_SetBit(E_GPB,10)
- #define CLOSEBEEP DrvGPIO_ClrBit(E_GPB,10)
- /*
- typedef struct DRVUART_STRUCT
- {
- uint32_t u32BaudRate;
- E_DATABITS_SETTINS u8cDataBits;
- E_STOPBITS_SETTINS u8cStopBits;
- E_PARITY_SETTINS u8cParity;
- E_FIFO_SETTINGS u8cRxTriggerLevel;
- uint8_t u8TimeOut ;
- }STR_UART_T;
- */
- uint8_t DrvUART_Init(uint32_t band)
- {
- STR_UART_T param; //声明串口结构体,里面就是对串口操作的一些变量
- UNLOCKREG();
- SYSCLK->WRCON.XTL12M_EN=1; // 使能12M时钟
- DrvSYS_Delay(5000);
- DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC,0); //select IP clock source
- DrvGPIO_InitFunction(E_FUNC_UART0); //设置GPIO口为UART功能
- //Select UART configure
- param.u32BaudRate = band; //设置波特率为 115200
- param.u8cDataBits = DRVUART_DATABITS_8; //设置数据为8位
- param.u8cStopBits = DRVUART_STOPBITS_1; //停止位1位
- param.u8cParity = DRVUART_PARITY_NONE; //无效验码
- param.u8cRxTriggerLevel = DRVUART_FIFO_1BYTES; //Rx Trigger Leve 1 byte
- param.u8TimeOut = 0; //时间益处
- if(DrvUART_Open(UART_PORT0,¶m)==E_SUCCESS) //initialize UART0
- {
- return SUCCESS;
- }
- else
- return FALI;
- }
- //蜂鸣器初始化.
- //因为IO口初始化以后默认输出为高
- //所以初始化以后马上拉低IO口
- void DrvDeep_Init()
- {
- DrvGPIO_Open(E_GPB,10,E_IO_OUTPUT);
- DrvGPIO_ClrBit(E_GPB,10);
- }
- //连续响铃函数
- //u8Count为响铃的次数
- void DrvDeep_RingCount(uint8_t u8Count)
- {
- while(u8Count--)
- {
- OPENBEEP;
- DrvSYS_Delay(80000); //系统延时函数
- CLOSEBEEP;
- DrvSYS_Delay(80000);
- }
- }
- //主函数
- //注意要将GPA3和GPA4连接在一起, 不然实验没效果!
- //GPA3和GPA4在排针的最后一排二个。
- int main()
- {
- int32_t i32Err;
- DrvDeep_Init();
- if(DrvUART_Init(115200)==FALI) //打开串口。如果打开失败,响铃5下
- {
- DrvDeep_RingCount(5);
- }
- printf("\nSet UART0->UART0 is sucess\n"); //打开成功,打印消息
- printf("\n---------------------------\n");
- /*---------------------------------------------------------------------------------------------------------*/
- /* Basic Setting -----DrvGPIO_Open,DrvGPIO_SetBit,DrvGPIO_GetBit */
- /*---------------------------------------------------------------------------------------------------------*/
- DrvGPIO_Open(E_GPA,3,E_IO_OUTPUT); //GPA3设置成输出模式
- DrvGPIO_Open(E_GPA,4,E_IO_INPUT); //GPA4设置成输入模式
- DrvGPIO_ClrBit(E_GPA,3); //GPA3口拉低
- if(DrvGPIO_GetBit(E_GPA,4)==0 ) //检测GPA4口的电压,如果为第,证明GPA3口拉底成功!
- {
- printf("\nSet GPIO->SetBit is sucess\n");
- printf("\n GetBit is sucess\n");
- printf("\n DrvGPIO_Open is sucess\n");
- DrvDeep_RingCount(3); //响铃三下
- }
- /*---------------------------------------------------------------------------------------------------------*/
- /* Basic Setting -----DrvGPIO_ClrBit */
- /*---------------------------------------------------------------------------------------------------------*/
- DrvGPIO_SetBit(E_GPA,3); //GPA3拉高
- if(DrvGPIO_GetBit(E_GPA,4)==0) //检测GPA4口的电压,如果为高PA3口拉高成功!
- {
- printf("\n ClrBit is sucess for %d\n",DrvGPIO_GetBit(E_GPA,1));
- DrvDeep_RingCount(3);
- }
- while(1);
- }
|