正点原子STM32开发板USART库函数与寄存器版本对比

版权申诉
0 下载量 58 浏览量 更新于2024-10-17 收藏 297KB ZIP 举报
资源摘要信息: "USART.zip_正点原子" 知识点1:USART(通用同步/异步收发传输器)是微控制器和计算机系统中常见的串行通信接口,用于实现微控制器与外部设备(如PC、GPS模块、蓝牙模块等)之间的串行数据通信。USART通信方式包括同步和异步模式。 知识点2:正点原子STM32开发板是基于STMicroelectronics的STM32微控制器系列的一款开发板。STM32系列微控制器广泛应用于嵌入式系统设计,具有丰富的外设和高性能的处理能力。 知识点3:寄存器版本的USART程序通常涉及对微控制器内部特定寄存器进行直接操作,以控制USART的工作状态和参数设置。这种方法的优点是运行效率高,因为减少了软件层的调用开销。 知识点4:库函数版本的USART程序则是通过调用已经封装好的库函数来简化编程工作,这些库函数对底层寄存器操作进行了抽象,使得开发者能够更容易地实现USART通信功能。 知识点5:改编库函数版本的USART程序意味着开发者在使用正点原子提供的基础库函数基础上,根据具体需求对库函数进行适当的修改和优化,以适应特定的应用场景。 知识点6:在进行USART通信时,通常需要配置的参数包括波特率、数据位、停止位和校验位等。这些参数的设置决定了数据的发送和接收方式,需要根据通信双方的要求来正确设置。 知识点7:正点原子STM32开发板的USART程序可能会提供一些高级功能,例如中断管理、DMA(直接内存访问)数据传输和硬件流控制等。这些功能能够提高数据传输的稳定性和效率。 知识点8:在实际的嵌入式系统设计中,除了编写USART通信程序外,还需考虑通信的可靠性,例如通过软件实现奇偶校验、数据帧校验和超时处理等机制来确保数据传输的正确性。 知识点9:正点原子STM32开发板的用户手册和数据手册是学习和开发过程中不可或缺的资源,它们包含了关于开发板硬件特性、引脚布局、寄存器详细描述等重要信息,有助于开发者更好地理解和使用USART及其他外设。 知识点10:在使用USART进行通信时,还需要考虑电源管理、电磁兼容(EMC)和硬件隔离等硬件层面的问题,这些因素对于保证系统稳定运行同样至关重要。
2023-07-23 上传

void myUSART_Init() { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); USART_InitTypeDef USART_InitStuctyre; USART_InitStuctyre.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_InitStuctyre.USART_Parity = USART_Parity_No; USART_InitStuctyre.USART_StopBits = USART_StopBits_1; USART_InitStuctyre.USART_BaudRate = 9600; USART_InitStuctyre.USART_WordLength = USART_WordLength_8b; USART_InitStuctyre.USART_HardwareFlowControl =USART_HardwareFlowControl_None; USART_Init(USART1,&USART_InitStuctyre); USART_Cmd(USART1,ENABLE); USART_ITConfig(USART1,USART_IT_TXE,ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; NVIC_Init(&NVIC_InitStructure); } void myUSARTsend_Byte(uint16_t Byte) { USART_SendData(USART1,Byte); while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET); } void myUSARTsend_Array(uint8_t *Array,uint16_t Length) { uint16_t i; for(i=0;i<=Length;i++) { myUSARTsend_Byte(Array[i]); } }

2023-07-14 上传
2023-07-23 上传
2023-07-24 上传

#include "stm32f10x.h" #include "oled.h" #include "USART.h" void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { uint8_t data = USART_ReceiveData(USART1); if (usart_rx_len < USART_RX_BUF_SIZE) { usart_rx_buf[usart_rx_len++] = data; } } } void USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, 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); USART_InitStructure.USART_BaudRate = 115200; 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_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_Cmd(USART1, ENABLE); }

2023-06-03 上传