仅记录本人学习过程中所使用过的函数,以及操作步骤
(学习初期看的是b站keysking的教学视频 视频质量很高推荐入门的小伙伴学习学习 )
按键按下点亮小灯以及按下按键反转小灯亮灭
while (1)
{
HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);
## *****//读取引脚电平状态*****
if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin) == GPIO_PIN_RESET)
***//如果读取到的电平为低电平***
{
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin,GPIO_PIN_SET);
***//则 设置引脚电平为 高电平(set)***
}
else
{
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin,GPIO_PIN_RESET);
}
if(HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin) == GPIO_PIN_RESET)
***//设置另一个按键 读取其电平***
{
HAL_Delay(10);
***//软件消抖 延迟10毫秒读取状态***
if(HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin) == GPIO_PIN_RESET)
{
HAL_GPIO_TogglePin(LED_RED_GPIO_Port,LED_RED_Pin);
//翻转引脚的电平
while(HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin) == GPIO_PIN_RESET)
{}
//设一个循环以等待 如果一直是低电平则不停循环等待 反之跳出
}
}
外部中断(exti)
首先将要使用的按键设置为 GPIO_EXTI (我这里是使用pc5即我的原理图上的KEY0按键)以及将要亮灭的小灯设为GPIO_OUTPUT
我习惯先将SYS里的Debug设置为Serial Wire 如果忘了进行这一步的话可能会导致芯片后续被锁住哟
这里对应分别为上升沿触发中断 下降沿触发中断 因为按键按下时会检测到低电平也就是会有一个下降的趋势所以我们选择下降沿触发
然后来到NVIC也就是中断控制器
进行如图配置 因为后续会使用到HAL_Delay函数而其所依靠System tick timer 会涉及到中断优先级问题所以将我们前面设置过的中断线的数字改成比他大的即可
我这里使用的是MDK_ARM
注意勾选如图
接着点击右上角GENERATE CODE然后Open Project即可
首先在main.c文件这里找到while循环在这里写下小灯循环亮灭的代码
接着找到带it.c后缀(表示与中断inturrupt有关)的文件在最底部找到cubemx为我们生成的中断函数即HAL_GPIO_EXTI_IRQHandler在这里我们先进行软件消抖写下HAL_Delay函数 接着判断按键是否被按下 从而是否翻转红色小灯的亮灭
到此编译下载完成即可实现 绿色小灯以四秒为周期循环亮灭 按下KEY0按键触发中断反转红色小灯的亮灭
3. 串口 轮询模式(长期占用cpu 易堵塞)
找到如USART2 将其改成TTL串口的模式也就是异步通信模式(Asynchronous)
平常保持默认即可
如图写出代码
串口发送函数HAL_UART_Transmit
在前面声明一下
打开keysking做的工具 波特律动串口助手 连接板子即可 注意波特率一致 以及找不到串口的话左下角安装一下对应的驱动 我的学习板是CH343型
接下来是实现电脑给板子发送消息
将先前的代码注释掉或者删掉都可
重新定义一个uint8_t类型
然后使用HAL_UART_Receive()函数来接收电脑发来的消息
此处我直接截图的keysking的视频内容
注意去把要使用的小灯配置好,这里不做截图了 keysking使用的是红 绿 蓝 三个颜色的小灯 我的板子只有红绿灯 所以只写红绿也行 重要的是学会操作
然后就可以使用串口助手给板子发送长度为2的消息了 如 R0 (红色小灯熄灭)B1(蓝色小灯亮)
以下皆为keysking的视频截图 建议大家直接前往观看 我这里主要是为了方便自己日后查看 所以些许潦草哈哈
1. 串口中断模式
DMA
就可以实现不定长收发了