单片机--中断实验练习

【1】按键中断实验(外部中断)--EXTI:

STM32上电LED(PB0)灯亮 ,当检测到按键(PA8)按下时处理中断事件,变量i++

扩展:知识点 

响应优先级->在两个中断同时触发时,且这两个中断的优先级相同,响应优先级高先执行

验证:扩展知识->仿真的使用

 

寄存器仿真控制  查看

知识点:消抖

消抖是为了避免在按键按下或是抬起时电平剧烈抖动带来的影响,确保在每一次断开或闭合触点时只有一个信号起作用。

方法一:进入中断赋值标号,然后main函数中判断标号,用HAL_Delay消抖

方法二:使用定时器中断消抖

方法三:自己写个延时函数

uint8_t i=0;
void delay(int time)
{
  
}
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{
  if(GPIO_Pin==GPIO_PIN_8)//判断是不是GPIO_PIN_8
	{
		 delay(100);
		 if(GPIO_Pin==GPIO_PIN_8)//判断是不是GPIO_PIN_8
		{
		 i++;
		}
	}
}

【2】串口中断实验(内部中断)--NVIC控制

          发送完成中断实验

          实验要求:主程序发送一句字符串“helloworld”,当这条字符串发送完成时触发中断事件,调用中断服务程序发送“UART Transmit completed!”

实验步骤:

1.打开CubeMX,创建新项目,配置USART1为异步,以及NVIC全局中断

2.发送函数

3.找到串口1的中断服务程序

4. 当发送结束时调用UART_EndTransmit()

5. 找到发送完成中断回调函数:

6.重写发送完成回调函数:

7.实验现象:

当串口发送完“helloworld”之后产生发送完成事件触发中断,执行中断服务程序,并输出“UART Transmit completed!”

【3】 串口接收中断实验

       实验要求:主程序接收到2个字符触发中断,中断服务程序发送“收到了”

1.主程序main.c

 2.中断服务程序usart.c

【4】显示屏显示计时时间

   1. 显示屏显示计时时间,格式为00:00:00,时间以秒为单位自加,当检测到按键按下之后,时间归零,继续从0开始计时。

1.STM32G030C8T6查看底板原理图

2.查看核心板底座原理图

3.打开STM32CubeMX新建工程配置对应引脚

4.将驱动文件放到工程目录下

main.c

/* USER CODE BEGIN 0 */
  uint8_t buf[128]={""};
	uint8_t i=0;
	uint8_t j=0;
	uint8_t k=0;
/* USER CODE END 0 */

int main(){

 /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_Delay(1000);
			i++;
			if(i==60)
			{
				j++;
				i=0;
				if(j==60)
				{
					k++;
					j=0;
					if(k==60)
					{
						k=0;
					}
				}
			}	
			sprintf(buf," %02d : %02d : %02d ",k,j,i);
			Gui_DrawFont_GBK16(8,50,RED,BLACK,buf);
  }
  /* USER CODE END 3 */
}

gpio.c

/* USER CODE BEGIN 1 */
extern uint8_t i;
extern uint8_t j;
extern uint8_t k;
/* USER CODE END 1 */


/* USER CODE BEGIN 2 */
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin==GPIO_PIN_8)
	{
		i=0;
		j=0;
		k=0;
	}	
}
/* USER CODE END 2 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值