完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1 GPIO中断
1.1 打开STM32CubeMX生成keil5工程
int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ printf("Begin GPIO-EXTI Test rn"); //添加串口调试打印代码 /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } 在 usart.c中添加 printf重定向函数 /* USER CODE BEGIN 0 */ int fputc(int ch, FILE *h) { HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 0xFFFF); return ch; } /* USER CODE END 0 */ 在 gpio.c中添加回调函数代码 /* USER CODE BEGIN 2 */ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { HAL_Delay(100); switch(GPIO_Pin) { case GPIO_PIN_2: if(HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) == RESET) { printf("HAL_GPIO_EXTI_Callback-> GPIO_PIN_2rn"); break; } case GPIO_PIN_3: if(HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == RESET) { for(uint8_t i=0; i<10; i++) { printf("HAL_GPIO_EXTI_Callback-> GPIO_PIN_3 [%d]rn",i); HAL_Delay(500); } break; } case GPIO_PIN_4: if(HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == RESET) { printf("HAL_GPIO_EXTI_Callback-> GPIO_PIN_4rn"); break; } default: break; } /*总结:当抢占优先级为2的中断在执行循环语句时, 此时被抢占优先级为1的中断打断, 去执行优先级为1的任务, 当抢占优先级为1的任务执行完毕后,又继续执行抢占优先级为2的任务 直到抢占优先级为2的任务执行完毕*/ } 1.3 串口打印显示结果 2 串口中断接收和发送定长数据 1.1 打开STM32CubeMX生成keil5工程
/* USER CODE BEGIN 1 */ extern uint8_t recv_buf[20]; void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART1) { HAL_UART_Transmit_IT(&huart1,(uint8_t *)recv_buf,10); HAL_UART_Receive_IT(&huart1,(uint8_t *)recv_buf,10); } } /* USER CODE END 1 */ 在 main.c中添加 接收数据的 recv_buff /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ uint8_t recv_buf[20] = {0}; /* USER CODE END 0 */ 在 main.c中添加 打开串口接收中断 /* USER CODE BEGIN 2 */ HAL_UART_Receive_IT(&huart1,(uint8_t *)recv_buf,10); /* USER CODE END 2 */ 1.3 串口打印显示结果 3 定时器——每秒产生一次中断 1.1 打开STM32CubeMX生成keil5工程
7. 配置NVIC中断优先级 8. 生成工程配置 1.2 在keil5中编写代码 1.3 串口打印显示结果 |
|
|
|
最方便的就是用cubemx进行配置了
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1810 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1631 浏览 1 评论
1098 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
737 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1687 浏览 2 评论
1947浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
751浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
584浏览 3评论
604浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
568浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 15:44 , Processed in 0.868933 second(s), Total 45, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号