OpenEdv-开源电子网

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

请教uart文件夹

[复制链接]

4

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2012-9-20
在线时间
20 小时
发表于 2012-9-21 09:29:30 | 显示全部楼层 |阅读模式

刘老师好!菜鸟这几天开始学习STM32,今天在看STM32不完全手册》的串口部分,有几个问题想请教下,烦请老师有空解答

UART文件夹内容,文中提到串口中断函数void USART1_IRQHandler(void);

(提及内容在STM32不完全手册_V2.174

函数内容:// #ifdef EN_USART1_RX //如果使能了接收

//串口1中断服务程序

//注意,读取USARTx->SR能避免莫名其妙的错误

u8 USART_RX_BUF[64]; //接收缓冲,最大64个字节.

//接收状态

//bit7,接收完成标志

//bit6,接收到0x0d

//bit5~0,接收到的有效字节数目

u8 USART_RX_STA=0; //接收状态标记

void USART1_IRQHandler(void)

{

       u8 res;

       if(USART1->SR&(1<<5))//接收到数据

       {

              res=USART1->DR;

              if((USART_RX_STA&0x80)==0)//接收未完成

              {

                     if(USART_RX_STA&0x40)//接收到了0x0d

                     {

                            if(res!=0x0a)USART_RX_STA=0;//接收错误,重新开始

                                   else USART_RX_STA|=0x80; //接收完成了

                     }

                     else //还没收到0X0D

                     {

                            if(res==0x0d)USART_RX_STA|=0x40;

                            else

                            {

                                   USART_RX_BUF[USART_RX_STA&0X3F]=res;

                                   USART_RX_STA++;

                                   if(USART_RX_STA>63)USART_RX_STA=0;//接收数据错误,重新开始接收

                            }

                     }

              }

       }

}

#endif

 

1.看程序接收到回车的数据(0X0D,0X0A),这个数据也是在UART1->DR中?

2.那如果有用数据也是0x0d,那如何处理呢?不会影响了吗?

3.接收到0x0d后,UART_RX_STR会自动置0x40的吗?

 4.最后四句话: if(res==0x0d)USART_RX_STA|=0x40;

                            else

                            {

                                   USART_RX_BUF[USART_RX_STA&0X3F]=res;

                                   USART_RX_STA++;

这三句话啥意思,啥作用呢,看不明白呢?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-9-21 10:25:21 | 显示全部楼层
1,是。
2,发送ASCII字符的时候,没有任何字符和0X0D对应。
3,是
4,如果收到0X0D就设置第六位为1.如果收到的不是0X0D,则说明是数据,直接保存在数组里面。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2012-9-20
在线时间
20 小时
 楼主| 发表于 2012-9-27 12:34:43 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
多谢原子大哥的解答啊!
小弟还有个问题啊,就是IO口设置里,不完全手册初始化函数如下:

void LED_Init(void) 


RCC->APB2ENR|=1<<5; //使能PORTD时钟 
GPIOA->CRH&=0XFFFFFFF0; 
GPIOA->CRH|=0X00000003;//PA8 推挽输出 
GPIOA->ODR|=1<<8; //PA8 输出高 
GPIOD->CRL&=0XFFFFF0FF; 
GPIOD->CRL|=0X00000300;//PD.2推挽输出 
GPIOD->ODR|=1<<2; //PD.2输出高 
}
设置端口时钟是RCC->APB2ENR|=1<<2; //使能PORTA时钟 
这是设置A口的时钟,我不知道如何设置单个IO口时钟啊?
比如我要A口的1,2口输出,而3,4口输入,这样时钟如何设置呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-9-27 22:04:37 | 显示全部楼层
是一组时钟,不是单个的!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-20 10:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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