OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7041|回复: 30

原子哥,你写的USART_RX_STA变量适用于串口二吗?

[复制链接]

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
发表于 2016-3-18 20:03:02 | 显示全部楼层 |阅读模式
5金钱
我想用串口二实现串口的实验,各种参数都按照串口二进行了修改,但串口助手上还是没收到数据,我想问三个问题


一、你定义USART_RX_STA变量怎么就能检验串口一的传输状态的呢?我只是在usart.c中看到他的定义u16 USART_RX_STA=0; 关于它内部的各个位是怎么判断是在哪里?
二、你定义USART_RX_STA变量适用于串口二的状态检验吗?
三、如果写一个检测串口二传输状态的变量应该怎么写?(这个问题问的可能有些大,还是希望指点一下学习方向)

最佳答案

查看完整内容[请看2#楼]

额,看懂USART_RX_STA这个变量的含义,照猫画虎对照着在弄一个串口二的就可以了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-3-18 20:03:03 | 显示全部楼层
额,看懂USART_RX_STA这个变量的含义,照猫画虎对照着在弄一个串口二的就可以了。
开往春天的手扶拖拉机
回复

使用道具 举报

359

主题

1480

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
8152
金钱
8152
注册时间
2015-10-15
在线时间
2940 小时
发表于 2016-3-18 20:54:20 | 显示全部楼层
这个是自己定义的一个变量。。。
变量的每个位动态赋值。。。就跟你定义了 u8 flag 用来做某个标志位一样,,,,你下载我么视频看看,有讲解
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
 楼主| 发表于 2016-3-19 08:01:08 | 显示全部楼层
openedvadmin 发表于 2016-3-18 20:54
这个是自己定义的一个变量。。。
变量的每个位动态赋值。。。就跟你定义了 u8 flag 用来做某个标志位一样 ...

视频不太方便看,等今晚下来看看吧,那就是这个STA变量不适用于串口二的数据发送接收呗,这个变量各个位的判断写在哪个文件中?我看着改一下
回复

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
 楼主| 发表于 2016-3-19 11:07:13 | 显示全部楼层
zuozhongkai 发表于 2016-3-19 11:00
额,看懂USART_RX_STA这个变量的含义,照猫画虎对照着在弄一个串口二的就可以了。

恩,我也想照着写一个,但是这个变量各个位是怎么判断的是在哪个文件中?没找到啊
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-3-19 11:11:00 | 显示全部楼层
在usart.c这个文件里面。
开往春天的手扶拖拉机
回复

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
 楼主| 发表于 2016-3-19 11:29:03 | 显示全部楼层
zuozhongkai 发表于 2016-3-19 11:11
在usart.c这个文件里面。

u16 USART_RX_STA=0; 你是说这一句吗?可是为什么这个变量就可以检测标志位呢?这块没搞懂
回复

使用道具 举报

2

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2014-11-26
在线时间
29 小时
发表于 2016-3-19 13:23:19 | 显示全部楼层
串口定义一共也没几样 自己可以写

1,时钟配置
2,GPIO配置
3,USART配置
4,NVIC配置
5,中断处理函数  (我之前写串口的时候就忘了 ,时钟调不出来 )
6,微库(主要是前五点)
努力让自己独立坚强,这样才能有底气告诉我爱的人,我爱她。
回复

使用道具 举报

2

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2014-11-26
在线时间
29 小时
发表于 2016-3-19 13:24:55 | 显示全部楼层
要是能给您有所帮助  能不能把最佳答案给我啊 亲
努力让自己独立坚强,这样才能有底气告诉我爱的人,我爱她。
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-3-19 14:33:30 | 显示全部楼层
昊430 发表于 2016-3-19 11:29
u16 USART_RX_STA=0; 你是说这一句吗?可是为什么这个变量就可以检测标志位呢?这块没搞懂

不懂的话看教程啊,教程看不懂的话就看视频啊
开往春天的手扶拖拉机
回复

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
 楼主| 发表于 2016-3-19 15:24:41 | 显示全部楼层
zuozhongkai 发表于 2016-3-19 14:33
不懂的话看教程啊,教程看不懂的话就看视频啊

您可能没理解我的意思,这个变量定义还有意义我都懂,但是比如为什么bit14就可以检验是否接收到0x0d,并且可以置1,这个在教程中没有提及啊
回复

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
 楼主| 发表于 2016-3-19 15:25:23 | 显示全部楼层
zhangfei 发表于 2016-3-19 13:24
要是能给您有所帮助  能不能把最佳答案给我啊 亲

你说的和我问的完全不是一个东西啊
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-3-19 16:36:20 | 显示全部楼层
昊430 发表于 2016-3-19 15:24
您可能没理解我的意思,这个变量定义还有意义我都懂,但是比如为什么bit14就可以检验是否接收到0x0d,并 ...

额,这个是自己定义的, 这个变量的每个bit代表什么含义你自己可以根据自己的软件需要定义!也可以理解为这个就是协议,你要自己定义 协议
开往春天的手扶拖拉机
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-3-19 17:26:18 | 显示全部楼层
我写的串口5,和原子的有些区别不过肯定能用。我是用了操作系统,你可以去掉相关函数就行了
[mw_shl_code=c,true]//TX-PC12,RX-PD2
void uart5_init(u32 bound)
{
   //GPIO端口设置
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD,ENABLE); //使能GPIOA时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5,ENABLE);//使能USART1时钟

        //串口1对应引脚复用映射
        GPIO_PinAFConfig(GPIOC,GPIO_PinSource12,GPIO_AF_UART5); //GPIOA9复用为USART1
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource2,GPIO_AF_UART5); //GPIOA10复用为USART1
       
        //TX-PC12,RX-PD2
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 ; //GPIOA9与GPIOA10
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;        //速度50MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
        GPIO_Init(GPIOC,&GPIO_InitStructure); //初始化PA9,PA10
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ; //GPIOA9与GPIOA10
        GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化PA9,PA10
   //USART1 初始化设置
        USART_InitStructure.USART_BaudRate = bound;//波特率设置
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
        USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //收发模式
  USART_Init(UART5, &USART_InitStructure); //初始化串口1
       
  USART_Cmd(UART5, ENABLE);  //使能串口1
       
        USART_ClearFlag(UART5, USART_FLAG_TC);
       
