stm32cubef4应用疑问

2019-07-21 01:24发布

最近采用stm32cubef4进行开发,发现库分层比较清晰,使用起来也比较简单,但是提出以下几个疑问。
1、大家有没有使用stm32cubef4进行开发项目历程或者开发板的完整历程(例如:原子哥的)
2、
stm32cubef4库将数据对写与寄存器控制进行了捆,(例如串口:使用中断进行接收,当接收完之后串口接收中断将会关闭,但是我们一般项目正常使用时不会数据接收完之后关闭中断,大部分会将数据与控制进行脱离操作,当然我也可以通过修改库方式实现我想要的功能,但是由于项目紧急,不希望因为这样的改动带来的隐含问题影响后期的项目周期)
3、还有就是上了OS之后__HAL_LOCK锁有没有必要存在
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
taizonglai
1楼-- · 2019-07-21 04:47
1、如果是出现STM32的话不建议用cube直接生成代码,cube生成的也只是一个代码框架,而且这个代码框架回和大多数人的代码风格不同,所以有些有自己固定软件架构和代码风格的人是不会用cube的。
2、你说的这个关闭串口中断我在HAL库中没有遇到过,我也用过USART1的串口接收中断,没有你说的这个当接收数据后这个中断就关闭了的问题。
4、至于cube库上面的__HAL_LOCK锁有没有用,这个东西因人而异,如果你没有用到这个功能,那就说明对你来说它没用,不过HAL库中的大多数情况都用到了LOCK锁,尤其是外设初始化的时候。
止天
2楼-- · 2019-07-21 05:54
stm32cube没用过,我看不太懂它生成的代码

帮顶
wenjinzaime
3楼-- · 2019-07-21 10:33
回复【3楼】zuozhongkai:
---------------------------------
贴段代码,这里就是UART_Receive_IT的处理,当接受计数为0时则会关闭中断!
    if(--huart->RxXferCount == 0)
    {
      __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE);

      /* Check if a transmit process is ongoing or not */
      if(huart->State == HAL_UART_STATE_BUSY_TX_RX) 
      {
        huart->State = HAL_UART_STATE_BUSY_TX;
      }
      else
      {
        /* Disable the UART arity Error Interrupt */
        __HAL_UART_DISABLE_IT(huart, UART_IT_PE);

        /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
        __HAL_UART_DISABLE_IT(huart, UART_IT_ERR);

        huart->State = HAL_UART_STATE_READY;
      }
wenjinzaime
4楼-- · 2019-07-21 11:52
1、由于刚说道CUBE库在接收完之后会关掉相关接收中断,那必须在某处开启,为了不影响实时接收,那就这2种方法比较好,
1)、改库-让其接收完不关闭中断
2)、还有一种就是在他的回调中在次开启中断,这种开开关关不知道会不会对芯片存在影响,而且感觉画蛇添足! 
     就我个人驭剑,CUBE库完全可以把数据处理与寄存器关系完全脱离开来,这样的灵活性才更高!
2、__HAL_LOCK这个宏关闭其功能会不会造成什么影响呢?
wenjinzaime
5楼-- · 2019-07-21 17:16
这个问题暂时到次吧,为了项目进度,已将外围库切换至老库,感谢大家心细解答!

一周热门 更多>