今天调试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;
}
}