发新帖本帖赏金 3.00元(功能说明)我要提问
返回列表
打印
[STM32F4]

【f446re开发板试用】快速上手,驱动一个电机控制电路板

[复制链接]
1682|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangbolily|  楼主 | 2015-10-19 21:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
拿到开发板有一阵子了,平时比较忙没时间来试试新的开发板。这次没有尝试开发板的新功能,只是做了一下和我最近比赛有关的一个小程序。这一段我是想放一个视频的,但是时间仓促没剪辑好,下次做好了再更新这个帖子。

1、在STM32CubeMX里面配置好程序
把要用的引脚都配置出来,时钟我们都是用默认的配置不用去管。

在配置界面我们做一些调整

GPIO的配置,我设置了几个引脚来控制电路板。还有一个是按键的端口,用来检测并触发中断。
我参考了很多资料才知道这个按键改检测上升沿还是下降沿。((⊙﹏⊙)b)

NVIC的配置,这里主要是设置上面提到的按键,产生中断来变换控制端口的电平。
我们设置那个EXTI的中断就可以了。


好的,这里我们的工程就配置好了,只要点击生成代码就可以开始编写程序了。我使用的开发环境是Keil,其他的都可以参考一下。


2、简单的一段程序编写
下面的代码程序在文件stm32f4xx_it.c里面,我们找到了中断处理函数 EXTI15_10_IRQHandler(void)。当按键按下触发这个中断的时候,自动调用这个中断处理函数。我在这个函数里面添加了一段用户代码来改变输出口的状态。
void EXTI15_10_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI15_10_IRQn 0 */

  /* USER CODE END EXTI15_10_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
  /* USER CODE BEGIN EXTI15_10_IRQn 1 */
        if(Circle == 0)Circle = 8;
       
        switch (Circle) {
                case 1:
                {
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
                        break;
                }
                case 2:
                {
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
                        break;
                }
                case 3:
                {
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);
                        break;
                }
                case 4:
                {
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);
                        break;
                }
                case 5:
                {
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
                        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
                        break;
                }
                case 6:
                {
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);
                        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
                        break;
                }
                case 7:
                {
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
                        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);
                        break;
                }
                case 8:
                {
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);
                        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);
                        break;
                }
        }
       
        Circle--;
  /* USER CODE END EXTI15_10_IRQn 1 */
}


大致的内容就是这样,下载程序到开发板上就可以正常工作了。


有什么问题可以回复,我一定不会解答……

打赏榜单

21ic小喇叭 打赏了 3.00 元 2015-10-30

沙发
FireRiver9| | 2015-10-19 22:07 | 只看该作者
是按键的上升沿还是下降沿呢

使用特权

评论回复
板凳
zhangbolily|  楼主 | 2015-10-20 16:25 | 只看该作者
FireRiver9 发表于 2015-10-19 22:07
是按键的上升沿还是下降沿呢

看PC13端口的设置,把它上拉了,所以是下降沿。

使用特权

评论回复
地板
gejigeji521| | 2015-10-20 21:31 | 只看该作者
看到好多这种代码,这种方式看来这个确实很好学啊。

使用特权

评论回复
5
643757107| | 2015-10-20 22:43 | 只看该作者
按键处理上,建议还是用松键检测比较靠谱。

使用特权

评论回复
6
捉虫天师| | 2015-10-25 00:58 | 只看该作者
直接驱动?外部电路怎么做的

使用特权

评论回复
7
zhangbolily|  楼主 | 2015-10-25 09:29 | 只看该作者
捉虫天师 发表于 2015-10-25 00:58
直接驱动?外部电路怎么做的

这里只展示了这个开发板的部分,外围还接了一个电机驱动电路

使用特权

评论回复
8
643757107| | 2015-10-25 14:52 | 只看该作者
49.                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);

50.                        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);
----
清零,写1

使用特权

评论回复
9
gejigeji521| | 2015-10-25 15:44 | 只看该作者
中断处理函数 EXTI15_10_IRQHandler(void)。当按键按下触发这个中断的时候,自动调用这个中断处理函数

使用特权

评论回复
10
zhangbolily|  楼主 | 2015-10-26 21:18 | 只看该作者
643757107 发表于 2015-10-25 14:52
49.                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);

50.                ...

不太懂……

使用特权

评论回复
11
zhangbolily|  楼主 | 2015-10-26 21:20 | 只看该作者
gejigeji521 发表于 2015-10-25 15:44
中断处理函数 EXTI15_10_IRQHandler(void)。当按键按下触发这个中断的时候,自动调用这个中断处理函数 ...

这里有什么问题么?

使用特权

评论回复
12
309030| | 2015-10-28 13:45 | 只看该作者
这段程序实现的基本功能是什么呢

使用特权

评论回复
13
643757107| | 2015-10-28 15:52 | 只看该作者
case 1:
                {
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
                        break;
                }

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
zhangbolily + 1 很给力!
14
643757107| | 2015-11-9 12:11 | 只看该作者
643757107 发表于 2015-10-28 15:52
case 1:
                {
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RES ...

楼主学的HAL也是很给力啊,不知道你有中文的HAL学习资料吗

使用特权

评论回复
发新帖 本帖赏金 3.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

67

帖子

8

粉丝