目录
一.中断实现LED亮灭
1.新建工程
1.1选择芯片
1.2 设置led,PA5引脚和外部中断EXTI1,PB1
1.3给中断设置下降沿触发,并且上拉电阻。
1.4 配置中断优先级,因为此处只有一个中断,因此它的优先级为0,为最高
1.5配置时钟,设时钟频率为72MHZ
1.6自动生成程序
2.编译写程序
可以看到生成的中断服务函数 void EXTI1_IRQHandler(void)
可以看到在这之中调用了HAL_GPIO_EXTI_Callback(),接下来的函数可以看到是_weak开头,则需要用户自己写函数。
此时到main.c中书写callback程序,用到的库函数是HAL_GPIO_TogglePin(),该函数的作用是翻转电平,即中断一产生,则翻转一次电平。然后编译。
3. 烧录
通电下将boot0置0,然后再次reset后可运行。
4.实验结果
此处因为stm32c8t6没有按键,因此选择使用杜邦线代替开关,每接触一次接地,则产生一次中断。
二.串口通信
1.创建工程
RCC和SYS和CLOCK设置如上面一样
下面设置串口USART1,在MODE下选择Asynchronous(异步通信模式),并且使得USART1中断使之能够
接着就可以直接生成工程了。
2.重定向printf和scanf
之后可以直接使用重定向的函数
- 在 stm32f1xx_hal.c中包含#include <stdio.h> #include <stdio.h>
extern UART_HandleTypeDef huart1; //声明串口
在 stm32f1xx_hal.c 中重写fget和fput函数
/**
* 函数功能: 重定向c库函数printf到DEBUG_USARTx
* 输入参数: 无
* 返 回 值: 无
* 说 明:无
*/
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0x