[新手园地] M0学习-GPIO与UART

[复制链接]
 楼主| SYHDJF 发表于 2011-10-20 13:57 | 显示全部楼层 |阅读模式
本帖最后由 hotpower 于 2011-10-21 01:10 编辑

  1. 一:先说一下写任何程序的通用思路:1.芯片注册解锁;函数为: UNLOCKREG();
  2.                                   2.设定晶振;   
  3.                                   函数为: SYSCLK->;PWRCON.XTAL12M_EN = 1;
  4.                                                    (这里用的是常用的外部12M晶振,还可以是XTAL32K_EN,OSC22M_EN,OSC10K_EN)
  5.                                                   3.等待时钟就绪;函数为: DrvSYS_Delay(5000);
  6.                                                   4.写自己的程序
  7. 二:GPIO常用函数:1.设置端口模式:DrvGPIO_Open(端口,引脚,模式);
  8.                     端口为E_GPA到E_GPE;
  9.                               引脚为对应数字1,2......
  10.                               模式有:E_IO_INPUT,E_IO_OUTPUT,E_IO_OPENDRAIN,E_IO_QUAST;
  11.                              2.端口清零:DrvGPIO_ClrBit(端口,引脚)
  12.                              3.端口置位:DrvGPIO_SetBit(端口,引脚)
  13.                              4.端口统一设置:DrvGPIO_SetPortBits(端口,所有引脚的高低电平)
  14. 三:本函数设计思想:模拟资料里的实验1,2.自己设置通过串口来控制LED灯闪烁模式。
  15.                     源程序如下:

  16. #include <stdio.h>
  17. #include "NUC1xx.h"
  18. #include "DrvSYS.h"
  19. #include "DrvGPIO.h"
  20. #include "DrvUART.h"
  21. void init(void)             //初始化
  22. {
  23.         UNLOCKREG();                                       //解锁
  24.         SYSCLK->;PWRCON.XTL12M_EN = 1;           //设定12M外部晶振
  25.         DrvSYS_Delay(5000);
  26. }
  27. void set_gpio(void)             //设置GPIO模式
  28. {
  29.         DrvGPIO_Open(E_GPA,2,E_IO_OUTPUT);
  30.         DrvGPIO_Open(E_GPA,3,E_IO_OUTPUT);
  31.         DrvGPIO_Open(E_GPA,4,E_IO_OUTPUT);
  32.         DrvGPIO_Open(E_GPA,5,E_IO_OUTPUT);
  33. }
  34. void set_uart()                   //设置串口
  35. {
  36.         STR_UART_T param;
  37.         
  38.         DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC, 0);                         //         使能UART时钟
  39.         DrvGPIO_InitFunction(E_FUNC_UART0);                                                         //         复用功能引脚设置
  40.                         
  41.         param.u32BaudRate        = 115200;                                                         //         波特率
  42.         param.u8cDataBits        = DRVUART_DATABITS_8;                                 //         数据位
  43.         param.u8cStopBits        = DRVUART_STOPBITS_1;                                 //         停止位
  44.         param.u8cParity          = DRVUART_PARITY_NONE;                                 //         校验位
  45.         param.u8cRxTriggerLevel  = DRVUART_FIFO_1BYTES;                                 //         FIFO存储深度 1 字节
  46.         param.u8TimeOut                 = 0;                                                                 //         FIFO超时设定
  47.         DrvUART_Open(UART_PORT0, ¶m);                                                         //         串口开启、结构体整体赋值
  48. }
  49. void mode_1(void)                         //模式一
  50. {
  51.         uint8_t i = 10;
  52.         while(i--)
  53.         {
  54.                 DrvGPIO_ClrBit(E_GPA, 2);
  55.                 DrvSYS_Delay(300000);
  56.                 DrvGPIO_SetBit(E_GPA, 2);
  57.                 DrvGPIO_ClrBit(E_GPA, 3);                                                                 
  58.                 DrvSYS_Delay(300000);
  59.                 DrvGPIO_SetBit(E_GPA, 3);
  60.                 DrvGPIO_ClrBit(E_GPA, 4);
  61.                 DrvSYS_Delay(300000);
  62.                 DrvGPIO_SetBit(E_GPA, 4);
  63.                 DrvGPIO_ClrBit(E_GPA, 5);                                                                 
  64.                 DrvSYS_Delay(300000);
  65.                 DrvGPIO_SetBit(E_GPA, 5);
  66.         }        
  67. }
  68. void mode_2(void)                //模式二
  69. {
  70.         uint8_t i = 10;
  71.         while(i--)
  72.         {
  73.                 DrvGPIO_SetPortBits(E_GPA,0x03<<2);
  74.                 DrvSYS_Delay(300000);
  75.                 DrvGPIO_SetPortBits(E_GPA,0x9<<2);
  76.                 DrvSYS_Delay(300000);
  77.                 DrvGPIO_SetPortBits(E_GPA,0x0c<<2);
  78.                 DrvSYS_Delay(300000);
  79.                 DrvGPIO_SetPortBits(E_GPA,0x6<<2);
  80.                 DrvSYS_Delay(300000);
  81.         }
  82. }
  83. void mode_3(void)                       //模式三
  84. {
  85.         uint8_t i = 10;
  86.         while(i--)
  87.         {
  88.                 DrvGPIO_SetPortBits(E_GPA,0x1<<2);
  89.                 DrvSYS_Delay(300000);
  90.                 DrvGPIO_SetPortBits(E_GPA,0x2<<2);
  91.                 DrvSYS_Delay(300000);
  92.                 DrvGPIO_SetPortBits(E_GPA,0x4<<2);
  93.                 DrvSYS_Delay(300000);
  94.                 DrvGPIO_SetPortBits(E_GPA,0x8<<2);
  95.                 DrvSYS_Delay(300000);
  96.         }        
  97. }
  98. void uart(void)
  99. {
  100.         uint8_t mode;        
  101.         set_uart();
  102.         printf("请选择模式1-3\n");
  103.         scanf("%d\n",&mode);
  104.         printf("您选择了模式%d\n",mode);
  105.         do
  106.         {        
  107.                 switch (mode)
  108.                 {
  109.                         case 1 :        mode_1();break;//模式一
  110.                         case 2 :        mode_2();break;//模式二
  111.                         case 3 :        mode_3();break;//模式三
  112.                         default:        printf("输入有误");        
  113.                 }
  114.                 printf("继续选择其它模式请输入相应模式号 1-3\n");
  115.                 printf("退出请输入 0");
  116.                 scanf("%d\n",&mode);
  117.                 printf("您选择了模式%d\n",mode);
  118.         }while(mode!=0);
  119. }
  120. int main(void)
  121. {
  122.         init();
  123.         set_gpio();
  124.         uart();
  125.         while(1);
  126.         //return 0;
  127. }
 楼主| SYHDJF 发表于 2011-10-20 14:01 | 显示全部楼层
三个表情中第一个和第三个表示大写字母P,第二个表示大写字母D。
hotpower 发表于 2011-10-21 01:11 | 显示全部楼层
注意发帖要用<>才能code
 楼主| SYHDJF 发表于 2011-10-21 22:33 | 显示全部楼层
哦,没注意。呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

199

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部