STM32串口发送问题

来源:互联网 发布:ubuntu 无法识别新u盘 编辑:程序博客网 时间:2024/06/04 00:29

今天调试uart所有时钟配置,中断配置,串口配置都没有问题,但是就是发送不出来,原来是USART_SendData()连续发送数据时需要加发送中断标志位判断确保每一个数据都发送完成。
解决方法:在发送函数后面加上 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
全部代码如下

#include <stdio.h>#include "stm32f10x.h"#include "led.h"#include "delay.h"#include "key.h"#include "timer.h"#include "beep.h"//#include <string.h>unsigned char txBuff[10]={1,2,3,4,5,6,7,8,9,0};void Uart_Init(){    GPIO_InitTypeDef GPIO_InitStructure;    USART_InitTypeDef USART_InitStructure;      RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);   //ʹÄÜUSART1£¬GPIOAʱÖÓ      USART_DeInit(USART1);  //¸´Î»´®¿Ú1      //USART1_TX   PA.9    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍìÊä³ö    GPIO_Init(GPIOA, &GPIO_InitStructure); //³õʼ»¯PA9    //USART1_RX   PA.10    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕÊäÈë    GPIO_Init(GPIOA, &GPIO_InitStructure);  //³õʼ»¯PA10       /* USARTx configured as follow:        - BaudRate = 9600 baud  ²¨ÌØÂÊ        - Word Length = 8 Bits  Êý¾Ý³¤¶È        - One Stop Bit          ֹͣλ        - No parity             УÑ鷽ʽ        - Hardware flow control disabled (RTS and CTS signals) Ó²¼þ¿ØÖÆÁ÷        - Receive and transmit enabled                         ʹÄÜ·¢ËͺͽÓÊÕ  */  USART_InitStructure.USART_BaudRate = 9600;  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_Cmd(USART1, ENABLE);  }void SendData(unsigned char *sendBuff){       int i=0;    for(i=0;i<10;i++)    {      USART_SendData(USART1, sendBuff[i]);      **while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) ==  RESET);**    }};int main(void){    Uart_Init();//´®¿Ú³õʼ»¯    LED_Init();//LED³õʼ»¯  KEY_Init();//°´¼ü³õʼ»¯  SysTick_Init();//ÑÓʱ³õʼ»¯    BEEP_Init();   //·äÃùÆ÷³õʼ»¯  while (1)  {    //ʹÓÃprintfº¯ÊýÑ­»··¢Ë͹̶¨ÐÅÏ¢  //printf("\n\rUSART Printf Example: £¨µÂ·ÉÀ³£©ÄáĪM3S¿ª·¢°å´®¿Ú²âÊÔ³ÌÐò\r");        SendData( txBuff);    Delay_ms(500);          LED2_REV;   }}
0 0
原创粉丝点击