
接上篇:STM32F0的LL库使用(三) 这次来试试串口中断的简单应用。 硬件:STM32F030F4P6核心板,STLINK-V2-1(即NUCLEO板载仿真器拆下来的) 软件:CubeMX(V2.4.0)+IAR(V8.20) LL库版本V1.9.0 ![]() ![]() ![]() ![]() ![]() ![]() 初始化完毕后开始写程序了。 主程序: int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ LL_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(); /* Initialize interrupts */ MX_NVIC_Init(); /* USER CODE BEGIN 2 */ LL_USART_EnableIT_RXNE(USART1); USART_Print("Ready for Tx\r\n",(uint32_t) sizeof("Ready for Tx\r\n") ); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } 在这写的打印函数,和串口中断服务函数: /* USER CODE BEGIN 4 */ void USART_Print(unsigned char *Send_Text,uint32_t Size_Text) { uint32_t index = 0; for (index = 0; index < Size_Text; index++) { while (!LL_USART_IsActiveFlag_TXE(USART1)); LL_USART_TransmitData8(USART1,Send_Text[index]); } while (!LL_USART_IsActiveFlag_TC(USART1)); } void USART_Reception_Callback(void) { __IO uint8_t UART_Rxdata; UART_Rxdata = LL_USART_ReceiveData8(USART1); LL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); } /* USER CODE END 4 */ 在stm32f0xx_it.c里找到 /** * @brief This function handles USART1 global interrupt. */ void USART1_IRQHandler(void) { /* USER CODE BEGIN USART1_IRQn 0 */ /* USER CODE END USART1_IRQn 0 */ /* USER CODE BEGIN USART1_IRQn 1 */ if(LL_USART_IsActiveFlag_RXNE(USART1) && LL_USART_IsEnabledIT_RXNE(USART1)) { USART_Reception_Callback();//调用串口中断服务函数 } /* USER CODE END USART1_IRQn 1 */ } 打开串口助手来进行实验,发送任意字符,即可翻转A4口上的灯。 注意一下上面的串口中断服务函数要声明一下,再编译。 ... ... |
点评
几块钱吧,哪有9.5