OpenEdv-开源电子网

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

STM32 蓝牙调试不成功

[复制链接]

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
发表于 2016-7-15 09:49:53 | 显示全部楼层 |阅读模式
3金钱
我刚学32的单片机,昨天写了一个串口通讯的程序,可以用串口助手控制单片机亮灯,但是加上蓝牙模块之后,蓝牙并不能控制,我的蓝牙是通过手机下载了一个小蜜蜂机器调试的,
蓝牙快RXD和TXD接在32单片机的T和R上面电脑的串口助手可以接收到信息,但是接在A9和A10上单片机并不能响应,然后我又用示波器测试了R和T的波形,T上面是有矩形波的当发送信号的时候。现在是直接用USB转TTL把蓝牙模块接在电脑上面都没有反应,发送AT指令都没有反应,求帮助

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

使用道具 举报

62

主题

902

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3555
金钱
3555
注册时间
2016-1-8
在线时间
543 小时
发表于 2016-7-15 10:37:36 | 显示全部楼层
蓝牙设置不对,蓝牙设置对了直接接TTL电平就可以,程序不用动
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-7-15 12:02:29 | 显示全部楼层
蓝牙与STM32连接是否正确?你的串口程序是否正确?
回复

使用道具 举报

33

主题

481

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
5075
金钱
5075
注册时间
2013-10-4
在线时间
654 小时
发表于 2016-7-15 14:26:48 | 显示全部楼层
波特率等设置是否正确
回复

使用道具 举报

9

主题

92

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1134
金钱
1134
注册时间
2014-7-25
在线时间
176 小时
发表于 2016-7-15 14:46:20 | 显示全部楼层
这样表述可能的问题太多,,最近本的还是交叉接线,波特率,地线,程序问题等。。
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-15 15:20:24 | 显示全部楼层
孤心寒 发表于 2016-7-15 14:46
这样表述可能的问题太多,,最近本的还是交叉接线,波特率,地线,程序问题等。。

但是我直接用USB转TTL接电脑用串口助手调AT都发不出去呀,换了好几个蓝牙模块都不行,还有的是在别人电脑上面试可以的,我拿过来就不可以了,感觉好奇怪
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-15 15:22:57 | 显示全部楼层
xujian468 发表于 2016-7-15 12:02
蓝牙与STM32连接是否正确?你的串口程序是否正确?

串口程序用电脑串口助手和单片机通讯是没有问题的呀,而且只有两个引脚再就是电压和地线,我检查过没问题呀
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-15 15:23:34 | 显示全部楼层
2449164582 发表于 2016-7-15 14:26
波特率等设置是否正确

之前觉得可能是波特率的问题然后换了蓝牙模块还是不行
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-15 15:24:32 | 显示全部楼层
Sun_Fly 发表于 2016-7-15 10:37
蓝牙设置不对,蓝牙设置对了直接接TTL电平就可以,程序不用动

蓝牙要设置什么??什么意思,不太懂耶
回复

使用道具 举报

62

主题

902

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3555
金钱
3555
注册时间
2016-1-8
在线时间
543 小时
发表于 2016-7-15 15:40:01 | 显示全部楼层
任性的小娟娟 发表于 2016-7-15 15:24
蓝牙要设置什么??什么意思,不太懂耶

去淘宝找你蓝牙的型号。蓝牙也要波特率,除了比特率还有主从,你自己看你什么型号,根据蓝牙资料设置。
回复

使用道具 举报

3

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2871
金钱
2871
注册时间
2016-6-17
在线时间
320 小时
发表于 2016-7-15 15:42:52 | 显示全部楼层
波特率设置对  用的HC05还是HC06呢   发指令修改HC06或者HC05的波特率
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-15 15:51:31 | 显示全部楼层
Guosir 发表于 2016-7-15 15:42
波特率设置对  用的HC05还是HC06呢   发指令修改HC06或者HC05的波特率

06,AT都不能发送还可以改波特率么??
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-15 15:52:33 | 显示全部楼层
Sun_Fly 发表于 2016-7-15 15:40
去淘宝找你蓝牙的型号。蓝牙也要波特率,除了比特率还有主从,你自己看你什么型号,根据蓝牙资料设置。

