打印

STM32的gpio奇怪失控??

[复制链接]
4305|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sunshine98|  楼主 | 2007-12-27 09:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是keil.
遇到到 PA.15 , PB.4 , PB.5 等无法设置输出状态.
在keil的调试状态就感觉无法正常设置.而引脚设置跟附近的一样,看起来没错.
但无法正常设置.其他的比如PB0~PB3等就没有问题.
初始化的语句:应该没有问题.
  /* Configure PB.0 --, PB.9 as Output push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | 
              GPIO_Pin_4 | GPIO_Pin_5 |GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 ;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
沙发
香水城| | 2007-12-27 09:54 | 只看该作者

您用的那几个I/O口默认是JTAG的调试口

如果要把他们当普通I/O口用,需要把JTAG关闭才行。

请看STM32技术参考手册的第5.3.4节。

使用特权

评论回复
板凳
sunshine98|  楼主 | 2007-12-27 09:59 | 只看该作者

好象这几个引脚都是jtag,呵呵

查资料去了.:D

使用特权

评论回复
地板
sunshine98|  楼主 | 2007-12-27 10:00 | 只看该作者

ha,香主回的好快!

谢谢!我刚才在看原理图呢.:D

使用特权

评论回复
5
香水城| | 2007-12-27 10:08 | 只看该作者

您的标题太吓人了,哈哈

使用特权

评论回复
6
sunshine98|  楼主 | 2007-12-27 10:54 | 只看该作者

hehe

香主,我这样做了,您可正确否?
  //初始化GPIO接口
  /* Enable SWJ , Disable JTAG */
  GPIO_PinRemapConfig( GPIO_Remap_SWJ_JTAGDisable , ENABLE );
模拟可以正确的设置AFIO_MAPR, 0x0200 0000 ,正是我想要的。
硬件坊真MAPR没有反应??看来好象有些设置我还没有做.
资料我看的有点囫囵吞枣,:D

使用特权

评论回复
7
sunshine98|  楼主 | 2007-12-27 11:38 | 只看该作者

上面的问题已解决,

呵呵,搜了以下资料,然后多试了几次.找到原因,呵呵,希望看到该帖的能省点时间.
是的,在APB2有个AFIO的设置
只要设置Periperal Clock Enable 就ok!!!!
hehe,简单吧??不知道还真费神!!:D

STM32的GPIO预处理过程如下:
  /* Configure the system clocks */
  RCC_Configuration();
  /* NVIC Configuration */
  NVIC_Configuration();

  //初始化GPIO接口
  /* AFIO Periperal Clock Enable */
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO,ENABLE );
  /* Enable SWJ , Disable JTAG */
  GPIO_PinRemapConfig( GPIO_Remap_SWJ_JTAGDisable , ENABLE );
//后面的代码根据你的需要修改即可.
  /* Enable GPIOC clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

  /* Configure PA.8, PC.15 as Output push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_15 ;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  /* Configure PB.0 --, PB.9 as Output push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |GPIO_Pin_4 | GPIO_Pin_5 |GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 ;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* Configure PC.13, PC.14 as Output push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 ;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

/* 至于如何设置GPIO的输出状态,参考下面这个帖子 */

https://bbs.21ic.com/club/bbs/list.asp?boardid=49&page=1&t=2809599&tp=%u6211%u8FD9%u6837%u8BBE%u7F6Egpio%u5BF9%u5417%3F%3F

使用特权

评论回复
8
香水城| | 2007-12-27 11:42 | 只看该作者

楼主是个勤奋好学之人,向你学习!

是不是再把完整的程序发上来,供大家参考,免得他人多走弯路。

香版在此替大家先谢谢啦!

使用特权

评论回复
9
sunshine98|  楼主 | 2007-12-27 12:05 | 只看该作者

感谢香主夸奖!:D

呵呵,开心ing.....:D

使用特权

评论回复
10
grant_jx| | 2007-12-27 12:28 | 只看该作者

STM32的任何外设需要开启都是需要先配置时钟

使用ST的库,最小的工程都是需要包含stm32f10x_rcc.h的

使用特权

评论回复
11
hotpower| | 2008-1-5 02:02 | 只看该作者

现在看还是Keil自带的脚本文件STM32INIT.C设置简单

IAR要是有此功能该多好呀~~~

使用特权

评论回复
12
McuPlayer| | 2008-1-6 00:54 | 只看该作者

哈哈,GPIO这个sample害人啊

这个sample是教我们用JTAG Port做普通IO用,可惜咱等功力不到家。
我是折腾了一天,主要是怀疑焊接问题,耽搁时间了。


相关链接:https://bbs.21ic.com/club/bbs/list.asp?boardid=49&page=1&t=2820585&tp=%u5BF9%u4E8E%u751F%u624B%u6765%u8BF4%uFF0CST%u63D0%u4F9B%u7684GPIO%u8FD9%u4E2Asample%u591F%u5BB3%u4EBA%u7684

使用特权

评论回复
13
hotpower| | 2008-1-6 10:51 | 只看该作者

哈哈~~~"我们会踏着烈士的足迹继续走下去的"~~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

571

帖子

0

粉丝