OpenEdv-开源电子网

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

我有来请教问题了,打死点不亮这个LED

[复制链接]

4

主题

23

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-3-14
在线时间
10 小时
发表于 2018-3-30 22:58:20 | 显示全部楼层 |阅读模式
13金钱
请教大家一个简单的问题,我实在想不出那儿有问题了
                                                       板子开F4的,真心买后悔了,资源太多;

我这几天琢磨着,不用库函数开发,我用寄存器,这样,即便是其他公司单片机,我也好上手一点,但是,现在,为什么我的LED灯就是点不亮呢,函数如下



地址没得问题啊

主函数.png 结构体2.png 结构体.png 地址映射别名.png




是不是还缺点什么啊,如果缺,能麻烦告知一下,分别用主函数的方法一和方法二实现LED灯亮,分别需要补什么,板子好像是F407ZGT6样,学不会啊,感觉,真还重头学51,好蠢啊

最佳答案

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

现在问题解决了,谢谢楼上的各位好心人给予的帮助,谢谢你们哈!!!! 具体的情况,我也不知道是怎么回事,我自己建的工程,自己编辑的文件明,不行,然后我拷贝了标准例程,然后改里面文件的名字,以及文本内容,按照我上传的这种表达方式,居然亮了,亮了,你知道吗?全程全是复制,粘贴,不然就是另存为,,我也很不明白,是为什么,希望有那位前辈,能解解惑,不胜感激 很神奇
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

23

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-3-14
在线时间
10 小时
 楼主| 发表于 2018-3-30 22:58:21 | 显示全部楼层
现在问题解决了,谢谢楼上的各位好心人给予的帮助,谢谢你们哈!!!!


具体的情况,我也不知道是怎么回事,我自己建的工程,自己编辑的文件明,不行,然后我拷贝了标准例程,然后改里面文件的名字,以及文本内容,按照我上传的这种表达方式,居然亮了,亮了,你知道吗?全程全是复制,粘贴,不然就是另存为,,我也很不明白,是为什么,希望有那位前辈,能解解惑,不胜感激



很神奇
回复

使用道具 举报

2

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2016-11-13
在线时间
40 小时
发表于 2018-3-31 00:06:59 | 显示全部楼层
点一个灯而已,有这么复杂吗
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-3-31 01:53:34 | 显示全部楼层
跑马灯我们不是有参考例程么? 你直接在我们例程基础上giant出来先。  你的第一个main函数,我看不完整啊,while没有结束}。  另外,既然是寄存器写代码,完全可以仿真下,看寄存器的状态,就知道哪里有问题了。
回复

使用道具 举报

2

主题

35

帖子

0

精华

高级会员

Rank: 4

积分
533
金钱
533
注册时间
2014-5-17
在线时间
81 小时
发表于 2018-3-31 08:39:33 | 显示全部楼层
1.看了下手册,楼主的GPIO_TypeDef数据结构,不应该是,请注意uint16_t
[mw_shl_code=c,true]typedef struct
{
  __IO uint32_t MODER;    /*!< GPIO port mode register,               Address offset: 0x00      */
  __IO uint32_t OTYPER;   /*!< GPIO port output type register,        Address offset: 0x04      */
  __IO uint32_t OSPEEDR;  /*!< GPIO port output speed register,       Address offset: 0x08      */
  __IO uint32_t PUPDR;    /*!< GPIO port pull-up/pull-down register,  Address offset: 0x0C      */
  __IO uint32_t IDR;      /*!< GPIO port input data register,         Address offset: 0x10      */
  __IO uint32_t ODR;      /*!< GPIO port output data register,        Address offset: 0x14      */
  __IO uint16_t BSRRL;    /*!< GPIO port bit set/reset low register,  Address offset: 0x18      */
  __IO uint16_t BSRRH;    /*!< GPIO port bit set/reset high register, Address offset: 0x1A      */
  __IO uint32_t LCKR;     /*!< GPIO port configuration lock register, Address offset: 0x1C      */
  __IO uint32_t AFR[2];   /*!< GPIO alternate function registers,     Address offset: 0x20-0x24 */
} GPIO_TypeDef;[/mw_shl_code]
2. 楼主想点亮那个IO口啊?没说明!!需要注意一点,BSSR这个寄存器使用时,是写1才会改变IO口,写0等于没写。
回复

使用道具 举报

23

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
607
金钱
607
注册时间
2017-8-8
在线时间
145 小时
发表于 2018-3-31 12:32:57 | 显示全部楼层
用STM32CUBE   HAL库吧,工程都帮你建好了。
在while(1)里添加代码就行了。
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET)   //PA0置1
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET)   //PA0置0
省事多了。。。
回复

使用道具 举报

4

主题

23

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-3-14
在线时间
10 小时
 楼主| 发表于 2018-4-1 16:36:20 | 显示全部楼层
HEHEGO 发表于 2018-3-31 00:06
点一个灯而已,有这么复杂吗

我也不知道是不是复杂了,目的就是练练手,用的每个东西,我想知道,为什么要这样用
回复

使用道具 举报

4

主题

23

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-3-14
在线时间
10 小时
 楼主| 发表于 2018-4-1 16:38:29 | 显示全部楼层
本帖最后由 爱吃的boy 于 2018-4-1 16:42 编辑
正点原子 发表于 2018-3-31 01:53
跑马灯我们不是有参考例程么? 你直接在我们例程基础上giant出来先。  你的第一个main函数,我看不完整啊, ...
例程是有,但是老师,我的目的,不是让LED灯亮,我是想知道,他是怎么去操作的,要操作那些东西,库函数开发固然好,但是,我想,不是每家公司都像ST这样的啊,万一,遇上偏门的,

