STM32 USART 普通串口应用,调试总结
来源:互联网 发布:网络400电话价格 编辑:程序博客网 时间:2024/05/01 07:56
配置STM32L151CBT6,在普通串口模式。当初没有好好看数据手册,只是看着别人的例子写出来一个程序,虽然效果出来了,但不明白其中一些问题的道理,带着这些问题,问了同事,得到的答案,确实最低级的错误。这说明看数据手册的重要性。看程序和问题如下
程序刚初始化时,
//设置为发送使能,接收使能
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
//值开启接收中断。
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
在接收到数据后,把手册拷贝到发送缓冲区,然后开启发送
void USART_Start_Send_Data(USART_TypeDef* USARTx,sCommBufType *psCommBuf)
{
USART_ITConfig(USARTx, USART_IT_TXE, ENABLE);
psCommBuf->pu8Tx_ptr = psCommBuf->au8TxBuf;
USART_SendData(USARTx,*g_sUsart1Buf.pu8Tx_ptr++);
g_sUsart1Buf.u16TxLen--;
}
中断中发送处理函数如下
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_TC) != RESET)
{
//USART_ClearITPendingBit(USART1, USART_IT_TXE);
//g_sUsart1Buf.u16TxLen--;
//g_sUsart1Buf.pu8Tx_ptr++;
if((g_sUsart1Buf.u16TxLen != 0) && (g_sUsart1Buf.pu8Tx_ptr < &g_sUsart1Buf.au8TxBuf[TX1_BUFFLEN-1]))
{
USART_SendData(USART1, *g_sUsart1Buf.pu8Tx_ptr++);
g_sUsart1Buf.u16TxLen--;
}
else
{
USART_ITConfig(USART1, USART_IT_TXE, DISABLE); //关闭发送中断
}
}
}
目前应用的目的,是设备接收到什么串口数据,就返回什么数据,就这种模式得到的情况是,每次发送数据都会少最后一个字节
TX:68 AA AA AA AA AA AA 68 13 00 DF 16 (09:59:55:759)
RX00:68 AA AA AA AA AA AA 68 13 00 DF (09:59:55:917)
后来解决了这个问题。需要注意几个关键点,就能避免这个问题。
1.开启USART_ITConfig(USART1, USART_IT_TXE, ENABLE);时,就会立刻进入发送数据寄存器为空中断。所以void USART_Start_Send_Data(USART_TypeDef* USARTx,sCommBufType *psCommBuf)中的USART_SendData(USARTx,*g_sUsart1Buf.pu8Tx_ptr++);
g_sUsart1Buf.u16TxLen--;可以去掉,直接在中断里面处理。否则会打乱中断处理数据的顺序。
2.开启中断前一定要先清除响应的中断标志位,否则可能出现一些不想要的数据,对于多次运行时,可能性比较大。
3.中断里面不要按照发送完成中断才传输数据,因为这样会造成进入中断的时间变长,因为它要等到移位寄存器中的数据发送完成后才进行中断。可以按照USART_IT_TXE进入中断发送数据,等到最后一个数据时关闭USART_IT_TXE中断,然后打开USART_IT_TC中断。这样既能保证进入中断的时间短,也能保证最后一个数据即使在关掉串口时能真正传送出去。
- STM32 USART 普通串口应用,调试总结
- STM32串口USART通信总结
- STM32 USART串口发送软件调试
- stm32 USART串口
- STM32 串口USART 通信
- STM32----------串口通信(USART)
- STM32串口USART
- STM32串口USART通讯
- stm32 usart 串口
- STM32串口USART通讯
- STM32 USART串口初始化
- STM32 USART调试笔记
- STM8L USART串口调试
- stm32串口通信调试总结
- stm32之USART串口配置
- STM32之USART(串口通信)
- STM32学习之USART串口
- STM32:USART串口通信笔记
- MSDN2008中文版下载地址
- nginx和tomcat使用chroot(jail)相关配置
- 配置 Ubuntu 字符界面启动
- UIWebview 地理位置定位问题
- 霜载顶替有的仍热舞
- STM32 USART 普通串口应用,调试总结
- 线程学习笔记2
- SQL分组处理气象数据及注意事项
- javaB/S和C/S的区别
- 查询语句中select from where group by having order by的执行顺序
- 数据挖掘大作业参考文献
- 开源ETL工具 Kettle(kettle 5.2.0)的使用之Hello World
- 9.1.1 添加成员到 F# 类型
- Longest Valid Parentheses,二维动态规划、一维动态规划、stack