您的位置 首页 电子

根据STM32神舟系列开发板的串口通讯源码

includestm32f10xhincludestm32f10x_usarthvoidRCC_Config(void);voidGPIO_Config(void);voidUSART_Config(

#include “stm32f10x.h”

#include “stm32f10x_usart.h”
void RCC_Config(void);
void GPIO_Config(void);
void USART_Config(void);
void Put_String(u8 *p);
int main()
{
RCC_Config();//装备时钟
GPIO_Config();//装备输入输出
USART_Config();//装备发送接纳
//GPIO.Pin挑选待设置的 GPIO 管脚,运用操作符“| ”能够一次选中多个管脚。
Put_String(“请发送数据_”);
while(1)
{
while(1)
{
Put_String(“请发送数据_”);
if(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)==SET)
{
USART_SendData(USART2,USART_ReceiveData(USART2));
}
}
}
}
void RCC_Config(void)
{
ErrorStatus HSEStartUpStatus;//枚举,失利是0,成功1
RCC_DeInit();//寄存器设置为默认值
RCC_HSEConfig(RCC_HSE_ON);//设置外部高速晶振 发生振动频率
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等它起振
if(HSEStartUpStatus == SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);//RCC_SYSCLK_Div1——AHB时钟=体系时钟
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//设置时钟源和频率倍数
RCC_PLLCmd(ENABLE);//使能PLL
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)//标志位被重置?
{}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//把pll时钟作为体系时钟源
while(RCC_GetSYSCLKSource()!=0x08)//当pll时钟源!=8
{}
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);//使能这两个外设时钟(外围总线
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
}
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_5;//选中2,5引脚
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化外设 GPIOx 寄存器
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;/////////
GPIO_Init(GPIOA,&GPIO_InitStructure);//再初始化寄存器
}
void USART_Config(void)
{
USART_InitTypeDef USART_InitStructure;
USART_ClockInitTypeDef USART_ClockInitStructure;
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_Rx|USART_Mode_Tx;
//USART_InitStructure.USART_Clock=USART_Clock_Disable;
USART_ClockInitStructure.USART_Clock=USART_Clock_Disable;
//USART_InitStructure.USART_CPOL=USART_CPOL_Low;
USART_ClockInitStructure.USART_CPOL=USART_CPOL_Low;//数据低电平有用
//USART_InitStructure.USART_CPHA=USART_CPHA_2Edge;
USART_ClockInitStructure.USART_CPHA=USART_CPHA_2Edge;//时钟相位
//USART_InitStructure.USART_LasrBit=USART_LastBit_Disable;
USART_ClockInitStructure.USART_LastBit=USART_LastBit_Disable; //在SCLK引脚上输出最终发送的那个数据字的脉冲不从SCLK输出
USART_Init(USART2,&USART_InitStructure);
USART_Cmd(USART2,ENABLE);
}
void Put_String(u8 *p)
{
while(*p)
{
USART_SendData(USART2,*p++);
while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET)
{}
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/319480.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部