OpenEdv-开源电子网

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

【新人求助】发现HC-05和SPI的教程程序中都在使用PA2~PA4来进行初始化,同时使用这两个硬件的话就起冲突了

[复制链接]

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-2-9
在线时间
0 小时
发表于 2015-4-21 17:12:29 | 显示全部楼层 |阅读模式
5金钱


怎样修改程序代码,尝试着将SPI初始化中的GPIOA全变成GPIOB但是这样初始化就失败了,,,,,,新人一枚不太会

最佳答案

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

对啊,所以要改代码,你吧蓝牙模块接别的串口,比如串口1.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-4-21 17:12:30 | 显示全部楼层
对啊,所以要改代码,你吧蓝牙模块接别的串口,比如串口1.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-2-9
在线时间
0 小时
 楼主| 发表于 2015-4-21 23:18:14 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
QAQ.....改了flash.c里面的将GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;改成了GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;但是这样改就初始化不成功了....看了看代码其他地方也没有用到这几个串口哎

蓝牙那个,我在HC05.c里面找了半天也只找到了PA4和和PC4的初始化,没有找到PA2,PA3的初始化在哪里哎,求助啊原子哥,不太清楚在哪改(>_<)
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-4-21 23:58:45 | 显示全部楼层
回复【3楼】Likeriver:
---------------------------------
你知道应该怎么改么?
HC05的USART2全部改成USART1,你先把这个搞定。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-2-9
在线时间
0 小时
 楼主| 发表于 2015-4-26 18:03:29 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,不好意思,前几天有急事今天才重新开始弄这个,今天学习了一天,还是有几个地方有困惑想请教一下您。
我看了您的串口实验视频,stm32不完全手册以及中文参考手册。
1.在初始化串口中有(1) 串口时钟使能, GPIO时钟使能 (3) GPIO端口模式设置这两步中使用了PA9和PA10,请问这两个GPIO端口可以更改么,SPI和蓝牙模块可以都用这个端口进行初始化串口么
2.阅读了蓝牙模块的代码,发现其中usart1和usart2都进行了初始化,在hc-05.c中通过usart2进行通信,我讲hc-05.c中使用usart2的地方全部改为usart1(USART2_RX_BUF-》USART_RX_BUF、USART2_RX_STA-》USART_RX_STA)但是这样修改后hc-05初始化失败,是不是不可以这样修改,有什么地方我没注意到的
3.在阅读,实验20-SPI实验代码时发现它初始化了usart1,但在spi.c,flash.c中没有发现他们是如何通过这个串口通信的,这里可以指点一下么
(>_<)问题有点多,希望原子哥在百忙中回答一下,感激不尽。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-4-26 22:59:54 | 显示全部楼层
1,可以改,你用其他串口,改对应IO即可。
2,可以,但是你蓝牙模块就得接串口1,然后至于为啥初始化失败,就要看数据,分析问题了。
3,串口初始化,这个不是给SPI用的,而是给printf用的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-2-9
在线时间
0 小时
 楼主| 发表于 2015-4-27 16:02:27 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
蓝牙模块怎么接串口一.....PA3。PA4接PA9.PA10么还是其他啥的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-4-27 19:22:30 | 显示全部楼层
回复【7楼】Likeriver:
---------------------------------
自己想
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-2-9
在线时间
0 小时
 楼主| 发表于 2015-4-28 21:10:54 | 显示全部楼层
啊.....原子哥我好像知道为什么会起冲突了,因为SPI和HC-05都用了PA2,PA3来传送数据的关系。PA2PA3在HC-05上是接TXD RXD 的

我尝试了一下如果先初始化SPI在初始化蓝牙,则蓝牙模块一切正常,SPI数据写不进去,如果先初始化蓝牙模块在初始化SPI的话则SPI功能一切正常,但是向蓝牙模块发送数据蓝牙模块收不到,但是我通过SPI写数据时,蓝牙模块缺收到一串无法辨识字符。

应该是对的吧原子哥,但是我看了看和HC05相关的串口2初始化,(>_<)因为是寄存器版本的,不知道怎么换PA2PA3,原子哥指导一下吧...
主要是不太懂这句:
GPIOA->CRL&=0XFFFF00FF;
GPIOA->CRL|=0X00008B00;
这两句为什么能实现,视频教程中初始化GPIO串口的那么一长串操作,好像和寄存器教程中初始化GPIO串口的顺序也不一样。。
我想将这两句里面的PA2PA3换成其他的比如PA12,PA13我该怎么改


最后贴上串口2的初始化代码
void USART2_Init(u32 pclk1,u32 bound)
{      
RCC->APB2ENR|=1<<2;   
GPIOA->CRL&=0XFFFF00FF;
GPIOA->CRL|=0X00008B00;
RCC->APB1ENR|=1<<17;  
RCC->APB1RSTR|=1<<17;   
RCC->APB1RSTR&=~(1<<17);

  USART2->BRR=(pclk1*1000000)/(bound);
USART2->CR1|=0X200C;  
USART2->CR3=1<<7;   
UART_DMA_Config(DMA1_Channel7,(u32)&USART2->DR,(u32)USART2_TX_BUF);
#ifdef USART2_RX_EN   

USART2->CR1|=1<<8;    
USART2->CR1|=1<<5;    
MY_NVIC_Init(2,3,USART2_IRQn,2);
TIM4_Init(99,7199);
USART2_RX_STA=0;
TIM4_Set(0);
#endif   
}

