您的位置 首页 培训

STM32 UART的运用进程

1、使用UART前必须启动相应的外设时钟,其主要用到固件库的RCC_APBnPeriphClockCmd函数。使能UART1:使用RCC_APB2PeriphClockCmd(RCC_APB2…

1、运用UART前有必要发动相应的外设时钟,其主要用到固件库的RCC_APBnPeriphClockCmd函数。
使能UART1:运用RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE)
使能UART2:运用RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 , ENABLE)
2、运用中止进行UART操作的需求装备NVIC,设置中止优先级。如:
/* Configure the NVIC Preemption Priority Bits */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

/* Enable the USART1 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

3、装备相应的GPIO口。
假如体系的UART需求进行重映射,需求运用GPIO_PinRemapConfig函数进行重映射,如:GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//留意:Rx为浮空,Tx为第二功能上拉。
将Rx装备为:浮空输入形式,Tx装备为带上拉的第二功形式。并用GPIO_Init() 函数初始化。如:
/* Configure USART2 Rx PA3 input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Configure USART1 Tx (PA.09) as alternate push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
4、装备UART
当在conf文件种装备正确的外晶振后,在USART_InitTypeDef界说的结构体种直接写入UART的波特率、通讯长顿、形式、硬件通讯操控,收发形式。再用USART_Init()进行初始化。如:
USART_InitStructure.USART_BaudRate = 9600;
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;

/* Configure USART1 */
USART_Init(USART1, &USART_InitStructure);

然后使能收发中止。如:
/* Enable USART1 Receive and Transmit interrupts */
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
// USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
留意:一般不将TXE中止使能。由于一旦将此中止使能,假如UART发送缓冲区空,则会当即进入UART中止中,因而可在程序中需求发送数据处,使能TXE中止。在UART中止种用USART_SendData()来发送数据。
完结中止使能后,还需求使能UART口:
如:
/* Enable the USART1 */
USART_Cmd(USART1, ENABLE);
/* Enable the USART2 */
USART_Cmd(USART2, ENABLE);

中止程序(stm32f10x_it.c)能够如下完结发送:留意一切的的串口中止需求在中止服务程序中判别中止源以别离处理。
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
/* Read one byte from the receive data register */
RxBuffer1[RxCounter1++] = USART_ReceiveData(USART1);
if(RxCounter1 == NbrOfDataToRead1)
{
USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);//发送完结后,将RXNE制止。
}
}

if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
{
USART_SendData(USART1, TxBuffer1[TxCounter1++]);
if(TxCounter1 == NbrOfDataToTransfer1)
{
USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
}
}
}

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部