可是这些蓝牙都是我在实验室拿的之前他们用过的,都是直接用没有调呀
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-15 16:02:25 | 显示全部楼层
[img=636,465]}{PMW_HMPFB4SYC8XOB4FJ1[/img]
回复

使用道具 举报

3

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2871
金钱
2871
注册时间
2016-6-17
在线时间
320 小时
发表于 2016-7-15 16:14:55 | 显示全部楼层
任性的小娟娟 发表于 2016-7-15 15:51
06,AT都不能发送还可以改波特率么??

还有这等问题  呵呵  来我这里给你调试
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-7-15 16:29:07 | 显示全部楼层
你的蓝牙模块什么型号?资料有吗?
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-7-15 16:31:10 | 显示全部楼层
通讯的时候设置AT的时候跟正常通讯的时候波特率是不一样的,你买的是主从模块还是从模块呢,好像HC05模块要先KEY发高电平,然后再发命令,你看下指令
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-7-15 17:01:40 | 显示全部楼层
你用原子哥的程序直接控制好了,串口什么的现成的,很简单,自己编的会不会有问题呢
回复

使用道具 举报

10

主题

254

帖子

0

精华

高级会员

Rank: 4

积分
594
金钱
594
注册时间
2015-10-17
在线时间
145 小时
发表于 2016-7-15 18:56:32 | 显示全部楼层
正点原子的蓝牙模块需要把key 引脚拉高才可以进入AT指令模式,请见检查下您对应得引脚是不是链接正确。
开着单片机翱翔在天空
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-15 20:20:02 | 显示全部楼层
原_子_哥门徒 发表于 2016-7-15 18:56
正点原子的蓝牙模块需要把key 引脚拉高才可以进入AT指令模式,请见检查下您对应得引脚是不是链接正确。

但是HC06引出来的引脚没有key呀
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-15 20:21:17 | 显示全部楼层
xujian468 发表于 2016-7-15 17:01
你用原子哥的程序直接控制好了,串口什么的现成的,很简单,自己编的会不会有问题呢

我通过串口助手调试没有问题
回复

使用道具 举报

10

主题

254

帖子

0

精华

高级会员

Rank: 4

积分
594
金钱
594
注册时间
2015-10-17
在线时间
145 小时
发表于 2016-7-16 10:42:17 | 显示全部楼层
串口调试助手没有问题的话,你放在单片机上应该也问题不大,就是RX TX 外加共地,可能还会有一些控制引脚,剩下的就是程序了。
开着单片机翱翔在天空
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-16 12:10:10 | 显示全部楼层
可是还是有问题呀
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-16 12:10:23 | 显示全部楼层
原_子_哥门徒 发表于 2016-7-16 10:42
串口调试助手没有问题的话,你放在单片机上应该也问题不大,就是RX TX 外加共地,可能还会有一些控制引脚, ...

可是还是有问题呀
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-7-16 13:40:21 | 显示全部楼层
进入AT模式后控制命令都是字符串,你发的命令肯定有问题的,
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-7-16 13:41:02 | 显示全部楼层
程序贴上来,你这样问老是这个不对那个不对,谁知道你那里不对啊
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-7-16 13:41:50 | 显示全部楼层
蓝牙模块的资料么贴上来,大家给你参考一下,
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-7-16 13:57:06 | 显示全部楼层
HC-06的设置方法  
Hc-06的默认波特率是9600,这实在太慢,为了不影响与电脑的配对通信,又要有很快地传输速率,我需要把波特率提升到115200.我看了手册,但手册只有AT指令,没说具体要怎么操作,当然,我们勤于思考,很快还是能够搞定它的。 第一步 给蓝牙上电  给hc-06上电之后,hc-06的指示灯会一直闪一直闪,这个时候就标志着进入AT模式了 第二部 蓝牙配对  我只用了电脑和单片机之间传输数据,所以只讲电脑这一块儿。首先你得电脑得有蓝牙(没有就去买)。然后打开电脑蓝牙->添加设备。这个时候电脑就会自动搜索蓝牙设备,蓝牙设备收到后配对就好。一般hc-06的名称就是hc-06了,配对密码是1234。 第三步 有线串口连接  买一根串口线,串口转usb也成,将单片机和电脑连接起来,假设使用的是stm32f103的USART1。  第四步 蓝牙引脚连接  Stm32f103的USART1的A9、A10引脚分别是Tx和Rx脚。此时将hc-06的Rx连接A9,Tx连接A10。  第五步 打开串口调试助手  找到有线串口线对应的端口,将波特率设置为与hc-06波特率一致(首次修改为9600),8位数据位,1位结束位,无校验。然后打开串口。 第六步 输入指令  首先输入AT(无空格回车),然后串口助手会返回OK,修改波特率时输入AT+BAUDx(x为波特率编号),串口助手会返回OKnnnn(nnnn是你的波特率)。注意,在这之后你若还有其他要修改的,必须先关掉串口助手,然后修改端口波特率为你刚刚设置的波特率,然后再打开串口继续操作。   另给检测蓝牙模块是否正常的方法: 1、给蓝牙模块供电 2、蓝牙配对  3、打开串口助手,设置波特率9600,数据位8位,结束位1位,校验位无 4、将蓝牙的TXD和RXD短接  5、随意发送一个数据,串口助手将回显同样的数据   再附指令表: 1、测试通信  发送:AK 返回:OK 2、修改波特率额  发送:AK+BAUD8 返回:OK115200 波特率标号对应表: 1---------1200  2---------2400  

3---------4800  4---------9600(默认) 5---------19200  6---------38400  7---------57600  8---------115200  9---------230400  A---------460800  B---------921600  C---------1382400 3、改蓝牙名称  发送:AT+NAMEname 返回:OKname 4、改配对密码  发送:AT+PINxxx 返回:OKsetpin
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-7-16 14:02:38 | 显示全部楼层
蓝牙模块RXD和TXD接在32单片机的T和R上面电脑的串口助手可以接收到信息,但是接在A9和A10上单片机并不能响应,你这句话很好的证明蓝牙和电脑连接使用串口助手是这个正常的,蓝牙是正常的,跟你的STM32连接发送信息就不正常,已经很好的能说明你的串口程序是不对的,要么你的硬件连接是错误的,不过就4根线T-T,T-R,GND-GND,5V电源
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-7-16 14:04:09 | 显示全部楼层
发送字符串命令好象还要家回车和换行,你加了没?就是0X0D,0X0A
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-16 20:14:10 | 显示全部楼层
xujian468 发表于 2016-7-16 14:04
发送字符串命令好象还要家回车和换行,你加了没?就是0X0D,0X0A

加了的呀,发送新行
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-16 20:15:14 | 显示全部楼层
xujian468 发表于 2016-7-16 14:02
蓝牙模块RXD和TXD接在32单片机的T和R上面电脑的串口助手可以接收到信息,但是接在A9和A10上单片机并不能响 ...

但是串口程序用电脑跟单片机通讯是没有问题的呀
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-16 20:17:03 | 显示全部楼层
xujian468 发表于 2016-7-16 13:57
HC-06的设置方法  
Hc-06的默认波特率是9600,这实在太慢,为了不影响与电脑的配对通信,又要有很快地传输 ...

然后打开电脑蓝牙->添加设备。这个时候电脑就会自动搜索蓝牙设备,蓝牙设备收到后配对就好。
这个是怎么配对的?
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-16 20:18:39 | 显示全部楼层
xujian468 发表于 2016-7-16 13:41
程序贴上来,你这样问老是这个不对那个不对,谁知道你那里不对啊

#if EN_USART1_RX   //Èç¹ûʹÄÜÁ˽ÓÊÕ
//´®¿Ú1ÖжϷþÎñ³ÌÐò
//×¢Òâ,¶ÁÈ¡USARTx->SRÄܱÜÃâĪÃûÆäÃîµÄ´íÎó          
u8 USART_RX_BUF[USART_REC_LEN];     //½ÓÊÕ»º³å,×î´óUSART_REC_LEN¸ö×Ö½Ú.
//½ÓÊÕ״̬
//bit15£¬        ½ÓÊÕÍê³É±êÖ¾
//bit14£¬        ½ÓÊÕµ½0x0d
//bit13~0£¬        ½ÓÊÕµ½µÄÓÐЧ×Ö½ÚÊýÄ¿
u16 USART_RX_STA=0;       //½ÓÊÕ״̬±ê¼Ç          
  
void uart_init(u32 bound){
  //GPIO¶Ë¿ÚÉèÖÃ
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);        //ʹÄÜUSART1£¬GPIOAʱÖÓ
  
        //USART1_TX   GPIOA.9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //¸´ÓÃÍÆÍìÊä³ö
  GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOA.9
   
  //USART1_RX          GPIOA.10³õʼ»¯
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕÊäÈë
  GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOA.10  

  //Usart1 NVIC ÅäÖÃ
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//ÇÀÕ¼ÓÅÏȼ¶3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //×ÓÓÅÏȼ¶3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQͨµÀʹÄÜ
        NVIC_Init(&NVIC_InitStructure);        //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷
  
   //USART ³õʼ»¯ÉèÖÃ

        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(USART1, &USART_InitStructure); //³õʼ»¯´®¿Ú1
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//¿ªÆô´®¿Ú½ÓÊÜÖжÏ
  USART_Cmd(USART1, ENABLE);                    //ʹÄÜ´®¿Ú1

}

