地板网站代码,网站备案字号,flask做网站,广告设计与制作需要学什么专业串行通信 UART串口内部结构示意图 普中科技的详细介绍 中断知识补充 代码
#ifndef __USART_H
#define __USART_H
#include stdio.h
#include stm32f10x_usart.h
#define USART1_REC_LEN 200 //定义最大接收字节数 200extern u8 USART1_RX_BUF[US…串行通信 UART串口内部结构示意图 普中科技的详细介绍 中断知识补充 代码
#ifndef __USART_H
#define __USART_H
#include stdio.h
#include stm32f10x_usart.h
#define USART1_REC_LEN 200 //定义最大接收字节数 200extern u8 USART1_RX_BUF[USART1_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符
extern u16 USART1_RX_STA; //接收状态标记void uart_init(unsigned int bound);//stm32发送数据
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch);
void Usart_SendString( USART_TypeDef * pUSARTx, char *str);#endif
#include usart.h
#include stm32f10x.h u8 USART1_RX_BUF[USART1_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.
//接收状态
//bit15 接收完成标志
//bit14 接收到0x0d
//bit13~0 接收到的有效字节数目
u16 USART1_RX_STA0; //接收状态标记int fputc(int ch, FILE *f)
{ while((USART1-SR0X40)0);//循环发送,直到发送完毕 USART1-DR (u8) ch; return ch;
}int fgetc(FILE *fp)
{while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) ! SET); //等待直到接收缓冲区内非空return (int)USART_ReceiveData(USART1);
}/* 发送一个字节 */
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{/* 发送一个字节数据到USART */USART_SendData(pUSARTx,ch);/* 等待发送数据寄存器为空 */while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) RESET);
}/* 发送字符串 */
void Usart_SendString( USART_TypeDef * pUSARTx, char *str)
{unsigned int k0;do {Usart_SendByte( pUSARTx, *(str k) );k;} while(*(str k)!\0);/* 等待发送完成 */while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)RESET){}
}/*******************************************************************************
* 函 数 名 : USART1_IRQHandler
* 函数功能 : USART1中断函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void USART1_IRQHandler(void) //串口1中断服务程序
{u8 r;if(USART_GetITStatus(USART1, USART_IT_RXNE) ! RESET) //接收中断{r USART_ReceiveData(USART1);//(USART1-DR); //读取接收到的数据if((USART1_RX_STA0x8000)0)//接收未完成{if(USART1_RX_STA0x4000)//接收到了0x0d{if(r!0x0a)USART1_RX_STA0;//接收错误,重新开始else USART1_RX_STA|0x8000; //接收完成了 }else //还没收到0X0D{ if(r0x0d)USART1_RX_STA|0x4000;else{USART1_RX_BUF[USART1_RX_STA0X3FFF]r;USART1_RX_STA;if(USART1_RX_STA(USART1_REC_LEN-1))USART1_RX_STA0;//接收数据错误,重新开始接收 } }} }
} void uart_init(unsigned int bound){//GPIO端口设置
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1GPIOA时钟 //USART1_TX GPIOA.9
GPIO_InitStructure.GPIO_Pin GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, GPIO_InitStructure);//初始化GPIOA.9//USART1_RX GPIOA.10初始化
GPIO_InitStructure.GPIO_Pin GPIO_Pin_10;//PA10
GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA, GPIO_InitStructure);//初始化GPIOA.10 //Usart1 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannel USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority3 ;//抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority 3; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE; //IRQ通道使能
NVIC_Init(NVIC_InitStructure); //根据指定的参数初始化VIC寄存器//USART 初始化设置USART_InitStructure.USART_BaudRate bound;//串口波特率
USART_InitStructure.USART_WordLength USART_WordLength_8b;//字长为8位数据格式
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_ClearFlag(USART1, USART_FLAG_TC);
USART_Init(USART1, USART_InitStructure); //初始化串口1
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
USART_Cmd(USART1, ENABLE); //使能串口1 }附录
【STM32学习笔记】9——串口通讯(USART)详解_stm32 usart_狂飙的犇牛的博客-CSDN博客
【STM32F4】四、串口通信1——硬件部分 (ngui.cc)
stm32专题十一USART二结构框图_usart框图csdn_小小刘木子的博客-CSDN博客
普中STM32F1xx开发攻略_V2.2--标准库版.pdf
STM32学习笔记十串口UART_stm32uart_兔兔丫.的博客-CSDN博客
STM32-串口通信(串口的接收和发送) - 古月居 (guyuehome.com)很好
STM32:USART串口外设(内含1.USART简介2.USART基本结构3.数据帧4.起始位侦测5.数据采样6.波特率发生器) (exyb.cn)