打印
[NUC120]

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

[复制链接]
5370|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 hotpower 于 2012-9-13 22:40 编辑

主函数
#include "includes.h"

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

/*
* Function:            main
* Description:    先串口输出hello,searover79
                        再等待从发送缓冲区接受数据,接收后再发送出去        
* Input Patameter:     无
* Ouput Patameter :    无
* Returns:             无
*/

int main (void)
{

Set_System();

while (1)
{
DrvUART_Write(UART_PORT0,buffer0,5);//写串口函数
delay_ms(3000);
DrvUART_Write(UART_PORT0,buffer1,10);
delay_ms(3000);
DrvUART_Read(UART_PORT0,buffer2,1);
delay_ms(100);
DrvUART_Write(UART_PORT0,buffer2,1);
delay_ms(1000);
}
}
includes.h
 
#ifndef INCLUDES_H_
#define INCLUDES_H_
#include <stdio.h>
#include "NUC1xx.h"
#include "config.h"
#include "DrvSYS.h"
#include "DrvGPIO.h"
#include "Drvuart.h"
#endif
config.c
 
#include "includes.h"  //包含所需的头文件

/*
* Function:            Set_System
* Description:         封装一些初始化模块
* Input Patameter:     无
* Ouput Patameter :    无
* Returns:             无
*/
void Set_System(void)
{
  RCC_Config();      //配置系统时钟
  GPIO_Config();     //配置GPIO
  UART_Config();     //配置USART
}
/*
* Function:            RCC_Configuration
* Description:         系统时钟源设置
* Input Parameter:     none
* Ouput Patameter:     none
* Returns:             none
*/
void RCC_Config(void)
{
   UNLOCKREG();                       
   DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1);  //使用外部12M晶振
                                      
   delay_ms(100);   //等待外部晶振就绪                    
   LOCKREG();                     
}
/*
* Function:           GPIO_Configuration
* Description:        GPIO配置
* Input Parameter:    无
* Output Parameter:   无
* Returs:             无
*/
void GPIO_Config(void)
{
   DrvGPIO_Open( E_GPA, 5, E_IO_OUTPUT );  //指定E_GPA5为输出,控制LED4阴极
   DrvGPIO_Open( E_GPB, 0, E_IO_INPUT );   //RX
   DrvGPIO_Open( E_GPB, 1, E_IO_OUTPUT );  //TX

}
/*
* Function:            UART_Configuration
* Description:         配置USART
* Input Parameter:    none
* Output Parameters:  none
* Returns:            none
*/
void UART_Config()
{
STR_UART_T param;
DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC, 0); //使能UART时钟 CLKSEL1寄存器参考NUC100_120_TRM_SC_2.1.PDF
DrvGPIO_InitFunction(E_FUNC_UART0);   //复用功能引脚设置  drvgpio_initfunction()给多功能引脚指定功能
param.u32BaudRate        = 9600;   //波特率9600
param.u8cDataBits        = DRVUART_DATABITS_8;  //数据位
param.u8cStopBits        = DRVUART_STOPBITS_1;  //停止位
param.u8cParity          = DRVUART_PARITY_NONE;  //校验位
param.u8cRxTriggerLevel  = DRVUART_FIFO_1BYTES;  //FIFO存储深度 1 字节
param.u8TimeOut          = 0;    //FIFO超时设定
DrvUART_Open(UART_PORT0, &param);   //串口usart0开启、结构体整体赋值
}
/*
* Function:            delay_ms
* Descriptions:        1ms(晶振为12MHZ)延时子程序
* Input Parameter:     count
* Output Parameter:    无
* Returns:             无
*/
void delay_ms(uint32_t count)
{
    uint32_t i,j;
for(i=count;i>0;i--)
{
    for(j=2395;j>0;j--);
}
}
config.h
#ifndef CONFIG_H_
#define CONFIG_H_

void Set_System(void);
void RCC_Config(void);
void GPIO_Config(void);
void UART_Config(void);
void delay_ms(uint32_t count);

#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 | 只看该作者
除了单独发以外,还会加一个什么也没有的和一个带空格的

1.GIF (3.51 KB )

1.GIF

2.GIF (3.08 KB )

2.GIF

使用特权

评论回复
地板
john_lee| | 2012-4-2 23:12 | 只看该作者
定义字符数组,虽然可以直接写ASCII值,但这个方法稍显麻烦。
正确的方法是:
uint8_t buffer0[] = { 'h', 'e', 'l', 'l', 'o' };

使用特权

评论回复
5
[惊涛骇浪]| | 2012-4-3 08:41 | 只看该作者
受教

使用特权

评论回复
6
菜鸟+新手| | 2012-8-31 15:11 | 只看该作者
顶一个

使用特权

评论回复
7
无风行者| | 2012-10-24 22:15 | 只看该作者
你的可以用串口打印吗? 用PRINTF输出字符串

使用特权

评论回复
8
西行侠客| | 2013-5-2 10:37 | 只看该作者
在学习串口数据传输,在看

使用特权

评论回复
9
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
也加上才行啊!!! 非常急。。。。帮帮忙。。。谢谢了先

使用特权

评论回复
10
stul海盗| | 2014-2-21 11:50 | 只看该作者
为什么显示的数字不是你数组里的,而是searover79,搞不明白

使用特权

评论回复
11
stul海盗| | 2014-2-21 11:53 | 只看该作者

为什么发的是数组里的数据,而显示的是searover79,不是应该显示{0x73,0x65,0x61,0x72,0x6f,0x76,0x65,0x72,0x37,0x39}吗

使用特权

评论回复
12
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模式下看看,你用的是文本模式接受的

使用特权

评论回复
13
stul海盗| | 2014-2-22 18:07 | 只看该作者
我已经解决了,把串口调试助手的显示模式从ASCLL改成16进制就OK;额

使用特权

评论回复
14
stul海盗| | 2014-2-22 18:08 | 只看该作者
xyz549040622 发表于 2014-2-21 12:05
你换hex模式下看看,你用的是文本模式接受的

虽然已经解决了,但还是感谢你

使用特权

评论回复
15
xiaobird007| | 2014-4-2 22:01 | 只看该作者
我的打开串口,程序就死了,不知道为什么…………

使用特权

评论回复
16
lqc754| | 2014-8-1 15:27 | 只看该作者
学习!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

301

帖子

0

粉丝