STM32串口发送不正常

很早就知道了这个问题,在串口写入时的速度和发送速度不一样,写入过快会丢失一部分,导致控制不正常。

为此每次写入前个检查USART_FLAG_TXE位是否为空,下次发送前检查USART_FLAG_TC位是否发送完。

程序可修改如下

  1. USART_SendData(USART1,0xFF); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) != SET);//是否为空  
  2. USART_SendData(USART1,0xFF); while(USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);//是否发送完  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32中,使用串口发送中断需要进行以下步骤: 1. 配置串口相关的GPIO口和USART寄存器,使其能够正常工作。 2. 配置NVIC中断向量表,使其能够响应USART中断。 3. 配置USART中断,选择需要响应的中断类型(如发送中断、接收中断等)。 4. 在中断处理函数中编写相应的代码,完成串口数据的发送操作。 下面是一个简单的例子,演示了如何使用STM32的USART1发送数据: ``` #include "stm32f10x.h" void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET) //判断是否触发了发送中断 { USART_SendData(USART1, 'A'); //发送数据 } } int main(void) { USART_InitTypeDef USART_InitStructure; /* Enable GPIO clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /* Enable USART1 clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); /* Configure USART1 Tx as alternate function push-pull */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* USART1 configuration */ 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_Tx; USART_Init(USART1, &USART_InitStructure); /* Enable USART1 interrupt */ NVIC_InitTypeDef NVIC_InitStructure; 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); /* Enable USART1 */ USART_Cmd(USART1, ENABLE); while (1) { //等待发送中断 } } ``` 在以上例子中,我们定义了一个USART1_IRQHandler()函数来处理USART1的中断。在函数中,我们首先使用USART_GetITStatus()函数判断是否触发了发送中断,如果是,则使用USART_SendData()函数发送数据。 另外,在main()函数中,我们还需要配置GPIO口、USART寄存器、NVIC中断向量表等相关设置,才能使USART1正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值