正点原子学习小组
直播中

jinglixixi

8年用户 1552经验值
擅长:嵌入式技术 光电显示 接口/总线/驱动 控制/MCU
私信 关注
[经验]

【正点原子STM32探索者V3开发板体验】 开发环境的构建与GPIO口的使用

STM32F407开发板支持以MDK进行开发,本人所用的以前安装的版本MDK5.25,然后安装了最新版本的支持包2.17.0,这样就可以在芯片列表中查看到STM32F407的身影,见图1所示。
image.png

图1 完成支持包安装

在安装完成官方提供的例程后,打开相关例程即可进入编辑界面,见图2所示。
image.png

图2 编辑界面

经编译其结果如图3所示,可生成相应的目标文件。
image.png

图3 完成编译

为便于下载调试,这里所使用的是外观的调试工具,见图4所示。对调试工具的设置如图5和图6所示。

image.png

image.png

图4 连接调试工具

相应的连接关系为:
DIO---PA13
CLK---PA14

image.png

图5 设置调试工具

image.png

图6 完成调试工具连接

对开发板的烧录算法选择见图7所示,下载后其结果如图8所示。
image.png

图7 烧录算法选取

image.png

图8 完成下载

为LED的控制程序为例,其程序内容为:

void led_init(void);

int main(void)
{   
HAL_Init();   
sys_stm32_clock_init(336, 8, 2, 7);    
delay_init(168);   
led_init();   
while(1)
 {       
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);       
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_SET);       
delay_ms(500);       
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);       
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET);       
delay_ms(500);
 }
}

void led_init(void)
{   
GPIO_InitTypeDef gpio_init_struct;   
__HAL_RCC_GPIOF_CLK_ENABLE();   
gpio_init_struct.Pin = GPIO_PIN_9;   
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;   
gpio_init_struct.Pull = GPIO_PULLUP;   
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;   
HAL_GPIO_Init(GPIOF, &gpio_init_struct);   
gpio_init_struct.Pin = GPIO_PIN_10;   
HAL_GPIO_Init(GPIOF, &gpio_init_struct);   
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET);   
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_SET);
}

LED的电路如图9所示,由此可知它是通过向PF9和PF10输出高低电平来控制LED灯的亮灭。
image.png

图9 LED电路

KEY的电路如图10所示,可以通过读取PE2和PE3的状态来控制LED灯的亮灭。

image.png

图10 KEY电路

对KEY的初始化函数为:

void key_init(void)
{   
GPIO_InitTypeDef gpio_init_struct;   
__HAL_RCC_GPIOE_CLK_ENABLE();    
gpio_init_struct.Pin = GPIO_PIN_2;   
gpio_init_struct.Mode = GPIO_MODE_INPUT;   
gpio_init_struct.Pull = GPIO_PULLUP;   
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;   
HAL_GPIO_Init(GPIOE, &gpio_init_struct);   
gpio_init_struct.Pin = GPIO_PIN_3;    
HAL_GPIO_Init(GPIOE, &gpio_init_struct); 
}

以KEY控制LED的主程序为:

int main(void)
{   
HAL_Init();
sys_stm32_clock_init(336, 8, 2, 7);   
delay_init(168);   
led_init();   
key_init();
while(1)
{       
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)==GPIO_PIN_RESET) 
{                         HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);
}       
else
{             
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);
}               
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)==GPIO_PIN_RESET)
{             
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET);  
}       
else
{              HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_SET);
}
}
}

经程序的编译和下载,即可见到正确的控制效果。以此为基础,后面的任务是解决显示屏的显示驱动问题。

更多回帖

发帖
×
20
完善资料,
赚取积分