【IoT】蓝牙BLE基础:CC254x通信系列之模拟UART协议

举报
产品人卫朋 发表于 2021/10/29 23:21:45 2021/10/29
【摘要】 CC254x 模拟 UART: 1、波特率配置 /* 波特率配置 */void uart_InitUartS( uint8 baudRate ){ timeoutT3CTL = 0xE3; // 设置为 128 分频(BIT[7:5] = 111),不启用中断,正数/倒数模式(BIT[1:...

CC254x 模拟 UART:

1、波特率配置


  
  1. /* 波特率配置 */
  2. void uart_InitUartS( uint8 baudRate )
  3. {
  4. timeoutT3CTL = 0xE3; // 设置为 128 分频(BIT[7:5] = 111),不启用中断,正数/倒数模式(BIT[1:0]=11)
  5. timeoutT3CC0 = 22; // 载入数 = 0.17 / 1000 * 32M / 128 / 2 = 22
  6. // 串口通讯时钟设置
  7. switch( baudRate )
  8. {
  9. case UART_BR_9600:
  10. {
  11. clockT3CTL = 0x63; // 设置为 8 分频(BIT[7:5] = 011),不启用中断,正数/倒数模式(BIT[1:0]=11)
  12. clockT3CC0 = 208; // 载入数 = 32M / 9600 / 8 / 2 = 208
  13. } break;
  14. case UART_BR_14400:
  15. {
  16. clockT3CTL = 0x63; // 设置为 8 分频(BIT[7:5] = 011),不启用中断,正数/倒数模式(BIT[1:0]=11)
  17. clockT3CC0 = 139; // 载入数 = 32M / 14400 / 8 / 2 = 139
  18. } break;
  19. case UART_BR_19200:
  20. {
  21. clockT3CTL = 0x43; // 设置为 4 分频(BIT[7:5] = 010),不启用中断,正数/倒数模式(BIT[1:0]=11)
  22. clockT3CC0 = 208; // 载入数 = 32M / 19200 / 4 / 2 = 208
  23. } break;
  24. case UART_BR_28800:
  25. {
  26. clockT3CTL = 0x43; // 设置为 4 分频(BIT[7:5] = 010),不启用中断,正数/倒数模式(BIT[1:0]=11)
  27. clockT3CC0 = 139; // 载入数 = 32M / 28800 / 4 / 2 = 139
  28. } break;
  29. case UART_BR_38400:
  30. {
  31. clockT3CTL = 0x23; // 设置为 2 分频(BIT[7:5] = 001),不启用中断,正数/倒数模式(BIT[1:0]=11)
  32. clockT3CC0 = 208; // 载入数 = 32M / 38400 / 2 / 2 = 208
  33. } break;
  34. case UART_BR_57600:
  35. {
  36. clockT3CTL = 0x23; // 设置为 2 分频(BIT[7:5] = 001),不启用中断,正数/倒数模式(BIT[1:0]=11)
  37. clockT3CC0 = 139; // 载入数 = 32M / 57600 / 2 / 2 = 139
  38. } break;
  39. case UART_BR_76800:
  40. {
  41. clockT3CTL = 0x23; // 设置为 2 分频(BIT[7:5] = 001),不启用中断,正数/倒数模式(BIT[1:0]=11)
  42. clockT3CC0 = 104; // 载入数 = 32M / 76800 / 2 / 2 = 104
  43. } break;
  44. case UART_BR_115200:
  45. default:
  46. {
  47. clockT3CTL = 0x03; // 设置为不分频,不启用中断,正数/倒数模式(BIT[1:0]=11)
  48. clockT3CC0 = 139; // 载入数 = 32M / 115200 / 2 = 139
  49. } break;
  50. }
  51. }

2、定时器配置


  
  1. //启动 TIMER3 - 开始通讯计时:(1)清除计数值 T3CTL[2]=1 (2)开始计数 T3CTL[4]=1
  2. #define UART_CLOCK_START() { T3CC0 = clockT3CC0; T3CTL = clockT3CTL | 0x14; }
  3. //暂停 TIMER3 - 停止串口时钟: (1)停止计数 T3CTL[4]=0
  4. #define UART_CLOCK_STOP() { T3CTL &= 0xEF; }
  5. //等待 TIMER3 - 延时达到串口通讯要求的时钟周期
  6. #define WAIT_TF() { while(!T3OVFIF); T3OVFIF = 0; }

3、初始化配置


  
  1. void io_config_pin()
  2. {
  3. P0SEL &= ~BV(2); //gpio P0_2
  4. P0DIR &= ~BV(2); //input
  5. P0INP &= ~BV(2); //pull_down & up
  6. P0IEN |= BV(2); //enable irq
  7. P0 |= BV(2); //high
  8. P0SEL &= ~BV(3); //gpio P0_3
  9. P0DIR |= BV(3); //output
  10. P0INP &= ~BV(3); //pull_down & up
  11. P0IEN &= ~BV(3); //disable irq
  12. //P0IEN |= BV(3);
  13. P0 |= BV(3); //highs
  14. }

4、发送数据


  
  1. #define UARTS_TX_BYTE(_pin, _byte) \ //先发低位
  2. { \
  3. uint8 _bit = 8; \
  4. UART_CLOCK_START(); \
  5. _pin = 0; \ //发送起始位—0
  6. WAIT_TF(); \
  7. while ( _bit-- ) \
  8. { \
  9. _pin = _byte & 0x01; \
  10. WAIT_TF(); \
  11. _byte >>= 1; \
  12. } \
  13. _pin = 1; \ //发送结束位—1
  14. WAIT_TF(); \
  15. UART_CLOCK_STOP(); \
  16. }

5、读取数据


  
  1. #define UARTS_RX_BYTE(_pin, _byte) \
  2. { \
  3. uint8 _bit = 8; \
  4. _byte = 0; \
  5. UART_CLOCK_START(); \
  6. WAIT_TF(); \
  7. while ( _bit-- ) \
  8. { \
  9. _byte >>= 1; \
  10. if ( _pin ) _byte |= 0x80; \
  11. WAIT_TF(); \
  12. } \
  13. while ( !T3OVFIF ) \
  14. { \
  15. if ( _pin ) break; \
  16. } \
  17. UART_CLOCK_STOP(); \
  18. }

 

 

 

 

 

文章来源: blog.csdn.net,作者:简一商业,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/liwei16611/article/details/73421506

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。