#if EN_USART1_RX       
        USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);//开启相关中断
        USART_ITConfig(UART5, USART_IT_IDLE, ENABLE);//存在BUG,当写为USART_IT_RXNE|USART_IT_IDLE无法打开IDLE中断
                                                                                                                                                                                                //应当是因为USART有CR1-3三个寄存器,由于或运算结果不同于原参数,故库函数默认写入CR3,详见源代码
        //UART5 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;//串口1中断通道
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;                //子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器、

#endif

}

extern        OS_Q                        osq_uart5;
u8 UART5_RX_BUF[64];     //接收缓冲,最大USART_REC_LEN个字节【应小于0x3FFF即16383】.
u16 UART5_RX_STA=0;       //接收状态标记       
void UART5_IRQHandler(void)                        //串口1中断服务程序(使用USART_IT_IDLE中断)
{
        u32 Temp_Clear_IDLE;
        u16 len=UART5_RX_LEN;//已接收长度
#ifdef OS_TICKS_PER_SEC                 //如果时钟节拍数定义了,说明要使用ucosII了.
        OSIntEnter();
#endif
        if(USART_GetITStatus(UART5, USART_IT_RXNE) != RESET)  //接收中断
        {
                UART5_RX_BUF[len]=(uint16_t)(UART5->DR & (uint16_t)0x01FF);//(UART5->DR);        //读取接收到的数据
//                USART_SendData(USART1,UART5_RX_BUF[len]);
                UART5_RX_STA++;
                len++;
                if(len>=USART_REC_LEN)//缓冲区溢出
                {
                        UART5_RX_STA|=0x4000;
                        UART5_RX_STA|=0x8000;
                        UART5_RX_STA&=0xC000;
                }
        }
        if(USART_GetITStatus(UART5, USART_IT_IDLE) != RESET)  //空闲总线中断
        {
                Temp_Clear_IDLE=UART5->SR;
                Temp_Clear_IDLE=UART5->DR;//读SR再读DR清除USART_IT_IDLE位
                if(        (UART5_RX_BUF[len-2]==0x0D)        &&        (UART5_RX_BUF[len-1]==0x0A)        )//接收到的数据必须是0x0d 0x0a结尾
                {
                        OS_ERR        err;
                        UART5_RX_BUF[len-2]=0;UART5_RX_BUF[len-1]=0;
                        UART5_RX_STA-=2;
                        UART5_RX_STA|=0x8000;
                        OSQPost(&osq_uart5,UART5_RX_BUF,len,OS_OPT_POST_FIFO + OS_OPT_POST_ALL,&err);
                }
                else        UART5_RX_STA=0;
        }
#ifdef OS_TICKS_PER_SEC                 //如果时钟节拍数定义了,说明要使用ucosII了.
        OSIntExit();                                                                                           
#endif
} [/mw_shl_code]
回复

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
 楼主| 发表于 2016-3-19 18:01:24 | 显示全部楼层
