造价通

反馈
取消

热门搜词

造价通

取消 发送 反馈意见

USART使用

2022/07/16273 作者:佚名
导读:STM32 USART的使用(基于库函数版本) USART步骤说明 对中断需要用到的的默认的两个管脚PA9和PA10的模式进行设置. * 注意:不要忘记RCC的设置!STM32的结构决定了用任何一个外设 * 就必须设置相应的使能时钟。USART1的使能时钟位是在APB2中的 * 本例中对应函数UART1_GPIO_Configuration() * 2: 对USART的数据格式进行设置,即发送数据

STM32 USART的使用(基于库函数版本)

USART步骤说明

对中断需要用到的的默认的两个管脚PA9和PA10的模式进行设置.

* 注意:不要忘记RCC的设置!STM32的结构决定了用任何一个外设 * 就必须设置相应的使能时钟。USART1的使能时钟位是在APB2中的 * 本例中对应函数UART1_GPIO_Configuration()

* 2: 对USART的数据格式进行设置,即发送数据的数据位、校验位等.

* 本例对应函数为UART1_GPIO_Configuration()

* 注:对于数据是以上升沿还是下降沿有效,可以设置也可以不设 * 置,如果不设置,则系统采用默认值。本例中将其屏蔽。 * 3: 在主函数中调用以上两个函数,然后用库函数USART_SendData()

* 发送数据,用USART_GetFlagStatus(USART1, USART_FLAG_TXE) * 查询中断即可。

USART程序如下

#include

void delay(u32 x) //延时函数,u32是库函数中定义好的宏,意为无符号32位整数 {

while(x--);}

/********************************************************************** * Name : UART1_GPIO_Configuration * Deion : Configures the uart1 GPIO ports. * Input : None * Output : None * Return : None

void UART1_GPIO_Configuration(void) //注意:不是库函数,而是自己定义的GPIO初始化函数,

{

GPIO_InitTypeDef GPIO_InitStructure;

//定义GPIO管脚初始化结构体

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

//本函数(使能时钟)参数中,RCC_APB2Periph_USART1是必不可少的,有人会问,对于串口用到的PA9和

//PA10不用使能时钟吗?其实由于USART1默认的就是PA9和PA10,所以这一个就行了,当然你要是加上 //这个|RCC_APB2Periph_GPIOA也是不报错的,只是重复了。

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

//选中串口默认输出管脚

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//定义输出最大速率

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //定义管脚9的模式

GPIO_Init(GPIOA, &GPIO_InitStructure); //调用函数,把结构体参数输入进行初始化

// Configure USART1_Rx as input floating

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //同上

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//设置上浮模式

GPIO_Init(GPIOA, &GPIO_InitStructure);

//同上

* Name : UART1_Configuration * Deion : Configures the uart1 * Input : None * Output : None * Return : None

*******************************************************************************/ void USART_Configuration(void) {

USART_InitTypeDef USART_InitStructure; //定义串口初始化结构体

/*USART_ClockInitTypeDef USART_ClockInitStructure;//定义串口模式初始化结构体

USART_ClockInitStructure.USART_Clock = USART_Clock_Enable;// USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable; USART_ClockInit(USART1,&USART_ClockInitStructure); */

USART_InitStructure.USART_BaudRate = 9600; //设置串口通信时的波特率9600

USART_InitStructure.USART_WordLength = USART_WordLength_8b;//设置数据位的长度8个位 USART_InitStructure.USART_StopBits = USART_StopBits_1; //设置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_Init进行初始化

USART_Cmd(USART1, ENABLE);//开启USART1,注意与上面RCC_APB2PeriphClockCmd()设置的区别

}

int main(void)

UART1_GPIO_Configuration(); //调用GPIO初始化函数 USART_Configuration(); //调用USART配置函数 while(1)

//大循环

{

USART_SendData(USART1, 'A'); //发送一位数据

while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //判断是否发送完毕 delay(0XFFFFF); //延时

usart图库 2100433B

*文章为作者独立观点,不代表造价通立场,除来源是“造价通”外。
关注微信公众号造价通(zjtcn_Largedata),获取建设行业第一手资讯

热门推荐

相关阅读