void USART1_IRQHandler(void)                        //´®¿Ú1ÖжϷþÎñ³ÌÐò
        {
        u8 Res;
#if SYSTEM_SUPPORT_OS                 //Èç¹ûSYSTEM_SUPPORT_OSΪÕ棬ÔòÐèÒªÖ§³ÖOS.
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //½ÓÊÕÖжÏ(½ÓÊÕµ½µÄÊý¾Ý±ØÐëÊÇ0x0d 0x0a½áβ)
                {
                Res = USART_ReceiveData(USART1);        //¶ÁÈ¡½ÓÊÕµ½µÄÊý¾Ý
               
                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>(USART_REC_LEN-1))USART_RX_STA=0;//½ÓÊÕÊý¾Ý´íÎó,ÖØпªÊ¼½ÓÊÕ          
                                        }                 
                                }
                        }                    
     }
#if SYSTEM_SUPPORT_OS         //Èç¹ûSYSTEM_SUPPORT_OSΪÕ棬ÔòÐèÒªÖ§³ÖOS.
        OSIntExit();                                                                                           
#endif
}


#endif       

回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-16 20:18:51 | 显示全部楼层
xujian468 发表于 2016-7-16 13:41
程序贴上来,你这样问老是这个不对那个不对,谁知道你那里不对啊

