OpenEdv-开源电子网

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

stm8库函数疑惑

[复制链接]

5

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2014-5-20
在线时间
0 小时
发表于 2014-5-24 14:27:54 | 显示全部楼层 |阅读模式
5金钱
请问stm8中的库函数BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin);  我的程序里 
  ucResult|=(bool) GPIO_ReadInputPin(GPIOC, MF522_SO),为什么读出的ucResult值一直是0,是库函数有什么问题吗,
有没有人碰到过呢?

最佳答案

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

回复【3楼】月恨: --------------------------------- 你要看GPIO_ReadInputPin的函数返回值。 返回1,和返回0X80,就不一样了  你这个BitStatus强制转换,如果最低位是1,就是1,如果最低位是0呢? 比如0X80,你转出来,是0,还是1? 测试下吧。这种纯c问题,很好验证的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2014-5-24 14:27:55 | 显示全部楼层
回复【3楼】月恨:
---------------------------------
你要看GPIO_ReadInputPin的函数返回值。
返回1,和返回0X80,就不一样了
 你这个BitStatus强制转换,如果最低位是1,就是1,如果最低位是0呢?
比如0X80,你转出来,是0,还是1?
测试下吧。这种纯c问题,很好验证的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2014-5-24 23:14:54 | 显示全部楼层
把你这个bool),去掉.再试试.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2014-5-20
在线时间
0 小时
 楼主| 发表于 2014-5-25 00:50:05 | 显示全部楼层
试过了  还是一样,我在串口里面打印 GPIO_ReadInputPin(GPIOC, MF522_SO)的值一直为0,所以ucResult也就一直为0 了。
请问GPIO_ReadInputPin这个库函数为什么读取MF522_SO的值会一直为0 。这是模拟SPI通信,读取寄存器的部分代码如下:
 for(i=8;i>0;i--)
      {
          GPIO_WriteHigh(GPIOD,MF522_SCK );
        
          ucResult <<= 1;
         
          ucResult|= ((BitStatus))(GPIO_ReadInputPin(GPIOC, MF522_SO));
          
        
           
          GPIO_WriteLow(GPIOD, MF522_SCK);
              
      }
     GPIO_WriteHigh(GPIOA,MF522_NSS);
     GPIO_WriteHigh(GPIOD,MF522_SCK );
    
     return ucResult;
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-25 14:36:46 | 显示全部楼层
回复【3楼】月恨:
---------------------------------
直接上寄存器操,学习原子哥的爱好,呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

5

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2014-5-20
在线时间
0 小时
 楼主| 发表于 2014-5-25 22:51:03 | 显示全部楼层
时间紧,来不及熟悉寄存器。先用库函数解决。
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2014-7-21
在线时间
0 小时
发表于 2014-7-21 08:17:36 | 显示全部楼层
其实,寄存器和库函数一样的。我以前学stm32就是用库函数,现在学stm8就是用寄存器
回复

使用道具 举报

5

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2014-5-20
在线时间
0 小时
 楼主| 发表于 2014-7-31 16:08:36 | 显示全部楼层
回复【7楼】junzhi:
---------------------------------
stm8的寄存器没有stm32复杂   我现在是边做边学
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2014-7-21
在线时间
0 小时
发表于 2014-8-6 08:18:57 | 显示全部楼层
回复【8楼】月恨:
---------------------------------
你也和我一样学寄存器的?
回复

使用道具 举报

5

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2014-5-20
在线时间
0 小时
 楼主| 发表于 2014-8-12 14:13:25 | 显示全部楼层
回复【9楼】junzhi:
---------------------------------
没有
回复

使用道具 举报

10

主题

75

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2015-5-22
在线时间
0 小时
发表于 2015-9-2 16:39:03 | 显示全部楼层
回复【8楼】月恨:
---------------------------------
stm8 寄存器编程里面比如 C_ODR这些寄存器名字是在哪里定义的?
我建了一个战舰stm32交流群:320350722 新手请教老手,老手大显身手! stm32交流群:320350722 stm32交流群:320350722
回复

使用道具 举报

10

主题

560

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1709
金钱
1709
注册时间
2014-6-27
在线时间
928 小时
发表于 2015-10-29 14:58:44 | 显示全部楼层
回复【10楼】月恨:
---------------------------------
库函数里面的实现代码有问题,你要改下,
回复

使用道具 举报

10

主题

560

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1709
金钱
1709
注册时间
2014-6-27
在线时间
928 小时
发表于 2015-10-29 15:03:48 | 显示全部楼层
回复【10楼】月恨:
---------------------------------
 /**
  * @brief  Reads the specified GPIO input data pin.
  * @param  GPIOx: Select the GPIO peripheral number (x = A to I).
  * @param  GPIO_Pin: Specifies the pin number.
  * @retval BitStatus: GPIO input pin status.
  */
BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
{
  if(((GPIO_Pin&0x0f)==0x0f)||((GPIO_Pin&0xf0)==0xf0))
        return ((BitStatus)(GPIOx->IDR & (uint8_t)GPIO_Pin));
  else
        return (((GPIOx->IDR & (uint8_t)GPIO_Pin)>0)?SET:RESET);
}
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-9-30 04:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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