希望本站能帮您提升效率
首页
硬件产品
代码工具
STM32串口初始化代码
软件产品
串口调试工具基础代码
MCOM串口调试工具
STM32F10x标准库基础代码
关于我们
用户手册
用户问答
编程
操作系统
嵌入式
其他
高等数学
网站菜单
首页
硬件产品
代码工具
- STM32串口初始化代码
软件产品
- 串口调试工具基础代码
- MCOM串口调试工具
- STM32F10x标准库基础代码
关于我们
用户手册
用户问答
- 编程
- 操作系统
- 嵌入式
- 其他
- 高等数学
串口1
串口2
串口3
串口4
串口5
////本文件命名为 USART1.c #include "USART1.h" #define USART1_RX_BUFFER_LENTH 256 uint8_t USART1_Rx_Buffer[USART1_RX_BUFFER_LENTH]; uint16_t RxCount1; #define USART1_TX_BUFFER_LENTH 256 uint8_t USART1_Tx_Buffer[USART1_TX_BUFFER_LENTH]; ////串口初始化函数 void USART1_Init(u32 My_BaudRate) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure ; NVIC_InitTypeDef NVIC_InitStructure ; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ; GPIO_Init(GPIOA,&GPIO_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE ; NVIC_Init(&NVIC_InitStructure); USART_DeInit(USART1); USART_InitStructure.USART_BaudRate = My_BaudRate; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx ; USART_Init(USART1, &USART_InitStructure); USART_ITConfig(USART1, USART_IT_IDLE, ENABLE); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_Cmd(USART1 , ENABLE); USART_ClearFlag(USART1, USART_FLAG_TC); //while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); } ////串口中断函数 void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(USART1, USART_IT_RXNE); USART1_Rx_Buffer[RxCount1] = USART_ReceiveData(USART1); RxCount1++; //*********这里自己写收到一个字节的函数******** } if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET){ //空闲中断 USART_ClearITPendingBit(USART1, USART_IT_IDLE); USART_ReceiveData(USART1); //// //*********这里自己写收到一帧数据的函数********* ///USART1_SendString(USART1_Rx_Buffer,RxCount1); ////原样发回去 RxCount1 = 0; USART1->SR; // 读取状态寄存器,清除IDLE标志 USART1->DR; // 读取数据寄存器,确保IDLE标志被清除 } } ////发送一帧数据 void USART1_SendString(uint8_t *str, uint16_t len) { uint16_t count = 0; for(count = 0; count < len; count++) { USART1 -> SR; USART_SendData(USART1, *str++); while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); } } ////发送一个字节 void USART1_SendData(u8 sdata){ USART1 -> SR; USART_SendData(USART1,sdata); while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); }
////本文件命名为 USART1.h #ifndef _USART1_H #define _USART1_H #include "stm32f10x.h" void USART1_Init(u32 My_BaudRate); void USART1_SendData(u8 sdata); void USART1_SendString(uint8_t *str, uint16_t len); #endif ////使用方法,先在main.c中 包含USART1.h文件 #include "USART1.h" ////在main函数while(1)前面加初始化函数 USART1_Init(115200); ///然后就可以在需要发送字节或字符串的地方调用 USART1_SendData(0xAA); 或者 USART1_SendString(USART1_Rx_Buffer,10); 或者 USART1_SendString("hello USART1",12); 这样的函数
回顶部