#if EN_USART1_RX   //Èç¹ûʹÄÜÁ˽ÓÊÕ
//´®¿Ú1ÖжϷþÎñ³ÌÐò
//×¢Òâ,¶ÁÈ¡USARTx->SRÄܱÜÃâĪÃûÆäÃîµÄ´íÎó          
u8 USART_RX_BUF[USART_REC_LEN];     //½ÓÊÕ»º³å,×î´óUSART_REC_LEN¸ö×Ö½Ú.
//½ÓÊÕ״̬
//bit15£¬        ½ÓÊÕÍê³É±êÖ¾
//bit14£¬        ½ÓÊÕµ½0x0d
//bit13~0£¬        ½ÓÊÕµ½µÄÓÐЧ×Ö½ÚÊýÄ¿
u16 USART_RX_STA=0;       //½ÓÊÕ״̬±ê¼Ç          
  
void uart_init(u32 bound){
  //GPIO¶Ë¿ÚÉèÖÃ
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);        //ʹÄÜUSART1£¬GPIOAʱÖÓ
  
        //USART1_TX   GPIOA.9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //¸´ÓÃÍÆÍìÊä³ö
  GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOA.9
   
  //USART1_RX          GPIOA.10³õʼ»¯
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕÊäÈë
  GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOA.10  

  //Usart1 NVIC ÅäÖÃ
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//ÇÀÕ¼ÓÅÏȼ¶3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //×ÓÓÅÏȼ¶3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQͨµÀʹÄÜ
        NVIC_Init(&NVIC_InitStructure);        //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷
  
   //USART ³õʼ»¯ÉèÖÃ

        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(USART1, &USART_InitStructure); //³õʼ»¯´®¿Ú1
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//¿ªÆô´®¿Ú½ÓÊÜÖжÏ
  USART_Cmd(USART1, ENABLE);                    //ʹÄÜ´®¿Ú1

}

void USART1_IRQHandler(void)                        //´®¿Ú1ÖжϷþÎñ³ÌÐò
        {
        u8 Res;
#if SYSTEM_SUPPORT_OS                 //Èç¹ûSYSTEM_SUPPORT_OSΪÕ棬ÔòÐèÒªÖ§³ÖOS.
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //½ÓÊÕÖжÏ(½ÓÊÕµ½µÄÊý¾Ý±ØÐëÊÇ0x0d 0x0a½áβ)
                {
                Res = USART_ReceiveData(USART1);        //¶ÁÈ¡½ÓÊÕµ½µÄÊý¾Ý
               
                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>(USART_REC_LEN-1))USART_RX_STA=0;//½ÓÊÕÊý¾Ý´íÎó,ÖØпªÊ¼½ÓÊÕ          
                                        }                 
                                }
                        }                    
     }
#if SYSTEM_SUPPORT_OS         //Èç¹ûSYSTEM_SUPPORT_OSΪÕ棬ÔòÐèÒªÖ§³ÖOS.
        OSIntExit();                                                                                           
#endif
}


#endif       

回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-16 20:19:31 | 显示全部楼层
xujian468 发表于 2016-7-16 13:41
程序贴上来,你这样问老是这个不对那个不对,谁知道你那里不对啊

