K60学习串口数据的收发

本次学习是串口数据收发的四种方式
中断发送数据
中断接收数据
轮询发送数据
轮询接收数据
主要说一下中断方式的原理和轮询方式的流程
中断方式主要借助下面的函数完成

UART_CallbackRxInstall();
UART_CallbackRxInstall();```

    这两个函数分别是注册中断接收和发送的函数,其中有两个参数打一个参数是UART号,第二个是中断函数的名字。对于接收函数必须有一个参数是uint16_t类型的变量,用来传递要发送的数据,对于发送函数,必须有一个参数是uint16_t *类型的变量,来传递要发送的数据。
    其他的依据模板
 uint32_t instance;
DelayInit();
GPIO_QuickInit(HW_GPIOE,6,kGPIO_Mode_OPP);

//下面是快速初始化方式,不推荐使用
//instance = UART_QuickInit(UART0_RX_PD06_TX_PD07,115200);
UART_InitTypeDef UART_InitStruct1 = {0};
UART_InitStruct1.instance = HW_UART0;
UART_InitStruct1.baudrate = 115200;
UART_InitStruct1.parityMode = kUART_ParityDisabled;
UART_InitStruct1.bitPerChar = kUART_8BitsPerChar;
PORT_PinMuxConfig(HW_GPIOD,6,kPinAlt3);
PORT_PinMuxConfig(HW_GPIOD,7,kPinAlt3);


其他的数据发送和接收操作,则写在中断函数中。对于接收,使用下面的函数

static void UART_RX_ISR(uint16_t byteReceive)
{
UART_WriteByte(HW_UART0,byteReceive);
}

对于发送,则要麻烦一点,但是一般都是使用轮询方式发送。

static void UART_TX_ISR(uint16_t * byteToSend)
{
static const char *p = UART_String1;
*byteToSend = *p++;
if((p - UART_String1) == sizeof(UART_String1))
{
p = UART_String1;
UART_ITDMAConfig(HW_UART0, kUART_IT_Tx, false);
}
}


轮询方式发送数据和接收数据

while(1)
{
if(UART_ReadByte(HW_UART0, &ch) == 0)
UART_WriteByte(instance,ch);
}

接收数据的函数会返回一个值来确认是否接收成功,0表示成功,其他失败


PS:J-link坏了,没有实验效果,很不爽!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 姓名:莫益彰 学号:16030140019 【嵌牛导读】:串口通信是指外设和计算机间,通过数据信号线 、地线、控制...
    换个名字消消毒阅读 1,626评论 1 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,958评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,404评论 25 708
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,170评论 6 13
  • 如果生活像电影一样,那我的2016叫格局逆袭。 本年度最杰出成就:买了带地的大房子 ,小房子出租成投资房。 本年度...
    水在瓶4阅读 279评论 0 0