打印
[STM32F1]

Cube库真心不好用

[复制链接]
5573|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jeffkuang|  楼主 | 2015-5-23 15:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pi, IO, GPIO, gp, ST
今天使用了一下CubeMx,在使用stm32f1xx_hal_gpio与原来的stm32f10x_gpio差别有点,
原来的库好用,
比如说我要操作多个IO
原来的程序为:GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6);
在Cube库里竟然没有这个函数了,需要调用三次:
HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
怎么为这样子呢?
还是说我没有理解对吗?
沙发
jeffkuang|  楼主 | 2015-5-23 15:47 | 只看该作者
竟然代理商推荐我使用Cube库,无语呀!:L

使用特权

评论回复
板凳
wind~风| | 2015-5-23 18:06 | 只看该作者
HAL_GPIO_WritePin(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6,1);就可以了,或者最后一个参数是1/0,SET/RESET,都一样



//我猜的,你好好看看函数参数

使用特权

评论回复
地板
sting_yang| | 2015-5-23 18:24 | 只看该作者
用自己习惯的库吧!

使用特权

评论回复
5
mark0668| | 2015-5-23 18:54 | 只看该作者
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{
  /* Check the parameters */
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  assert_param(IS_GPIO_PIN_ACTION(PinState));

  if(PinState != GPIO_PIN_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BSRR = (uint32_t)GPIO_Pin << 16;
  }
}


嗯,他源码是这样的

使用特权

评论回复
6
mark0668| | 2015-5-23 18:56 | 只看该作者
GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6);

按这写法是可以的;

HAL_GPIO_WritePin(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6);

使用特权

评论回复
7
戈卫东| | 2015-5-23 19:48 | 只看该作者
我拿它做管脚分配,做完了程序还是用寄存器写。。。。。

使用特权

评论回复
8
fjjjnk1234| | 2015-5-23 19:55 | 只看该作者
只能说用得不习惯吧

使用特权

评论回复
9
jeffkuang|  楼主 | 2015-5-23 19:57 | 只看该作者
本帖最后由 jeffkuang 于 2015-5-23 20:04 编辑
mark0668 发表于 2015-5-23 18:56
GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6);

按这写法是可以的;

源码这样写的:
/**
  * @brief  Sets or clears the selected data port bit.
  *
  * @NOTE   This function uses GPIOx_BSRR register to allow atomic read/modify
  *         accesses. In this way, there is no risk of an IRQ occurring between
  *         the read and the modify access.
  *               
  * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral
  * @param  GPIO_Pin: specifies the port bit to be written.
  *          This parameter can be one of GPIO_PIN_x where x can be (0..15).
  * @param  PinState: specifies the value to be written to the selected bit.
  *          This parameter can be one of the GPIO_PinState enum values:
  *            @arg GPIO_BIT_RESET: to clear the port pin
  *            @arg GPIO_BIT_SET: to set the port pin
  * @retval None
  */
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

使用特权

评论回复
10
mark0668| | 2015-5-23 20:03 | 只看该作者
  if(PinState != GPIO_PIN_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BSRR = (uint32_t)GPIO_Pin << 16;
  }

你看的明白这两句寄存器是什么吗?

使用特权

评论回复
11
jeffkuang|  楼主 | 2015-5-23 20:05 | 只看该作者
mark0668 发表于 2015-5-23 20:03
if(PinState != GPIO_PIN_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;

我应该说的是上面那个参数,刚才标错了。新库的源码与老库不一样。

使用特权

评论回复
12
mark0668| | 2015-5-23 20:32 | 只看该作者
参数这个集在一起好啊,不用多个函数

使用特权

评论回复
13
jeffkuang|  楼主 | 2015-5-23 20:46 | 只看该作者
mark0668 发表于 2015-5-23 20:03
if(PinState != GPIO_PIN_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;

看明白了,谢了。

使用特权

评论回复
14
mmuuss586| | 2015-5-23 23:36 | 只看该作者

使用特权

评论回复
15
McuPlayer| | 2015-5-24 01:24 | 只看该作者
Cube库的思路,更系统,更多考虑到了移植
我觉得是,老项目维持老库,新项目尽量用新库

使用特权

评论回复
16
lvyunhua| | 2015-5-24 12:35 | 只看该作者
习惯就好,以后是趋势。

使用特权

评论回复
17
jonyzhu| | 2015-5-24 19:57 | 只看该作者
没事儿,吐习惯就好了。

使用特权

评论回复
18
jeffkuang|  楼主 | 2015-5-25 10:07 | 只看该作者
McuPlayer 发表于 2015-5-24 01:24
Cube库的思路,更系统,更多考虑到了移植
我觉得是,老项目维持老库,新项目尽量用新库 ...

谢谢你的建议。

使用特权

评论回复
19
Marco-Marco| | 2015-5-25 10:40 | 只看该作者
jeffkuang 发表于 2015-5-23 15:47
竟然代理商推荐我使用Cube库,无语呀!

我是代理商,仍然推荐你用Cube。
1、不否认关键时刻调试仍然要看寄存器。
2、各个系列F0-F4,L0,L1的软件真正做到完全兼容,函数名完全一模一样可以替代。
3、时钟配置,资源管脚配置的便捷性不用说了,图形化嵌入式是趋势。
4、第一次用某个系列(比如F0,)会下载一个库,库里面的例程很重要,也很清晰。
5、买ST MCU芯片欢迎找我,胡炳祥 QQ : 2355925820.  phn:13802244305.  @赛易

使用特权

评论回复
20
jeffkuang|  楼主 | 2015-5-25 12:18 | 只看该作者
Marco-Marco 发表于 2015-5-25 10:40
我是代理商,仍然推荐你用Cube。
1、不否认关键时刻调试仍然要看寄存器。
2、各个系列F0-F4,L0,L1的软 ...

F0~F4函数名不一样。

使用特权

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

本版积分规则

15

主题

120

帖子

0

粉丝