打开STM32CubeMX新建工程,选择STMF746IGT6芯片。选择外部高速晶振(HSE).
根据Open746I-C开发板原理图(原理图可在微雪电子网站上下载),选择按键和LED引脚
0
|
|
|
|
PA0,PG2,PG3,PD4,PD5,PD11为按键输入管脚,选择GPIO_INPUT模式。
PB6,PB7,PH4,PI8为LED输出控制管脚,选择GPIO_OUTPUT模式。
|
|
|
|
|
点击Clock Configuration配置系统时钟为216M最高速度。
|
|
|
|
|
点击Configuration->GPIO配置管脚。五向按键管脚配置为上拉输入模式,WakeUp按键已经为外部下拉,故不用配置(R6为下拉电阻,R5,C3为RC滤波去抖动)。LED管脚配置为低速推挽输出模式,既不上拉也不下拉(即默认的模式不用配置)。
|
|
|
|
|
点击生成报告,软件会提示新建工程,输入工程名,选择工程保存路径。IDE选择MDK-ARM V5.
|
|
|
|
|
在Code Generator中找到Generated files框,勾选Generated periphera initialization as a pair of
'.c/.h' files per IP。外设初始化为独立的C文件和头文件。
|
|
|
|
|
点击生成代码。点击Open Project打开工程。到这里我们就配置好工程外设初始化。
|
|
|
|
|
点击Build按钮,然后等一会,Build Optput信息框会输出没有错误没有警告。
|
|
|
|
|
本帖最后由 lee_st 于 2016-7-4 11:06 编辑
在gpio.c文件中最后面的USER CODE BEGIN 2和USER CODE END 2中间添加如下四个函数。
(用户代码要加在USER CODE BEGIN N和USER CODE END N之间,否则下次重新生成代码后,会被删除)
01 | /* USER CODE BEGIN 2 */ |
04 | * @brief Turns selected LED On. |
05 | * @param Led: LED to be set on |
06 | * This parameter can be one of the following values: |
13 | void BSP_LED_On(Led_TypeDef Led) |
15 | HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET); |
19 | * @brief Turns selected LED Off. |
20 | * @param Led: LED to be set off |
21 | * This parameter can be one of the following values: |
28 | void BSP_LED_Off(Led_TypeDef Led) |
30 | HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_RESET); |
34 | * @brief Toggles the selected LED. |
35 | * @param Led: LED to be toggled |
36 | * This parameter can be one of the following values: |
43 | void BSP_LED_Toggle(Led_TypeDef Led) |
45 | HAL_GPIO_TogglePin(GPIO_PORT[Led], GPIO_PIN[Led]); |
49 | * @brief Returns the current joystick status. |
50 | * @retval Code of the joystick key pressed |
51 | * This code can be one of the following values: |
60 | JOYState_TypeDef BSP_JOY_GetState(void) |
62 | /* Check the pressed keys */ |
63 | if(HAL_GPIO_ReadPin(WAKEUP_GPIO_Port,WAKEUP_Pin) == GPIO_PIN_SET) |
65 | return (JOYState_TypeDef) WAKEUP; |
67 | else if(HAL_GPIO_ReadPin(CTR_GPIO_Port,CTR_Pin) == GPIO_PIN_RESET) |
69 | return (JOYState_TypeDef) JOY_CTR; |
71 | else if(HAL_GPIO_ReadPin(DOWN_GPIO_Port,DOWN_Pin) == GPIO_PIN_RESET) |
73 | return (JOYState_TypeDef) JOY_DOWN; |
75 | else if(HAL_GPIO_ReadPin(LEFT_GPIO_Port,LEFT_Pin) == GPIO_PIN_RESET) |
77 | return (JOYState_TypeDef) JOY_LEFT; |
79 | else if(HAL_GPIO_ReadPin(RIGHT_GPIO_Port,RIGHT_Pin) == GPIO_PIN_RESET) |
81 | return (JOYState_TypeDef) JOY_RIGHT; |
83 | else if(HAL_GPIO_ReadPin(UP_GPIO_Port,UP_Pin) == GPIO_PIN_RESET) |
85 | return (JOYState_TypeDef) JOY_UP; |
89 | return (JOYState_TypeDef) JOY_NONE; |
|
|
|
|
|
以上三个函数的功能分别为点亮LED,熄灭LED,LED状态翻转,读取按键状态。
在gpio.c前面添加LED1-LED4的管脚的数组变量。
01 | /* USER CODE BEGIN 1 */ |
02 | GPIO_TypeDef* GPIO_PORT[] = {LED1_GPIO_Port, |
07 | const uint16_t GPIO_PIN[] = {LED1_Pin, |
在gpio.h前面添加Led_TypeDef和JOYState_TypeDef两个枚举类型。声明刚才添加的四个函数。
01 | /* USER CODE BEGIN Private defines */ |
20 | /* USER CODE END Private defines */ |
22 | void MX_GPIO_Init(void); |
24 | /* USER CODE BEGIN Prototypes */ |
25 | void BSP_LED_On(Led_TypeDef Led); |
26 | void BSP_LED_Off(Led_TypeDef Led); |
27 | void BSP_LED_Toggle(Led_TypeDef Led); |
28 | JOYState_TypeDef BSP_JOY_GetState(void); |
29 | /* USER CODE END Prototypes */
|
|
|
|
|
|
在main.c文件中的main函数的while循环中添加应用代码。代码中使用switch case语句。先通过BSP_JOY_GetState()语句判断是否有按键按下,然后根据按下的按键改变LED1~LED4的状态。
01 | /* USER CODE BEGIN WHILE */ |
04 | /* USER CODE END WHILE */ |
06 | /* USER CODE BEGIN 3 */ |
07 | switch(BSP_JOY_GetState()) |
10 | BSP_LED_On(LED1);break; |
12 | BSP_LED_On(LED2);break; |
14 | BSP_LED_On(LED3);break; |
16 | BSP_LED_On(LED4);break; |
|
|
|
|
|
再次编译程序,如果编译没有错误。点击下载到Open746I-C开发板。如果提示错误,可以点击图标对Option for Target 的Dubug选项进行修改。(图上选的是ST-LINK)
|
|
|
|
|
点击Settings->Flash Download勾选 Reset and Run选项。这样程序下载后自动启动运行,不用再按一下复位或者重新上电才能运行。
最后,下载程序见证奇迹的时候。按下不同按键,LED1~LED2灯显示不同的转态。以后写的程序我们可以在这个模板的基础上修改。
|
|
|
|
|