匿名
未登录
登录
丢石头百科
搜索
查看“STM32CubeMX系列教程1:GPIO”的源代码
来自丢石头百科
名字空间
页面
讨论
English
更多
更多
页面选项
查看
查看源代码
历史
←
STM32CubeMX系列教程1:GPIO
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
打开STM32CubeMX新建工程,选择STMF746IGT6芯片。选择外部高速晶振(HSE). [[File:104213lcurrf1ygdqg7cyk.png]] 根据Open746I-C开发板原理图(原理图可在微雪电子网站上下载),选择按键和LED引脚 [[File:104213odmcuwswbvsmmtas.png]] PA0,PG2,PG3,PD4,PD5,PD11为按键输入管脚,选择GPIO_INPUT模式。 PB6,PB7,PH4,PI8为LED输出控制管脚,选择GPIO_OUTPUT模式。 [[File:104213bwx22h232dzxod3z.png]] 点击Clock Configuration配置系统时钟为216M最高速度。 [[File:104214st8sxbthkntnakgh.png]] 点击Configuration->GPIO配置管脚。五向按键管脚配置为上拉输入模式,WakeUp按键已经为外部下拉,故不用配置(R6为下拉电阻,R5,C3为RC滤波去抖动)。LED管脚配置为低速推挽输出模式,既不上拉也不下拉(即默认的模式不用配置)。 [[File:104214gw01plfywuwfuw11.png]] 点击 [[File:104215bjf8lmmmjhjm0zj9.png]] 生成报告,软件会提示新建工程,输入工程名,选择工程保存路径。IDE选择MDK-ARM V5. [[File:104215ralhgogozofboan1.png]] 在Code Generator中找到Generated files框,勾选Generated periphera initialization as a pair of '.c/.h' files per IP。外设初始化为独立的C文件和头文件。 [[File:104215cra6umscmkrmb1ui.png]] 点击 [[File:104216i5papl2e7tpat391.png]] 生成代码。点击Open Project打开工程。到这里我们就配置好工程外设初始化。 [[File:104216mxdx68xpl166lfl6.png]] 点击Build按钮,然后等一会,Build Optput信息框会输出没有错误没有警告。 [[File:104216hglvsccl5c848fs5.png]] 在gpio.c文件中最后面的USER CODE BEGIN 2和USER CODE END 2中间添加如下四个函数。 (用户代码要加在USER CODE BEGIN N和USER CODE END N之间,否则下次重新生成代码后,会被删除) <syntaxhighlight lang="python"> /* USER CODE BEGIN 2 */ /** * @brief Turns selected LED On. * @param Led: LED to be set on * This parameter can be one of the following values: * @arg LED1 * @arg LED2 * @arg LED3 * @arg LED4 * @retval None */ void BSP_LED_On(Led_TypeDef Led) { HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET); } /** * @brief Turns selected LED Off. * @param Led: LED to be set off * This parameter can be one of the following values: * @arg LED1 * @arg LED2 * @arg LED3 * @arg LED4 * @retval None */ void BSP_LED_Off(Led_TypeDef Led) { HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_RESET); } /** * @brief Toggles the selected LED. * @param Led: LED to be toggled * This parameter can be one of the following values: * @arg LED1 * @arg LED2 * @arg LED3 * @arg LED4 * @retval None */ void BSP_LED_Toggle(Led_TypeDef Led) { HAL_GPIO_TogglePin(GPIO_PORT[Led], GPIO_PIN[Led]); } /** * @brief Returns the current joystick status. * @retval Code of the joystick key pressed * This code can be one of the following values: * @arg WAKEUP * @arg JOY_NONE * @arg JOY_CTR * @arg JOY_DOWN * @arg JOY_LEFT * @arg JOY_RIGHT * @arg JOY_UP */ JOYState_TypeDef BSP_JOY_GetState(void) { /* Check the pressed keys */ if(HAL_GPIO_ReadPin(WAKEUP_GPIO_Port,WAKEUP_Pin) == GPIO_PIN_SET) { return (JOYState_TypeDef) WAKEUP; } else if(HAL_GPIO_ReadPin(CTR_GPIO_Port,CTR_Pin) == GPIO_PIN_RESET) { return (JOYState_TypeDef) JOY_CTR; } else if(HAL_GPIO_ReadPin(DOWN_GPIO_Port,DOWN_Pin) == GPIO_PIN_RESET) { return (JOYState_TypeDef) JOY_DOWN; } else if(HAL_GPIO_ReadPin(LEFT_GPIO_Port,LEFT_Pin) == GPIO_PIN_RESET) { return (JOYState_TypeDef) JOY_LEFT; } else if(HAL_GPIO_ReadPin(RIGHT_GPIO_Port,RIGHT_Pin) == GPIO_PIN_RESET) { return (JOYState_TypeDef) JOY_RIGHT; } else if(HAL_GPIO_ReadPin(UP_GPIO_Port,UP_Pin) == GPIO_PIN_RESET) { return (JOYState_TypeDef) JOY_UP; } else { return (JOYState_TypeDef) JOY_NONE; } } /* USER CODE END 2 */</syntaxhighlight> <syntaxhighlight lang="python"> </syntaxhighlight> <syntaxhighlight lang="python"> 以上三个函数的功能分别为点亮LED,熄灭LED,LED状态翻转,读取按键状态。</syntaxhighlight> <syntaxhighlight lang="python"> 在gpio.c前面添加LED1-LED4的管脚的数组变量。</syntaxhighlight> <syntaxhighlight lang="python"> <syntaxhighlight lang="python"> /* USER CODE BEGIN 1 */ GPIO_TypeDef* GPIO_PORT[] = {LED1_GPIO_Port, LED2_GPIO_Port, LED3_GPIO_Port, LED4_GPIO_Port}; const uint16_t GPIO_PIN[] = {LED1_Pin, LED2_Pin, LED3_Pin, LED4_Pin}; /* USER CODE END 1 */</syntaxhighlight> 在gpio.h前面添加Led_TypeDef和JOYState_TypeDef两个枚举类型。声明刚才添加的四个函数。 <syntaxhighlight lang="python"> /* USER CODE BEGIN Private defines */ typedef enum { LED1 = 0, LED2 = 1, LED3 = 2, LED4 = 3 }Led_TypeDef; typedef enum { JOY_NONE = 0, JOY_CTR = 1, JOY_DOWN = 2, JOY_LEFT = 3, JOY_RIGHT = 4, JOY_UP = 5, WAKEUP = 6 }JOYState_TypeDef; /* USER CODE END Private defines */ void MX_GPIO_Init(void); /* USER CODE BEGIN Prototypes */ void BSP_LED_On(Led_TypeDef Led); void BSP_LED_Off(Led_TypeDef Led); void BSP_LED_Toggle(Led_TypeDef Led); JOYState_TypeDef BSP_JOY_GetState(void); /* USER CODE END Prototypes */</syntaxhighlight> 在main.c文件中的main函数的while循环中添加应用代码。代码中使用switch case语句。先通过BSP_JOY_GetState()语句判断是否有按键按下,然后根据按下的按键改变LED1~LED4的状态。 <syntaxhighlight lang="python"> /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ switch(BSP_JOY_GetState()) { case JOY_UP: BSP_LED_On(LED1);break; case JOY_RIGHT: BSP_LED_On(LED2);break; case JOY_DOWN: BSP_LED_On(LED3);break; case JOY_LEFT: BSP_LED_On(LED4);break; case JOY_CTR: case WAKEUP: BSP_LED_On(LED1); BSP_LED_On(LED2); BSP_LED_On(LED3); BSP_LED_On(LED4); break; default: BSP_LED_Off(LED1); BSP_LED_Off(LED2); BSP_LED_Off(LED3); BSP_LED_Off(LED4); break; } } /* USER CODE END 3 */</syntaxhighlight> 再次编译程序,如果编译没有错误。点击 [[File:104217s32futkci7p92747.png]] 下载到Open746I-C开发板。如果提示错误,可以点击 [[File:104217okv5ebef0ujuugl3.png]] 图标对Option for Target 的Dubug选项进行修改。(图上选的是ST-LINK) <code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; font-size: 12px; line-height: 16px;"> [[File:104217vaeq33v0029rtz0n.png]] </syntaxhighlight>点击Settings->Flash Download勾选 Reset and Run选项。这样程序下载后自动启动运行,不用再按一下复位或者重新上电才能运行。 [[File:175114hispqq11lnh2v7gd.png]] 最后,下载程序见证奇迹的时候。按下不同按键,LED1~LED2灯显示不同的转态。以后写的程序我们可以在这个模板的基础上修改。 </code>
返回至
STM32CubeMX系列教程1:GPIO
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志