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

[复制链接]
2050|13
 楼主| zhangbolily 发表于 2015-10-19 21:19 | 显示全部楼层 |阅读模式
拿到开发板有一阵子了,平时比较忙没时间来试试新的开发板。这次没有尝试开发板的新功能,只是做了一下和我最近比赛有关的一个小程序。这一段我是想放一个视频的,但是时间仓促没剪辑好,下次做好了再更新这个帖子。

1、在STM32CubeMX里面配置好程序
把要用的引脚都配置出来,时钟我们都是用默认的配置不用去管。
引脚.png
在配置界面我们做一些调整
配置.png
GPIO的配置,我设置了几个引脚来控制电路板。还有一个是按键的端口,用来检测并触发中断。
我参考了很多资料才知道这个按键改检测上升沿还是下降沿。((⊙﹏⊙)b)
GPIO.png
NVIC的配置,这里主要是设置上面提到的按键,产生中断来变换控制端口的电平。
我们设置那个EXTI的中断就可以了。
NVIC.png

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


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

  4.   /* USER CODE END EXTI15_10_IRQn 0 */
  5.   HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
  6.   /* USER CODE BEGIN EXTI15_10_IRQn 1 */
  7.         if(Circle == 0)Circle = 8;
  8.        
  9.         switch (Circle) {
  10.                 case 1:
  11.                 {
  12.                         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
  13.                         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
  14.                         break;
  15.                 }
  16.                 case 2:
  17.                 {
  18.                         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
  19.                         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
  20.                         break;
  21.                 }
  22.                 case 3:
  23.                 {
  24.                         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
  25.                         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);
  26.                         break;
  27.                 }
  28.                 case 4:
  29.                 {
  30.                         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
  31.                         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);
  32.                         break;
  33.                 }
  34.                 case 5:
  35.                 {
  36.                         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
  37.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
  38.                         break;
  39.                 }
  40.                 case 6:
  41.                 {
  42.                         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);
  43.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
  44.                         break;
  45.                 }
  46.                 case 7:
  47.                 {
  48.                         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
  49.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);
  50.                         break;
  51.                 }
  52.                 case 8:
  53.                 {
  54.                         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);
  55.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);
  56.                         break;
  57.                 }
  58.         }
  59.        
  60.         Circle--;
  61.   /* USER CODE END EXTI15_10_IRQn 1 */
  62. }


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


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

打赏榜单

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 | 显示全部楼层
看到好多这种代码,这种方式看来这个确实很好学啊。
643757107 发表于 2015-10-20 22:43 | 显示全部楼层
按键处理上,建议还是用松键检测比较靠谱。
捉虫天师 发表于 2015-10-25 00:58 来自手机 | 显示全部楼层
直接驱动?外部电路怎么做的
 楼主| zhangbolily 发表于 2015-10-25 09:29 | 显示全部楼层
捉虫天师 发表于 2015-10-25 00:58
直接驱动?外部电路怎么做的

这里只展示了这个开发板的部分,外围还接了一个电机驱动电路
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
gejigeji521 发表于 2015-10-25 15:44 | 显示全部楼层
中断处理函数 EXTI15_10_IRQHandler(void)。当按键按下触发这个中断的时候,自动调用这个中断处理函数
 楼主| zhangbolily 发表于 2015-10-26 21:18 | 显示全部楼层
643757107 发表于 2015-10-25 14:52
49.                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);

50.                ...

不太懂……
 楼主| zhangbolily 发表于 2015-10-26 21:20 | 显示全部楼层
gejigeji521 发表于 2015-10-25 15:44
中断处理函数 EXTI15_10_IRQHandler(void)。当按键按下触发这个中断的时候,自动调用这个中断处理函数 ...

这里有什么问题么?
309030 发表于 2015-10-28 13:45 | 显示全部楼层
这段程序实现的基本功能是什么呢
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 很给力!

查看全部评分

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学习资料吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

67

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部