#if EN_USART1_RX   //Èç¹ûʹÄÜÁ˽ÓÊÕ
//´®¿Ú1ÖжϷþÎñ³ÌÐò
//×¢Òâ,¶ÁÈ¡USARTx->SRÄܱÜÃâĪÃûÆäÃîµÄ´íÎó          
u8 USART_RX_BUF[USART_REC_LEN];     //½ÓÊÕ»º³å,×î´óUSART_REC_LEN¸ö×Ö½Ú.
//½ÓÊÕ״̬
//bit15£¬        ½ÓÊÕÍê³É±êÖ¾
//bit14£¬        ½ÓÊÕµ½0x0d
//bit13~0£¬        ½ÓÊÕµ½µÄÓÐЧ×Ö½ÚÊýÄ¿
u16 USART_RX_STA=0;       //½ÓÊÕ״̬±ê¼Ç          
  
void uart_init(u32 bound){
  //GPIO¶Ë¿ÚÉèÖÃ
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);        //ʹÄÜUSART1£¬GPIOAʱÖÓ
  
        //USART1_TX   GPIOA.9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //¸´ÓÃÍÆÍìÊä³ö
  GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOA.9
   
  //USART1_RX          GPIOA.10³õʼ»¯
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕÊäÈë
  GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOA.10  

  //Usart1 NVIC ÅäÖÃ
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//ÇÀÕ¼ÓÅÏȼ¶3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //×ÓÓÅÏȼ¶3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQͨµÀʹÄÜ
        NVIC_Init(&NVIC_InitStructure);        //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷
  
   //USART ³õʼ»¯ÉèÖÃ

        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(USART1, &USART_InitStructure); //³õʼ»¯´®¿Ú1
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//¿ªÆô´®¿Ú½ÓÊÜÖжÏ
  USART_Cmd(USART1, ENABLE);                    //ʹÄÜ´®¿Ú1

}

void USART1_IRQHandler(void)                        //´®¿Ú1ÖжϷþÎñ³ÌÐò
        {
        u8 Res;
#if SYSTEM_SUPPORT_OS                 //Èç¹ûSYSTEM_SUPPORT_OSΪÕ棬ÔòÐèÒªÖ§³ÖOS.
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //½ÓÊÕÖжÏ(½ÓÊÕµ½µÄÊý¾Ý±ØÐëÊÇ0x0d 0x0a½áβ)
                {
                Res = USART_ReceiveData(USART1);        //¶ÁÈ¡½ÓÊÕµ½µÄÊý¾Ý
               
                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>(USART_REC_LEN-1))USART_RX_STA=0;//½ÓÊÕÊý¾Ý´íÎó,ÖØпªÊ¼½ÓÊÕ          
                                        }                 
                                }
                        }                    
     }
#if SYSTEM_SUPPORT_OS         //Èç¹ûSYSTEM_SUPPORT_OSΪÕ棬ÔòÐèÒªÖ§³ÖOS.
        OSIntExit();                                                                                           
#endif
}


#endif       

回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2016-6-12
在线时间
12 小时
 楼主| 发表于 2016-7-16 20:20:10 | 显示全部楼层
任性的小娟娟 发表于 2016-7-16 20:19
#if EN_USART1_RX   //Èç¹ûʹÄÜÁ˽Ó&#202 ...

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"

u8 t;
u8 len;       
u8 temp;
       
int main(void)
{       
        delay_init();                     //ÑÓʱº¯Êý³õʼ»¯       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// ÉèÖÃÖжÏÓÅÏȼ¶·Ö×é2
        uart_init(9600);         //´®¿Ú³õʼ»¯Îª9600
        LED_Init();                           //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú

        while(1)
        {
                if(USART_RX_STA&0x8000)
                {                                          
                        len=USART_RX_STA&0x3fff;//µÃµ½´Ë´Î½ÓÊÕµ½µÄÊý¾Ý³¤¶È
                        printf("\r\nÄú·¢Ë͵ÄÏûϢΪ:\r\n");
                        for(t=0;t<len;t++)
                        {
                                USART1->DR = USART_RX_BUF[t];
                                while((USART1->SR&0X40)==0);//&#181;&#200;&#180;&#253;·&#162;&#203;&#205;&#189;á&#202;&#248;
                        }
                        temp= USART_RX_BUF[0] - 48;
                        printf("\r\n\r\n");//&#178;&#229;&#200;&#235;&#187;&#187;&#208;&#208;
                        USART_RX_STA=0;
                        if(temp == 1)
                        {
                                LED0=0;
                                LED1=1;
                        }
                        else
                        {
                                LED0=1;
                                LED1=0;
                        }
                }
        }
}         

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 16:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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