经过调试在stm32F101CBT6中实现通信。注意还要配一个TTL转usb接口,才能进行通信。实现字符串回发
#include"stm32f10x_it.h"
#include "stm32f10x_conf.h"
void RCC_Configuration(void); //时钟配置
void USART_Configuration(void); //定义串口初始化函数
void NVIC_Configuration( void);
void Uart1_PutChar(u8 ch);
void Uart1_PutString(u8* buf , u8 len);
void GPIO1_Configuration(void);
void GPIO_Configuration(void);
int USART_RX_BUF[64]=0;
int USART_RX_STA=0;
void RCC_Configuration(void)
{
ErrorStatusHSEStartUpStatus;
//使能外部晶振
RCC_HSEConfig(RCC_HSE_ON);
//等待外部晶振稳定
HSEStartUpStatus =RCC_WaitForHSEStartUp();
//如果外部晶振启动成功,则进行下一步操作
if(HSEStartUpStatus==SUCCESS)
{
//设置HCLK(AHB时钟)=SYSCLK
RCC_HCLKConfig(RCC_SYSCLK_Div1);
//PCLK1(APB1) = HCLK/2
RCC_PCLK1Config(RCC_HCLK_Div2);
//PCLK2(APB2) = HCLK
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_4);
//启动PLL
RCC_PLLCmd(ENABLE);
//等待PLL稳定
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) ==RESET);
//系统时钟SYSCLK来自PLL输出
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//切换时钟后等待系统时钟稳定
while(RCC_GetSYSCLKSource()!=0x08);
}
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 ,ENABLE);
}
int main(void)
{
int i;
u8 len;
RCC_Configuration();
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA |
RCC_APB2Periph_AFIO, ENABLE);//使能各部分时钟
//NVIC_Configuration(); //串口中断配置
//RCC中打开相应串口
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 ,ENABLE);
GPIO_Configuration();
//串口1的管脚初始化
GPIO1_Configuration();
NVIC_Configuration();
USART_Configuration();
while (1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_8) ;
GPIO_SetBits(GPIOA,GPIO_Pin_11) ;
GPIO_SetBits(GPIOA,GPIO_Pin_15) ;
if(USART_RX_STA&0x80) |