cube配置
设置串口波特率和中断
生成工程文件,去hal库的 "stm32l4xx_it"里注释掉串口中断函数(官方有问题,我们自己写!)
usart.h:
usart.h:
- /* Define to prevent recursive inclusion -------------------------------------*/
- #ifndef __USART_H__
- #define __USART_H__
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* Includes ------------------------------------------------------------------*/
- #include "main.h"
- /* USER CODE BEGIN Includes */
- /* USER CODE END Includes */
- extern UART_HandleTypeDef huart1;
- /* USER CODE BEGIN Private defines */
-
- extern uint8_t buff[1024];
- extern uint16_t buff_len;
- extern uint8_t buff_Flag;
-
- /* USER CODE END Private defines */
- void MX_USART1_UART_Init(void);
- /* USER CODE BEGIN Prototypes */
- void USART1_IRQHandler(void);
- void USART1_IT_Enable(void);
- /* USER CODE END Prototypes */
- #ifdef __cplusplus
- }
- #endif
- #endif /* __USART_H__ */
- /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
复制代码
usart.c
usart.c里面添加:
- /* USER CODE BEGIN 1 */
- uint8_t buff[1024];
- uint16_t buff_len=0;
- uint8_t buff_Flag=0;
- void USART1_IT_Enable(void)
- {
- __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);
- __HAL_UART_ENABLE_IT(&huart1, UART_IT_ERR);
- __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
- }
-
- void USART1_IRQHandler(void)
- {
- /* USER CODE BEGIN USART2_IRQn 0 */
- uint8_t Res=0;
- /* USER CODE END USART2_IRQn 0 */
- //HAL_UART_IRQHandler(&huart1); //注释这条语句,不使用HAL库的回调处理
- /* USER CODE BEGIN USART2_IRQn 1 */
-
- //判读是否为接收中断
- if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE)!=RESET))
- {
- HAL_UART_Receive(&huart1,&Res,1,1000);
- buff[buff_len]=Res;
- buff_len++;
- }
- //判读是否为溢出中断
- if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_ORE)!=RESET))
- {
- __HAL_UART_CLEAR_IT(&huart1,UART_CLEAR_OREF);
- }
- //判读是否为接收空闲中断
- if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET))
- {
- __HAL_UART_CLEAR_IT(&huart1,UART_CLEAR_IDLEF); //清除中断标志
- buff_Flag=1; //直到没数据才把标志位至1,主函数才可以判断到
- }
- /* USER CODE END USART2_IRQn 1 */
- }
- /* USER CODE END 1 */
- /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
复制代码
main:- 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 */
- USART1_IT_Enable(); //使能一些中断
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- if(buff_Flag==1)
- {
- HAL_UART_Transmit(&huart1 ,buff,buff_len,0xffff);
- buff_Flag=0;
- buff_len=0;
- }
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }
复制代码
效果
————————————————
版权声明:创客协会的阿蛋°
如有侵权请联系删除
|