|
由于上周末有事情,因此耽误了两天学习时间。今天是STM32学习第16天。 目前串口发送数据还有问题。个人感觉是硬件上的某些跳线或者什么没有跳。我用的是STM32MINI板。代码见附件。 USART学习笔记: USART支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信使用多缓冲器配置的DMA方式,可以实现高速数据通信。 想当年,我以为USART就是同步单向通信和半双工单线通信。 那第一个就先学习用串口收发数据吧。 数据手册如是说: 用USART发送数据,步骤如下: 1. 通过在USART_CR1寄存器上置位UE位来激活USART(*这个一定要记得*)
2. 编程USART_CR1的M位来定义字长。
3. 在USART_CR2中编程停止位的位数。
4. 如果采用多缓冲器通信,配置USART_CR3中的DMA使能位(DMAT)。按多缓冲器通信中的描述配置DMA寄存器。(*这个我还没用过*)
5. 利用USART_BRR寄存器选择要求的波特率。
6. 设置USART_CR1中的TE位,发送一个空闲帧作为第一次数据发送。
7. 把要发送的数据写进USART_DR寄存器(此动作清除TXE位)。在只有一个缓冲器的情况下,对每个待发送的数据重复步骤7。
8. 在USART_DR寄存器中写入最后一个数据字后,要等待TC=1,它表示最后一个数据帧的传输结束。当需要关闭USART或需要进入停机模式之前,需要确认传输结束,避免破坏最后一次传输。 我的程序中的实现如下: 1--配置USART 1)使能时钟 使能GPIO时钟--USART_Init(USART3,&USART_InitStructure); 使能USART3的时钟--RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE); 2)配置GPIO口-- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); 3)配置USART3的模式 USART_InitStructure.USART_BaudRate = macUSART_BaudRate; USART_InitStructure.USART_HardwareFlowControl = macUSART_HardwareFlowControl; USART_InitStructure.USART_Mode = macUSART_Mode; USART_InitStructure.USART_Parity = macUSART_Parity; USART_InitStructure.USART_StopBits = macUSART_StopBits; USART_InitStructure.USART_WordLength = macUSART_WordLength; USART_Init(USART3,&USART_InitStructure); 4)使能USART3 通过在USART_CR1寄存器上置位UE位来激活USART USART_Init(USART3,&USART_InitStructure); 2—Usart3发送数据 判断USART_FLAG_TXE,发送数据。 程序如下,用串口调试助手接收不到数据。很郁闷。麻烦大家帮忙看一下,是不是板子上有哪些跳线要短接?
|