[NUC120] 【第六期】NUC120学习笔记二-UART

[复制链接]
 楼主| searover79 发表于 2012-4-2 16:55 | 显示全部楼层 |阅读模式
本帖最后由 hotpower 于 2012-9-13 22:40 编辑

主函数
  1. #include "includes.h"

  2. uint8_t buffer0[5] = {0x68,0x65,0x6c,0x6c,0x6f}; //定义HELLO的数组,是ASCII值
  3. uint8_t buffer1[10] = {0x73,0x65,0x61,0x72,0x6f,0x76,0x65,0x72,0x37,0x39}; //searover79
  4. uint8_t buffer2[1] = {0};

  5. /*
  6. * Function:            main
  7. * Description:    先串口输出hello,searover79
  8.                         再等待从发送缓冲区接受数据,接收后再发送出去        
  9. * Input Patameter:     无
  10. * Ouput Patameter :    无
  11. * Returns:             无
  12. */

  13. int main (void)
  14. {

  15. Set_System();

  16. while (1)
  17. {
  18. DrvUART_Write(UART_PORT0,buffer0,5);//写串口函数
  19. delay_ms(3000);
  20. DrvUART_Write(UART_PORT0,buffer1,10);
  21. delay_ms(3000);
  22. DrvUART_Read(UART_PORT0,buffer2,1);
  23. delay_ms(100);
  24. DrvUART_Write(UART_PORT0,buffer2,1);
  25. delay_ms(1000);
  26. }
  27. }
includes.h

  1. #ifndef INCLUDES_H_
  2. #define INCLUDES_H_
  3. #include <stdio.h>
  4. #include "NUC1xx.h"
  5. #include "config.h"
  6. #include "DrvSYS.h"
  7. #include "DrvGPIO.h"
  8. #include "Drvuart.h"
  9. #endif
config.c

  1. #include "includes.h"  //包含所需的头文件

  2. /*
  3. * Function:            Set_System
  4. * Description:         封装一些初始化模块
  5. * Input Patameter:     无
  6. * Ouput Patameter :    无
  7. * Returns:             无
  8. */
  9. void Set_System(void)
  10. {
  11.   RCC_Config();      //配置系统时钟
  12.   GPIO_Config();     //配置GPIO
  13.   UART_Config();     //配置USART
  14. }
  15. /*
  16. * Function:            RCC_Configuration
  17. * Description:         系统时钟源设置
  18. * Input Parameter:     none
  19. * Ouput Patameter:     none
  20. * Returns:             none
  21. */
  22. void RCC_Config(void)
  23. {
  24.    UNLOCKREG();                       
  25.    DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1);  //使用外部12M晶振
  26.                                       
  27.    delay_ms(100);   //等待外部晶振就绪                    
  28.    LOCKREG();                     
  29. }
  30. /*
  31. * Function:           GPIO_Configuration
  32. * Description:        GPIO配置
  33. * Input Parameter:    无
  34. * Output Parameter:   无
  35. * Returs:             无
  36. */
  37. void GPIO_Config(void)
  38. {
  39.    DrvGPIO_Open( E_GPA, 5, E_IO_OUTPUT );  //指定E_GPA5为输出,控制LED4阴极
  40.    DrvGPIO_Open( E_GPB, 0, E_IO_INPUT );   //RX
  41.    DrvGPIO_Open( E_GPB, 1, E_IO_OUTPUT );  //TX

  42. }
  43. /*
  44. * Function:            UART_Configuration
  45. * Description:         配置USART
  46. * Input Parameter:    none
  47. * Output Parameters:  none
  48. * Returns:            none
  49. */
  50. void UART_Config()
  51. {
  52. STR_UART_T param;
  53. DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC, 0); //使能UART时钟 CLKSEL1寄存器参考NUC100_120_TRM_SC_2.1.PDF
  54. DrvGPIO_InitFunction(E_FUNC_UART0);   //复用功能引脚设置  drvgpio_initfunction()给多功能引脚指定功能
  55. param.u32BaudRate        = 9600;   //波特率9600
  56. param.u8cDataBits        = DRVUART_DATABITS_8;  //数据位
  57. param.u8cStopBits        = DRVUART_STOPBITS_1;  //停止位
  58. param.u8cParity          = DRVUART_PARITY_NONE;  //校验位
  59. param.u8cRxTriggerLevel  = DRVUART_FIFO_1BYTES;  //FIFO存储深度 1 字节
  60. param.u8TimeOut          = 0;    //FIFO超时设定
  61. DrvUART_Open(UART_PORT0, &param);   //串口usart0开启、结构体整体赋值
  62. }
  63. /*
  64. * Function:            delay_ms
  65. * Descriptions:        1ms(晶振为12MHZ)延时子程序
  66. * Input Parameter:     count
  67. * Output Parameter:    无
  68. * Returns:             无
  69. */
  70. void delay_ms(uint32_t count)
  71. {
  72.     uint32_t i,j;
  73. for(i=count;i>0;i--)
  74. {
  75.     for(j=2395;j>0;j--);
  76. }
  77. }
