#include "stm32f10x.h"
void RCC_Configuration(void);
void USATR_Configuration(uint32_t USART_BaudRate);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void Delay(vu32 times);
int main(void)
{
RCC_Configuration();
GPIO_Configuration();
USATR_Configuration(115200);
NVIC_Configuration();
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
USART_ClearFlag(USART1,USART_FLAG_TC);
while(1)
{
}
}
void RCC_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //串口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD,ENABLE); //GPIO时钟
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //LED0初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_OD;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED1初始化
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_OD;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA10为RXD,初始化 开发板上的RXD和TXD连接
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA9为TXD,初始化
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void USATR_Configuration( uint32_t USART_BaudRate)
{
USART_InitTypeDef USART_InitStructure; //串口初始化
USART_InitStructure.USART_BaudRate = USART_BaudRate;
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_Mode_Rx;
USART_Init(USART1,&USART_InitStructure);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //接收中断
USART_Cmd(USART1,ENABLE); //打开串口
}
void NVIC_Configuration(void) //中断嵌套向量
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组
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);
}
这是stm32f10x_it.c中的中断
void HardFault_Handler(void)
{
while (1)
{
}
}
void USART1_IRQHandler(void)
{
char RX_Flag;
char RX_Data;
USART_GetFlagStatus(USART1,USART_FLAG_RXNE); //接收数据非空
RX_Flag=USART_GetFlagStatus(USART1,USART_FLAG_RXNE);
if(RX_Flag==SET)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志
RX_Data=USART_ReceiveData(USART1);
USART_SendData(USART1,RX_Data);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
GPIO_ResetBits(GPIOD,GPIO_Pin_2); //LED点亮
}
}
我想实现用串口调试工具发送"hello",开发板给串口调试工具也发送"hello"
发送4个长度以内的字符可以正常发送,发送5个长度的字符串,则不能正常发送
如:串口调试工具只能发送六个“hello”,再点击发送就没有数据返回,好像是缓存不够?还是数据丢失?
|