STM32串口通讯程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
将AVR上的队列串口驱动程序修改后,运行在STM32开发板,采用中断方式接收和中断发送,并加入了缓冲收发队列操作。由于该驱动是用来操作西门子的TC35或MC55等通信模块,所以加入了“等待串口接收完成”函数,该函数需要一个10ms的定时进行计数累加。
#define SMS_UART0_c
/*
**************************************************************************************** *********************
*
* STM32 UART1 driver
*
* File : UART0.c
* By : hjjft
**************************************************************************************** *********************
*/
/////////////////////////////////////////////////
// 这里将串口1写作0,主要原因是AVR是串口0,为了方便移植,这里仍然称为串口0 //
/////////////////////////////////////////////////
static char UART0_RxBuf[UART0_RX_BUFFER_SIZE];
static volatile unsigned char UART0_RxHead;//
static volatile unsigned char UART0_RxTail;
static char UART0_TxBuf[UART0_TX_BUFFER_SIZE];//
static volatile unsigned char UART0_TxHead;
static volatile unsigned char UART0_TxTail;
//------------------------------------------------------------
static volatile unsigned char Frame_counting;
/*******************************************************************************
* Function Name : NVIC_Configuration
* Description : Configures Vector Table base location.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void NVIC_USART_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Enable the USART1 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel; // NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 10;
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void GPIO_USART_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Configure USART1 Tx (PA.09) as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART1 Rx (PA.10) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/******************************************************************************* * Function Name : USART_Configuration
* Description : Configures the USART1.
* Input : None
* Output : None
* Return : None
*******************************************************************************/ void USART_Configuration(unsigned long baudrate)
{
USART_InitTypeDef USART_InitStructure;
USART_ClockInitTypeDef USART_ClockInitqlt;
/* USART1 configuration ------------------------------------------------------*/
/* USART1 configured as follow:
- BaudRate = 115200 baud
- Word Length = 8 Bits
- One Stop Bit