while是个死循环,程序本身没得报错的,我就是不知道哪里出问题了,“看寄存器状态”,是直接用买的那个烧写器,去仿真吗??
回复

使用道具 举报

4

主题

23

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-3-14
在线时间
10 小时
 楼主| 发表于 2018-4-1 16:41:01 | 显示全部楼层
lovewjl 发表于 2018-3-31 12:32
用STM32CUBE   HAL库吧,工程都帮你建好了。
在while(1)里添加代码就行了。
HAL_GPIO_WritePin(GPIOA,GPI ...

我只是想知道,他只是怎么去实现LED的,虽然,这儿提供了很全面的库,但是,万一要是遇到了,不适用ST的芯片的呢?用的偏门的芯片,我不就蒙了
回复

使用道具 举报

4

主题

23

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-3-14
在线时间
10 小时
 楼主| 发表于 2018-4-1 16:45:01 | 显示全部楼层
zhangfj2010 发表于 2018-3-31 08:39
1.看了下手册,楼主的GPIO_TypeDef数据结构,不应该是,请注意uint16_t
[mw_shl_code=c,true]typedef stru ...

我想点亮PF9  or  PF10  那个IO口,倒是无所谓,假如已这个程序为例,点亮PF9,就是不知道,我是哪里弄错了,还是缺点啥子,地址我是仔细核对过,应该没得问题
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2018-4-1 18:22:34 | 显示全部楼层
用仿真器查看时钟寄存器,时钟启动成功了没有?
查看GPIO寄存器,Pin设置正不正确?
回复

使用道具 举报

4

主题

23

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-3-14
在线时间
10 小时
 楼主| 发表于 2018-4-1 21:41:19 | 显示全部楼层
d1z1y2 发表于 2018-4-1 18:22
用仿真器查看时钟寄存器,时钟启动成功了没有?
查看GPIO寄存器,Pin设置正不正确?

刚刚试了,全是0000000,没有一个是大于0的。。。。。。。。这个,就是,时钟启动了吗?
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2018-4-1 23:04:28 | 显示全部楼层
爱吃的boy 发表于 2018-4-1 21:41
刚刚试了,全是0000000,没有一个是大于0的。。。。。。。。这个,就是,时钟启动了吗?

看参考手册啊
回复

使用道具 举报

4

主题

23

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-3-14
在线时间
10 小时
 楼主| 发表于 2018-4-2 16:29:50 | 显示全部楼层

就是看了,开发板的开发指南,还有芯片手册,都看了,感觉自己的程序应该是没得问题的,但是不知道就是什么不对,我想自己映射寄存器地址,自己用自己的理解去操作他,实现LED灯亮,虽然有现成的库,但是,有些东西,晓得可以这门用,但不知道这门用的原理啊,所以就自己看手册,看例子,然后,就成了这样了,灯就点不亮了
回复

使用道具 举报

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
发表于 2018-4-2 17:22:50 | 显示全部楼层
居然无聊的帮你找了一下错误。。。。。GPIO_Set(GPIOF,1<<9  不能直接写9吧。。。。。。。。。
回复

使用道具 举报

3

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2016-9-1
在线时间
53 小时
发表于 2018-4-2 17:27:41 | 显示全部楼层
孟亮 发表于 2018-4-2 17:22
居然无聊的帮你找了一下错误。。。。。GPIO_Set(GPIOF,1

那不是写9吧,把1左移9位
回复

使用道具 举报

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
发表于 2018-4-2 17:36:46 | 显示全部楼层
利弊 发表于 2018-4-2 17:27
那不是写9吧,把1左移9位

是呀,可他的函数里直接用的9,没用2^9
回复

使用道具 举报

4

主题

23

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-3-14
在线时间
10 小时
 楼主| 发表于 2018-4-2 19:51:54 | 显示全部楼层
孟亮 发表于 2018-4-2 17:36
是呀,可他的函数里直接用的9,没用2^9

那个不用*2,我的GPIO_Set,里面有的,而且,我还用的有操作BSRR寄存器,全部都是置1
回复

使用道具 举报

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
发表于 2018-4-3 08:04:06 来自手机 | 显示全部楼层
那不是*2,是左移
回复

使用道具 举报

3

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2016-9-1
在线时间
53 小时
发表于 2018-4-3 10:57:14 | 显示全部楼层
我才看见,STM32每一组只有16个I/O口,你1<<(2*9)给到哪去了
回复

使用道具 举报

4

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1046
金钱
1046
注册时间
2017-5-19
在线时间
335 小时
发表于 2018-4-3 13:17:23 | 显示全部楼层
直接点进去不就知道库函数是怎么干的了么。。。
[mw_shl_code=c,true]/**
  * @brief  Sets the selected data port bits.
  * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.
  * @param  GPIO_Pin: specifies the port bits to be written.
  *   This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
  * @retval None
  */
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
//  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
//  assert_param(IS_GPIO_PIN(GPIO_Pin));
  
  GPIOx->BSRR = GPIO_Pin;
}
#define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!< Pin 3 selected */[/mw_shl_code]
回复

使用道具 举报

4

主题

23

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-3-14
在线时间
10 小时
 楼主| 发表于 2018-4-3 21:46:03 | 显示全部楼层
wxjhby 发表于 2018-4-3 13:17
直接点进去不就知道库函数是怎么干的了么。。。
[mw_shl_code=c,true]/**
  * @brief  Sets the selected ...

我就是一步一个脚印干的,原理懂了,但是就是不亮
回复

使用道具 举报

10

主题

32

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2108
金钱
2108
注册时间
2018-3-22
在线时间
182 小时
发表于 2018-4-3 22:56:41 | 显示全部楼层
板子不用给我玩。我带你玩。我来帮你验证。你这玩的未免也太累了。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 00:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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