config.h
  1. #ifndef CONFIG_H_
  2. #define CONFIG_H_

  3. void Set_System(void);
  4. void RCC_Config(void);
  5. void GPIO_Config(void);
  6. void UART_Config(void);
  7. void delay_ms(uint32_t count);

  8. #endif
 楼主| searover79 发表于 2012-4-2 16:59 | 显示全部楼层
现在还有1个问题,例如在hotisp的发送缓冲区中输入0x68,为什么不是出hello,searover79,h
而是hello,searover79,0,也就是0,x,6,8,分别发送呢?不知道我说的明白不?
 楼主| searover79 发表于 2012-4-2 18:55 | 显示全部楼层
除了单独发以外,还会加一个什么也没有的和一个带空格的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
john_lee 发表于 2012-4-2 23:12 | 显示全部楼层
定义字符数组,虽然可以直接写ASCII值,但这个方法稍显麻烦。
正确的方法是:
uint8_t buffer0[] = { 'h', 'e', 'l', 'l', 'o' };
[惊涛骇浪] 发表于 2012-4-3 08:41 | 显示全部楼层
受教
菜鸟+新手 发表于 2012-8-31 15:11 | 显示全部楼层
顶一个
无风行者 发表于 2012-10-24 22:15 | 显示全部楼层
你的可以用串口打印吗? 用PRINTF输出字符串
西行侠客 发表于 2013-5-2 10:37 | 显示全部楼层
在学习串口数据传输,在看
yang120460 发表于 2013-5-18 15:19 | 显示全部楼层
你好,请问下要把IO口设置成UART功能,只有这一行代码DrvGPIO_InitFunction(E_FUNC_UART0);就行了吗?还是要  DrvGPIO_Open( E_GPB, 0, E_IO_INPUT );   //RX
DrvGPIO_Open( E_GPB, 1, E_IO_OUTPUT );  //TX
也加上才行啊!!! 非常急。。。。帮帮忙。。。谢谢了先
stul海盗 发表于 2014-2-21 11:50 | 显示全部楼层
为什么显示的数字不是你数组里的,而是searover79,搞不明白
stul海盗 发表于 2014-2-21 11:53 | 显示全部楼层

为什么发的是数组里的数据,而显示的是searover79,不是应该显示{0x73,0x65,0x61,0x72,0x6f,0x76,0x65,0x72,0x37,0x39}吗
xyz549040622 发表于 2014-2-21 12:05 | 显示全部楼层
本帖最后由 xyz549040622 于 2014-2-21 12:06 编辑
stul海盗 发表于 2014-2-21 11:53
为什么发的是数组里的数据,而显示的是searover79,不是应该显示{0x73,0x65,0x61,0x72,0x6f,0x76,0x65,0x7 ...

你换hex模式下看看,你用的是文本模式接受的
stul海盗 发表于 2014-2-22 18:07 | 显示全部楼层
我已经解决了,把串口调试助手的显示模式从ASCLL改成16进制就OK;额
stul海盗 发表于 2014-2-22 18:08 | 显示全部楼层
xyz549040622 发表于 2014-2-21 12:05
你换hex模式下看看,你用的是文本模式接受的

虽然已经解决了,但还是感谢你
xiaobird007 发表于 2014-4-2 22:01 | 显示全部楼层
我的打开串口,程序就死了,不知道为什么…………
lqc754 发表于 2014-8-1 15:27 | 显示全部楼层
学习!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

301

帖子

0

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

26

主题

301

帖子

0

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