首页 > 编程知识 正文

stm32串口通信程序,stm32单片机串口通信

时间:2023-05-04 23:27:59 阅读:146595 作者:275

在配置USART和UART之前,必须了解USART和UART是什么,以及它们之间的区别,其实两者是同步和异步的区别。

URT :通用异步收发器;

usart :通用同步异步收发器。

通常,在单片机中,名为UART的接口只能用于异步串行通信。 名为USART的接口既可用于同步串行通信,也可用于异步串行通信。

串行端口发送和接收数据的程序(USART/UART )。

STM32串行端子如下图所示

一、usar t1 staticunsignedchartxbuffer [ 256 ]; 静态统一字符计数=0; 静态统一字符计数=0; 电子商务1数据(unsignedcharucdata; void initial _ UART1(unsigned long baudrate (/gpio端口设置gpio _ inittypedefgpio _ init structure; usart _ inittypedefusart _ init structure; nvic _ inittypedefnvic _ init structure; RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ usar t1|RCC _ AP B2 per iph _ gpioa,ENABLE ); //usar t1 _ txgpioa.9 gpio _ init structure.gpio _ pin=gpio _ pin _ 9; gpio _ init structure.gpio _ mode=gpio _ mode _ af _ PP; //复用推挽输出gpio _ init structure.gpio _ speed=gpio _ speed _ 50m Hz; gpio_init(gpioa,GPIO_InitStructure ); //初始化//usar t1 _ rxgpioa.10g Pio _ init structure.gpio _ pin=gpio _ pin _ 10; gpio _ init structure.gpio _ mode=gpio _ mode _ in _ floating; //浮动输入gpio_init(gpioa,GPIO_InitStructure ); //usart _ init structure.usart _ baudrate=baudrate; //波特率usart _ init structure.usart _ word length=usart _ word length _ 8b; //字长为8位数据格式usart _ init structure.usart _ stop bits=usart _ stop bits _ 1;//一个停止位usart _ init structure.usart _ parity=usart _ parity _ no; //无奇偶校验usart _ init structure.usart _ hardware flow control=usart _ hardware flow control _ none; //无硬件数据流控制usart _ init structure.usart _ mode=usart _ mode _ rx|usart _ mode _ tx; //发送接收模式usart_init(usart1,USART_InitStructure ); 初始化//usart_itconfig(usart1,USART_IT_TXE,DISABLE ); usart_itconfig(usarT1,USART_IT_RXNE,ENABLE ); //打开串行端口以接受中断的usart_clearflag(usart1,USART_FLAG_TC ); usart_cmd(usart1,ENABLE ); //nvic _ init structure.nvic _ IRQ channel=启用usar t1 _ irqn; nvic _ init structure.nvic _ irqchannelpreemptionpriority=1; nvic _ init structure.nvic _ irqchannelsubpriority=7; nvic _ init structure.nvic _ irqchannelcmd=enable; nvic _ init (nvic _ init结构; (二、配置USART2与前面的配置相似,所以只对与前面的配置不同的地方进行评论

staticunsignedchartxbuffer [ 256 ]; 静态统一字符计数=0; 静态统一字符计数=0; 电子商务2数据(unsignedcharucdata; void initial _ UART2(统一长基础结构(gpio _ inittypedefgpio _ init structure; usart _ inittypedefusart _ init structure; nvic _ inittypedefnvic _ init structure; RCC _ AP B1 periphclockcmd (RCC _ AP B1 per iph _ usar T2|RCC _ AP B2 per iph _ gpioa,ENABLE ); //PA2为tx gpio _ init structure.gpio _ pin=gpio _ pin _ 2; gpio _ init structure.gpio _ mode=gpio _ mode _ af _ PP; gpio _ init structure.gpio _ speed=gpio _ speed _ 50m Hz; gpio_init(gpioa,GPIO_InitStructure ); //PA3为rx gpio _ init structure.gpio _ pin=gpio _ pin _ 3; gpio _ init structure.gpio _ mode=gpio _ mode _ in _ floating; gpio_init(gpioa,GPIO_InitStructure ); usart _ init structure.usart _ baudrate=baudrate; usart _ init structure.usart _ word length=usart _ word length _ 8b; usart _ init structure.usart _ stop bits=usart _ stop bits _ 1; usart _ init structure.usart _ parity=usart _ parity _ no; usart _ init structure.usart _ hardware流控制=usart _ hardware流控制_ none; usart _ init structure.usart _ mode=usart _ mode _ rx|usart _ mode _ tx; usart_init(usarT2,USART_InitStructure ); usart_itconfig(usarT2,USART_IT_TXE,DISABLE ); usart_itconfig(usarT2,USART_IT_RXNE,启用); usart_clearflag(usarT2,USART_FLAG_TC ); usart_cmd(usarT2,ENABLE ); nvic _ init structure.nvic _ IRQ channel=usar T2 _ irqn; nvic _ init structure.nvic _ irqchannelpreemptionpriority=1; nvic _ init structure.nvic _ irqchannelsubpriority=8; nvic _ init structure.nvic _ irqchannelcmd=enable; nvic _ init (nvic _ init结构; (三、usar T3 staticunsignedchartxbuffer [ 256 ]; 静态统一字符计数=0; 静态统一字符计数=0; 电子商务2数据(unsignedcharucdata; void initial _ UART3(统一长基础结构(gpio _ inittypedefgpio _ init structure; usart _ inittypedefusart _ init structure; nvic _ inittypedefnvic _ init structure; RCC _ AP B1 periphclockcmd (RCC _ AP B1 per iph _ usar T3|RCC _ AP B2 per iph _ gpioa,ENABLE ); RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ gpiob,ENABLE ); //GPIOB时钟RCC _ AP B1 periphclockcmd (RCC _ AP B1 per iph _ usar T3,ENABLE ); usart_deinit(usarT3; //PB10为tx gpio _ init structure.gpio _ pin=gpio _ pin _ 10; gpio _ init structure.gpio _ mode=gpio _ mode _ af _ PP; gpio _ init structure.gpio _ speed=gpio _ speed _ 50m Hz; gpio_init(gpiob,GPIO_InitStructure ); //PB1为rx gpio _ init structure.gpio _ pin=gpio _ pin _ 11; gpio _ init structure.gpio _ mode=gpio _ mode _ in _ floating; gpio_init(gpiob,GPIO_InitStructure ); usart _ init structure.usart _ baudrate=baudrate; usart _ init structure.usart _ word length=usart _ word length _ 8b; usart _ init structure.usart _ stop bits=usart _ stop bits _ 1; usart _ init structure.usart _ parity=usart _ parity _ no; usart _ init structure.usart _ hardware流控制=usart _ hardware流控制_ none; usart _ init structure.usart _ mode=usart _ mode _ rx|usart _ mode _ tx; usart_init(usart3,USART_InitStructure ); usart_itconfig(usarT3,USART_IT_TXE,DISABLE ); usart_itconfig(usarT3,USART_IT_RXNE,启用); usart_clearflag(usarT3,USART_FLAG_TC ); usart_cmd(usart3,ENABLE ); nvic _ init structure.nvic _ IRQ channel=usar T3 _ irqn; nvic _ init structure.nvic _ irqchannelpreemptionpriority=1; nvic _ init structure.nvic _ irqchannelsubpriority=8; nvic _ init structure.nvic _ irqchannelcmd=enable; nvic _ init (nvic _ init结构; }这样构成。 在笔者的程序中,USART1用于在STM32上连接电脑的串行助手,USART2、3用于连接两个传感器收发数据。 感兴趣的读者可以留言,留下邮箱地址,笔者可以马上回复

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。