zuozhongkai 发表于 2016-3-19 16:36
额,这个是自己定义的, 这个变量的每个bit代表什么含义你自己可以根据自己的软件需要定义!也可以理解为 ...

就比如 QQ截图20160319175452.png 这个寄存器,直接操作里面的各种位可以开启或关闭各种时钟,(这个举得不是很贴切,就是有的寄存器会由硬件通过某些动作后这个位自动置位或复位)这个功能是ST官方定义的是吧,可能在官方写好哪个文件中有了控制,那原子哥写的这个STA各个位的定义是写在哪里的?就是这点没搞清楚,就是在接收到0x0d后bit14就置1了,这个功能是在哪里控制的
回复

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
 楼主| 发表于 2016-3-20 09:19:54 | 显示全部楼层
yyx112358 发表于 2016-3-19 17:26
我写的串口5,和原子的有些区别不过肯定能用。我是用了操作系统,你可以去掉相关函数就行了
[mw_shl_code= ...

定义这些我都会,也都搞清楚了,就是STA这个变量的工作原理没太搞清楚
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-3-20 20:59:18 | 显示全部楼层
昊430 发表于 2016-3-19 18:01
就比如这个寄存器,直接操作里面的各种位可以开启或关闭各种时钟,(这个举得不是很贴切,就是有的寄存器 ...

USART_RX_STA是自己定义的一个变量,不是硬件寄存器!USART_RX_STA是自己定义的,跟ST没有半毛钱的关系。
开往春天的手扶拖拉机
回复

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
 楼主| 发表于 2016-3-20 21:07:43 | 显示全部楼层
zuozhongkai 发表于 2016-3-20 20:59
USART_RX_STA是自己定义的一个变量,不是硬件寄存器!USART_RX_STA是自己定义的,跟ST没有半毛钱的关系。

是啊,我知道是自己定义的,这点在教程里写着的,正因为是自己定义的,我才搞不懂为什么它会有这个功能标记功能
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-3-20 21:12:41 | 显示全部楼层
昊430 发表于 2016-3-20 21:07
是啊,我知道是自己定义的,这点在教程里写着的,正因为是自己定义的,我才搞不懂为什么它会有这个功能标 ...

不知道该如何给你说了,你已经完全陷入了思维误区了,最后再回答你一次。USART_RX_STA是自己定义的,至于每个bit代表什么含义也是自己定义的。你如果要问为什么这些bit就代表这些含义的话,那是写程序的人自己定义的,跟什么标准啊、文档啊什么的没有任何关系,完全个人定义的。程序中会根据自己定义的每个bit的含义去做不同的操作。
开往春天的手扶拖拉机
回复

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
 楼主| 发表于 2016-3-21 12:28:59 | 显示全部楼层
zuozhongkai 发表于 2016-3-20 21:12
不知道该如何给你说了,你已经完全陷入了思维误区了,最后再回答你一次。USART_RX_STA是自己定义的,至于 ...

恩,我再理解理解谢谢你了
回复

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
 楼主| 发表于 2016-4-15 19:43:40 | 显示全部楼层
zuozhongkai 发表于 2016-3-20 21:12
不知道该如何给你说了,你已经完全陷入了思维误区了,最后再回答你一次。USART_RX_STA是自己定义的,至于 ...

谢谢你,已经理解了,谢谢你耐心的解答,
回复

使用道具 举报

4

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2014-11-28
在线时间
27 小时
发表于 2016-4-22 17:28:57 | 显示全部楼层
yyx112358 发表于 2016-3-19 17:26
我写的串口5,和原子的有些区别不过肯定能用。我是用了操作系统,你可以去掉相关函数就行了
[mw_shl_code= ...

使用stm32f103zet6芯片吗?
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-4-22 20:10:36 | 显示全部楼层
richardshandong 发表于 2016-4-22 17:28
使用stm32f103zet6芯片吗?

STM32F429,有一些小区别吧
回复

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-5-6
在线时间
18 小时
发表于 2016-4-22 23:06:38 | 显示全部楼层
最高的两位用于标记0x0a,0x0d是否接收 空一位 后面的是接收计数位,看看位操作那一节就明白了
回复

使用道具 举报

6

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2016-4-3
在线时间
16 小时
发表于 2016-4-28 20:15:20 | 显示全部楼层
void USART1_init(u32 bound)
{
           GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

    /* 使能STM32的USART对应GPIO的Clock时钟 */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA| RCC_APB2Periph_AFIO , ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

    /* 初始化STM32的USART的TX管脚,配置为复用功能推挽输出 */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA , &GPIO_InitStructure);

    /* 初始化STM32的USART的RX管脚,配置为复用功能输入 */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA , &GPIO_InitStructure);



        USART_InitStructure.USART_BaudRate = bound;              //串口的波特率,例如115200 最高达4.5Mbits/s
    USART_InitStructure.USART_WordLength = USART_WordLength_8b; //数据字长度(8位或9位)
    USART_InitStructure.USART_StopBits = USART_StopBits_1;      //可配置的停止位-支持1或2个停止位
    USART_InitStructure.USART_Parity = USART_Parity_No;         //无奇偶校验  
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件流控制
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //双工模式,使能发送和接收
    /* 根据传入的参数初始化STM32的USART配置 */
    USART_Init(USART1, &USART_InitStructure);

          /* 使能STM32的USART功能模块 */
    USART_Cmd(USART1, ENABLE);
          
          
           //Usart1 NVIC 配置         
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;  //抢占优先级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                // 子优先级
        NVIC_Init(&NVIC_InitStructure);        //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器USART1
}

void USART1_IRQHandler(void)                        //串口1中断服务程序
        {
        u8 Res;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
                {
                Res =USART_ReceiveData(USART1);//(USART1->DR);        //读取接收到的数据
               
                if((USART_RX_STA&0x8000)==0)//接收未完成
                        {
                        if(USART_RX_STA&0x4000)//接收到了0x0d
                                {
                                if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
                                else USART_RX_STA|=0x8000;        //接收完成了
                                }
                        else //还没收到0X0D
                                {       
                                if(Res==0x0d)USART_RX_STA|=0x4000;
                                else
                                        {
                                        USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
                                        USART_RX_STA++;          
                                        }       
                                if(USART_RX_STA>63)
                                USART_RX_STA=0;//接收数据错误,重新开始                 
                                }
                        }                    
     }
}
回复

使用道具 举报

6

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2016-4-3
在线时间
16 小时
发表于 2016-4-28 20:16:00 | 显示全部楼层
串口1
回复

使用道具 举报

5

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2017-1-15
在线时间
19 小时
发表于 2017-3-30 16:03:35 | 显示全部楼层
昊430 发表于 2016-4-15 19:43
谢谢你,已经理解了,谢谢你耐心的解答,

你理解了吗。。。我也是陷在这了
回复

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
 楼主| 发表于 2017-3-31 18:21:53 | 显示全部楼层
无字情书 发表于 2017-3-30 16:03
你理解了吗。。。我也是陷在这了

理解了啊?你想问什么?
回复

使用道具 举报

16

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2013-6-22
在线时间
7 小时
发表于 2017-4-1 14:46:09 | 显示全部楼层
原子哥的串口接收例程,碰到数据里面有0x0d就完了,最好是判断帧头和数据长度
回复

使用道具 举报

16

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2013-6-22
在线时间
7 小时
发表于 2017-4-1 14:47:43 | 显示全部楼层
zuozhongkai 发表于 2016-3-20 20:59
USART_RX_STA是自己定义的一个变量,不是硬件寄存器!USART_RX_STA是自己定义的,跟ST没有半毛钱的关系。

我也碰见一个说USART_RX_STA是寄存器的,一看就是没仔细看代码的
回复

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
 楼主| 发表于 2017-4-2 15:35:50 | 显示全部楼层
贵在坚持 发表于 2017-4-1 14:47
我也碰见一个说USART_RX_STA是寄存器的,一看就是没仔细看代码的

我当时知道这个不是寄存器,是自己设置的变量,但是疑惑在检测结尾的地方了,但是也是功底不够,现在已经了解是什么意思了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-22 13:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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