完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、串口通信简介 1.两种电平标准TTL标准:当电平处于2.4~5V之间时,表示逻辑1;当电平处于 0 ~0.5V时,表示逻辑0。 RS-232标准:当电平处于-15~-3V之间时,表示逻辑1;当电平处于3 ~15V时,表示逻辑0。 2.RS-232标准的传输距离及抗干扰能力更好。重点是两种标准的转换。 USB转串口通讯 USB转串口主要是设备跟电脑通信,该过程需要电平转换芯片来实现,常用的芯片有CH340,PL2303,CP2102,FT232。使用的时候需要安装电平转换芯片的驱动。 3.原生的串口到串口 主要是控制器跟串口设备或者传感器通信,不需要电平转换芯片来转换电平,直接使用TTL电平通信。例如GPS模块。 4.波特率与比特率 波特率即每秒钟传输的码元个数,便于对信号进行解码。常用的波特率4800,9600,115200。比特率即每秒钟传输的二进制位数。 5.通讯的起始和停止信号 起始信号由逻辑0的数据位表示,停止信号可由0.5,1.5,1或2个1的数据位来表示。双方自行约定。 6.校验 通过校验码来避免数据在传输过程中,受到外部干扰而发生偏差。常采用奇偶校验,只能检测出发生偏差位的1位。 二、使用stm32芯片进行串口通信 要求: (1)设置波特率为115200,1位停止位,无校验位。 (2)STM32系统给上位机(win10)连续发送“hello windows!”,上位机接收程序可以使用“串口调试助手“,也可自己编程。 (3)当上位机给stm32发送“Stop,stm32”后,stm32停止发送。 参考程序:原程序 1.这程序和我们的要求还不符合,我们还需要改一下 具体改一下main函数,中断函数和发送函数。具体如下 main函数 修改如下 #include "stm32f10x.h" void Delay_ms(volatile unsigned int t) { unsigned int i,n; for(n=0;n } int main(void) { User_USART_GPIO_Config(); User_NVIC_Config(); User_USART_Config(); User_UART_Send_String(USART1, "abcdefg!n"); while(1) { User_UART_Send_String(USART1, "hello windows!n"); Delay_ms(5000); } } 中断函数修改如下: void SysTick_Handler(void) { } //中断服务函数,前面在User_USART.c void User_USART_Config(void)函数中 //USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);使能了数据接收中断,所以 //将处理接收数据时的中断服务 int i=0; uint8_t a[11]; void USART1_IRQHandler(void) { //uint8_t temp; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { a[i++] = USART_ReceiveData(USART1); //USART_SendData(USART1, a[i-1]); } if(a[0]=='S'&&a[1]=='t'&&a[2]=='o'&&a[3]=='p'&&a[4]==','&&a[5]=='s'&&a[6]=='t'&&a[7]=='m'&&a[8]=='3'&&a[9]=='2') while(1); } 发送函数修改如下: void User_USART_Send_Byte(USART_TypeDef* pUSARTX, uint8_t Data) { //向数据寄存器写入8bit数据 pUSARTX->DR = (Data & (uint16_t)0x01FF); //USART_GetFlagStatus检查数据是否发送完成 while(USART_GetFlagStatus(pUSARTX, USART_FLAG_TXE) == RESET); } //向串口发送一个字符串数据,即可以发送包含多个字节的数据,char类型为8bit,其字符串中的每个字符都可用一个int数表示,即ASCII标准 void User_UART_Send_String(USART_TypeDef* pUSARTX, char* str) { unsigned int i = 0; do { User_USART_Send_Byte(pUSARTX, *(str + i)); i++; } while(*(str+i)!=' |