原创 NRF51822之串口通信

2014-6-30 01:10 7125 18 20 分类: MCU/ 嵌入式 文集: C

1NRF51822UART通信特点:

1)全双工通信;

2)自动数据流控制;

3)奇偶校验,并且自动发送校验位

432GPIO口都可以设为RX TX ,这为PCB板布线带来了极大的方便。

 

2、接线:

RXNRF51822 - Pin 9 )—— MAX232 -TX

RXNRF51822 - Pin 10 )—— MAX232 -RX

这里暂时不用到RTS CTS 请求发送和清除发送 功能位。

 

3、应用驱动程序

/*获取PC发送的字符*/

uint8_t simple_uart_get(void)

{

  while (NRF_UART0->EVENTS_RXDRDY != 1) //µÈ´ý½ÓÊÕ×¼±¸Î»Îª1

  {

    // Wait for RXD data to be received

  }

 

  NRF_UART0->EVENTS_RXDRDY = 0;

  return (uint8_t)NRF_UART0->RXD;

}

 

/* 接收数据的最大允许等待时间 */

bool simple_uart_get_with_timeout(int32_t timeout_ms, uint8_t *rx_data)

{

  bool ret = true;

 

  while (NRF_UART0->EVENTS_RXDRDY != 1)

  {

    if (timeout_ms-- >= 0)

    {

      // wait in 1ms chunk before checking for status

      nrf_delay_us(1000);

    }

    else

    {

      ret = false;

      break;

    }

  }  // Wait for RXD data to be received

 

  if (timeout_ms >= 0)

  {

    // clear the event and set rx_data with received byte

      NRF_UART0->EVENTS_RXDRDY = 0;

      *rx_data = (uint8_t)NRF_UART0->RXD;

  }

 

  return ret;

}

 

/* PC发送一个字符*/

void simple_uart_put(uint8_t cr)

{

  NRF_UART0->TXD = (uint8_t)cr;

 

  while (NRF_UART0->EVENTS_TXDRDY!=1)

  {

    // Wait for TXD data to be sent

  }

 

  NRF_UART0->EVENTS_TXDRDY=0;

}

 

/* PC发送字符串 */

void simple_uart_putstring(const uint8_t *str)

{

  uint_fast8_t i = 0;

  uint8_t ch = str[i++];

  while (ch != '\0')

  {

    simple_uart_put(ch);

    ch = str[i++];

  }

}

 

/* UART 通信引脚、波特率、使能等设定*/

void simple_uart_config(  uint8_t txd_pin_number,

                          uint8_t rxd_pin_number)

{

  nrf_gpio_cfg_output(txd_pin_number);

  nrf_gpio_cfg_input(rxd_pin_number, NRF_GPIO_PIN_NOPULL); 

 

  NRF_UART0->PSELTXD = txd_pin_number;

  NRF_UART0->PSELRXD = rxd_pin_number;

 

 

 

  NRF_UART0->BAUDRATE         = (UART_BAUDRATE_BAUDRATE_Baud38400 << UART_BAUDRATE_BAUDRATE_Pos);

  NRF_UART0->ENABLE           = (UART_ENABLE_ENABLE_Enabled << UART_ENABLE_ENABLE_Pos);

  NRF_UART0->TASKS_STARTTX    = 1;

  NRF_UART0->TASKS_STARTRX    = 1;

  NRF_UART0->EVENTS_RXDRDY    = 0;

}

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户377235 2015-5-21 11:07

有nrf51822通过SPI读取sd卡的例程吗?或者只有spi通信的也行,q849666206

用户377235 2014-8-13 14:45

有NRF51822的ADC例程吗?

用户402158 2014-8-8 12:00

努力,就会有回报~ 希望看到您更多好的研发文章哟。。。

用户403664 2014-2-25 16:05

恭喜恭喜
相关推荐阅读
啊左不是蜗牛 2015-01-28 09:21
【博客大赛】那样的人生,看不穿
         昨晚11点跟PM姐姐聊天,问她今晚要不要加班,她回:刚刚开发哥哥陪她出来打的。。。我以为我十点半从实验室回去已经够晚了。。我脸红了。        我问她为什么不早点回去...
啊左不是蜗牛 2015-01-13 19:41
【智能手机】三个观点说说国产手机未来
在此篇文章之前还有一个各大手机品牌的总结,请点击查看。 智能手机之论英雄出处      谈手机之前换个角度,类比一下PC领域。 PC领域毛利最高的时候,国产PC一直混在低端。随着时代发...
啊左不是蜗牛 2015-01-09 17:56
【智能手机】论英雄出处
我认为,如果你不知道对手的底细,那么你就很难战胜对手。知己知彼,百战百胜。所以,我简单地说说我对这几家手机品牌的看法。个人之见,欢迎讨论。   苹果: 1976年成立,在乔布斯这样的天...
啊左不是蜗牛 2014-11-19 13:48
【博客大赛】蜗牛求职记之华为篇
1、前言说明          蜗牛是电赛出身,本科做硬件嵌入式,画板子和写C程序,然后研究生阶段是转战android,但是由于项目涉及到硬件,导师项目众多,小伙伴少,于是我也负责部分st...
啊左不是蜗牛 2014-08-16 14:38
以另一种位图的思想来解决一道OJ题目
前言: 以前所接触到的位图的思想都是以1位的形式去存储某个数出现的次数是1次还是0次。常见的例子不外乎在《编程珠玑》上的开篇例子里,1千万个数的排序统计,用1.25M的内存空间就可以达到遍历一...
啊左不是蜗牛 2014-08-15 11:57
Android 笔记之 listview 性能优化
列表显示需要三个元素, (1)listview 视图,用来显示列表的View ; (2)适配器,用来把数据映射到listView上面的 (3)数据,具体将被映射的数据,包括字符串,图片...
EE直播间
更多
我要评论
2
18
关闭 站长推荐上一条 /3 下一条