原子哥辛苦了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-4-28 22:16:20 | 显示全部楼层
回复【9楼】Likeriver:
---------------------------------
我们有切换IO模式的,你用mini板,看这个例程的spi.c,会返现多了一个函数。中断就是这个函数。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-2-9
在线时间
0 小时
 楼主| 发表于 2015-4-28 23:52:54 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
在SPI.c中除了SPI初始化函数外,有SPIS?e?tSpeed和SPI_ReadWriteByte函数
后面一个函数中会检查SPI1-》SR位是否置位,是否与某个flag相符。
我尝试修改SR(0或1),但好像并没有切换IO,蓝牙模块仍然接受不到数据,原子哥您指地中断函数是这个么。
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-2-9
在线时间
0 小时
 楼主| 发表于 2015-4-29 09:04:09 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
还是那个SPI_CMD函数?
.....这个函数我也试过了...好像SPI是不能读Flash了,但蓝牙仍然接收不到数据
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-2-9
在线时间
0 小时
 楼主| 发表于 2015-4-29 09:26:06 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
还有原子哥、、、
初始化串口2的时候为什么不能用PB2PB3进行初始化啊

RCC->APB2ENR|=1<<3;   
GPIOB->CRL&=0XFFFF00FF;
GPIOB->CRL|=0X00008B00;

原来初始化串口2代码:
RCC->APB2ENR|=1<<2;   
GPIOA->CRL&=0XFFFF00FF;
GPIOA->CRL|=0X00008B00;

好像这样修改后就不能往板子上烧程序了,(>_<)原因是啥
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-4-29 23:18:41 | 显示全部楼层
回复【13楼】Likeriver:
---------------------------------
你下载我们例程测试下吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-2-9
在线时间
0 小时
 楼主| 发表于 2015-4-30 14:00:37 | 显示全部楼层
回复【14楼】正点原子:
-----------------------------
唔..我复述一下情况是这样的:
我在同时使用hc-05模块和SPI与flash通信的代码时,发现在PA2、PA3上起了冲突,只有一个能产生作用
现在有两种解决方案
1,一种是原子哥你说的SPI.c文件里面有一个控制中断的函数,我尝试了spi.c里面的SPI1_ReadWriteByte(0x00)、SPI_Cmd(SPI1, DISABLE);但发现没什么作用没有是SPI不占用PA2PA3
2.第二种就是既然是PA2PA3起冲突,那将蓝牙用于通信的TXD->A2,RXD->A3换为TXD->B2,RXD->B3可以么,但是我将串口2的PA2PA3换为PB2PB3,并将接线TXD->B2,RXD->B3时,发现程序烧不进去了,说检测不到蓝牙模块,想问一下mcuisp只能从PA2PA3与蓝牙模块通信么
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-4-30 23:08:41 | 显示全部楼层
回复【15楼】Likeriver:
---------------------------------
1,你没看我们代码吧。
2,mcuisp和蓝牙通信做什么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-2-9
在线时间
0 小时
 楼主| 发表于 2015-5-1 00:46:56 | 显示全部楼层
回复【16楼】正点原子:
---------------------------------
先复述一下问题,我在同时使用hc-05模块和SPI与flash通信的代码时,发现在PA2、PA3上起了冲突,只有一个能产生作用 

1.现在想通过关SPI的方法,来切换IO
stm32f10x_spi.c里面的中断函数,使用代码如下:
SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_TXE, DISABLE);
SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_RXNE, DISABLE);
这样不能禁止么?我这样写后仍然可以通过SPI往flash中写和读数据
(防止代码出错我又尝试了SPI_I2S_DMACmd,SPI_SSOutputCmd,SPI_CalculateCRC,SPI_Cmd函数,并且每个函数的DISABLE,ENABLE都试过了,完全没影响读写,这是为什么,函数找错了么)

2.接您昨天的回复第二条:mcuisp和蓝牙通信做什么?
答:不是通过mcuisp往板子上烧程序的么,但是我不将蓝牙模块的TXD接PA2,RXD接PA3,通过mcuisp烧程序时显示检测不到蓝牙模块,这是为什么。(代码部分将串口2的初始化部分的PA2PA3改为PB2PB3)
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-5-1 22:42:57 | 显示全部楼层
回复【17楼】Likeriver:
---------------------------------
1,这个问题,我们的Mini板的GSM模块例程就有,实现函数如下:
//PA2和PA3 IO口方向设置函数
//因为USART2也用到PA2,PA3,和SPI FLASH/SD卡的CS有冲突,故需要设置方向
//mode:0,SPI FLASH/SD卡工作
//      1,USART2工作
void SPI_USART_IO_SET(u8 mode)
{  
if(mode)//设置为USART 工作模式
{
GPIOA->CRL&=0XFFFF00FF; 
GPIOA->CRL|=0X00008B00;//PA2.3 复用输出+上拉输入 
GPIOA->ODR|=3<<2;
}else

GPIOA->CRL&=0XFFFF00FF; 
GPIOA->CRL|=0X00003300;//PA2.3 推挽输出 
GPIOA->ODR|=3<<2;
}
}
也是分时复用PA2,PA3

2,MCUISP不可能提示蓝牙模块找不到。
mcuisp下载代码的时候,你液晶也灭了,不知道你哪里看到检测不到蓝牙模块的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2015-2-9
在线时间
0 小时
 楼主| 发表于 2015-5-1 23:37:17 | 显示全部楼层
真是不容易,谢谢原子哥了,终于解决了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 22:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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