查看: 6754|回复: 9

[原创] 【FRDM-K64F使用笔记】之串口1的 多个字符自动收发

[复制链接]
  • TA的每日心情
    开心
    2019-7-11 19:28
  • 签到天数: 141 天

    连续签到: 1 天

    [LV.7]常住居民III

    34

    主题

    1067

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2492
    最后登录
    2020-9-16
    发表于 2015-11-13 22:40:24 | 显示全部楼层 |阅读模式
    1,采用 KSDK_1.3.0库,使用IAR(因为KEIL编译时CPU占用率为90%,所以暂用IAR快些)
    2,对 C:\Freescale\KSDK_1.3.0\examples\frdmk64f\driver_examples\uart\uart_blocking下的工程进行改进,目地为了以后做AT指令的收发
    3,实现方法 ,原来是1个字节的查询接收处理,在主程序里使用,对我以后做多字节接收不好处理,所以这里进行改动,把  UART_DRV_SendDataBlocking(BOARD_DEBUG_UART_INSTANCE, &rxChar, 1u, 1000u);去掉,加入  
    1. //接收用的最大字节数
    2. #define    received_size  250
    3. //接收用的专用数组
    4. uint8_t buffer_rece[received_size];
    5. //---定义一个全局变量做自动接收用
    6. uint32_t  received_CountBuff;
    复制代码
    做自动接收串口数据用,
    调用    UART_DRV_ReceiveData(BOARD_DEBUG_UART_INSTANCE, buffer_rece, received_size);进行串口接收初始化,把刚才定义的数组和最大长度代入
    在查询的地方 调用   UART_DRV_GetReceiveStatus(BOARD_DEBUG_UART_INSTANCE,&received_CountBuff );做查询,看看有没有收到内容
       if(received_CountBuff>0&&received_CountBuff!=received_size) ,因为是自动接收所以加入一个延时之后可以做其它处理

    源码更改的地方:
    1. int main(void)
    2. {
    3.     uint8_t rxChar = 0;
    4.     uint32_t byteCountBuff = 0;

    5.     uart_state_t uartState;
    6.   //串口定义
    7.     uart_user_config_t uartConfig = {
    8.         .bitCountPerChar = kUart8BitsPerChar,//8Bit
    9.         .parityMode      = kUartParityDisabled, //校验位
    10.         .stopBitCount    = kUartOneStopBit,//停止位
    11.         .baudRate        = BOARD_DEBUG_UART_BAUD//波特率
    12.     };

    13.     // Enable clock for PORTs, setup board clock source, config pin
    14.                 //  IO 控制 ,包括时钟
    15.     hardware_init();

    16.     // Call OSA_Init to setup LP Timer for timeout
    17.     OSA_Init();

    18.     // Initialize the uart module with base address and config structure
    19.   //串口处理
    20.                 UART_DRV_Init(BOARD_DEBUG_UART_INSTANCE, &uartState, &uartConfig);

    21.     // Inform to start blocking example
    22.     byteCountBuff = sizeof(buffStart);//得到一个数组的内容长度
    23. //发送指定数组 buffStart,长为内容长度,BOARD_DEBUG_UART_INSTANCE 为是哪个串口号
    24.     UART_DRV_SendDataBlocking(BOARD_DEBUG_UART_INSTANCE, buffStart, byteCountBuff, 1000u);

    25.     // Inform user of what to do
    26.     byteCountBuff = sizeof(bufferData1);
    27.     UART_DRV_SendDataBlocking(BOARD_DEBUG_UART_INSTANCE, bufferData1, byteCountBuff, 1000u);
    28.    //设置自动接收 的数组和最大长度
    29.    UART_DRV_ReceiveData(BOARD_DEBUG_UART_INSTANCE, buffer_rece, received_size);
    30.      
    31.     // Send/receive blocking function
    32.     while(true)
    33.     {
    34.         // Wait to receive input data
    35.     /*    if (kStatus_UART_Success == UART_DRV_ReceiveDataBlocking(BOARD_DEBUG_UART_INSTANCE, &rxChar, 1u, OSA_WAIT_FOREVER))
    36.         {
    37.             // Echo received character
    38.             UART_DRV_SendDataBlocking(BOARD_DEBUG_UART_INSTANCE, &rxChar, 1u, 1000u);
    39.         }*/
    40.       
    41.          UART_DRV_GetReceiveStatus(BOARD_DEBUG_UART_INSTANCE,&received_CountBuff );
    42.          if(received_CountBuff>0&&received_CountBuff!=received_size)
    43.          {
    44.            Delay(200);
    45.              UART_DRV_SendDataBlocking(BOARD_DEBUG_UART_INSTANCE, bufferData1, byteCountBuff, 1000u);
    46.              Delay(200);
    47.              uartState.isRxBusy=0;
    48.              //重新给长度
    49.            //  uartState.rxSize=received_size;
    50.              //重新初始化接收内容
    51.             UART_DRV_ReceiveData(BOARD_DEBUG_UART_INSTANCE, buffer_rece, received_size);
    52.          
    53.          }
    54.       
    55.     }
    56. }

    57. void   Delay(uint32_t ms)
    58. {
    59.     uint32_t i,k;
    60.     for(i=0; i<ms;i++)
    61.     {   
    62.         for(k=0; k<7998; k++)
    63.         {

    64.         }
    65.     }
    66. }
    复制代码



    121313131313131.png





    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2015-11-14 10:43:00 | 显示全部楼层
    学习。。。 null - 副本 - 副本 - 副本.png null - 副本 - 副本 (2).png null - 副本 - 副本 (3).png null - 副本 - 副本.png null - 副本 (2) - 副本.png null - 副本 (2).png null - 副本 (3).png null - 副本 (4).png null - 副本.png null.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    27

    主题

    320

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    484
    最后登录
    2016-3-28
    发表于 2015-11-15 18:41:37 | 显示全部楼层
    这个修改很不错,谢谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-6 07:38
  • 签到天数: 736 天

    连续签到: 1 天

    [LV.9]以坛为家II

    21

    主题

    3486

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    5093
    最后登录
    2024-1-7
    发表于 2015-11-15 20:23:16 | 显示全部楼层
    谢谢楼主分享
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-4 23:20
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    9

    主题

    573

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1785
    最后登录
    2017-3-3
    发表于 2015-11-17 14:13:11 | 显示全部楼层
    谢谢分享.png
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    569

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2119
    最后登录
    2018-2-1
    发表于 2015-11-17 16:45:08 | 显示全部楼层
    多谢,分享! FreeLogo.png
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    111

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    366
    最后登录
    2017-2-9
    发表于 2015-11-17 19:55:24 | 显示全部楼层
    IAR还是用不惯,我这版本跳转有问题,习惯keil
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 19:52
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    19

    主题

    628

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1514
    最后登录
    2018-5-28
    发表于 2015-11-19 22:02:12 | 显示全部楼层
    学习学习
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    7

    主题

    64

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    314
    最后登录
    2016-11-18
    发表于 2015-11-26 20:26:03 | 显示全部楼层
    串口方面有一个问题,请教一下,串口块发送使用时,如果连续发送多个块数据,第一个块数据的前面几个字符容易接收不到,不知阁下遇到这个问题没有,如何解决。我现在尝试用HAL的底层函数来自己编写字符串发送还是出现这个问题,不仅如此,串口小助手的误差很大
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-5-25 15:52
  • 签到天数: 33 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    55

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    208
    最后登录
    2018-5-29
    发表于 2017-6-8 17:53:53 | 显示全部楼层
    学习了,正好要用到
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-21 04:42 , Processed in 0.122734 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表