ex1 GPIO输出实验
实验目的:掌握GPIO的输出功能。
实验现象:PC15输出低电平,点亮LD5指示灯。
关键代码:
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();//初始化了GPIO15
while (1)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_RESET); // PC15输出低电平,点亮LD15指示灯
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOC_CLK_ENABLE();// GPIOC端口时钟使能
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);//配置GPIO引脚输出电平
/*Configure GPIO pin : PC15 */
GPIO_InitStruct.Pin = GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
ex2 GPIO输入实验
实验目的:掌握GPIO的输入功能。
实验现象:按下USER按键,LD5点亮,松开后熄灭。
关键代码:
int main(void)
{
uint8_t UserKey_Value = 0;
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();//初始化ex2使用到的USER按键即GPIO_PIN_14,LD5即GPIO_PIN_15。
while (1)
{
UserKey_Value = HAL_GPIO_ReadPin(GPIOC, USER_KEY);//读取一个输入IO口的电平
if (UserKey_Value == 0)
{
HAL_GPIO_WritePin(GPIOC, LD5, GPIO_PIN_RESET);
}
else if (UserKey_Value == 1)
{
HAL_GPIO_WritePin(GPIOC, LD5, GPIO_PIN_SET);
}
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();// GPIOC端口时钟使能
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);
/*Configure GPIO pin : PC14 */
GPIO_InitStruct.Pin = GPIO_PIN_14;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pin : PC15 */
GPIO_InitStruct.Pin = GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
结合基础实验ex2和外设实验ex4
实现user键同时开关继电器所控制的 LD5、LED0和LED1。
int main(void)
{
HAL_Init();
GPIO_InitTypeDef GPIO_InitStruct = {0};
/*
在GPIO初始化的步骤中需要
置GPIOC使能以响应LD5,
置GPIOA使能以响应LED0和LED1。A
*/
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 | GPIO_PIN_1 , GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);
/*Configure GPIO pins : PA0 PA1 */
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_14;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pin : PC15 */
GPIO_InitStruct.Pin = GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
uint8_t UserKey_Value=0;
while(1){
UserKey_Value = HAL_GPIO_ReadPin(GPIOC, USER_KEY);//读取一个输入IO口的电平
if (UserKey_Value == 0)//亮
{
HAL_GPIO_WritePin(GPIOC, LD5, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, led0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, led1, GPIO_PIN_SET);
}
else if (UserKey_Value == 1)//灭
{
HAL_GPIO_WritePin(GPIOC, LD5, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, led0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, led1, GPIO_PIN_RESET);
}
}
}