stm32串口通信

来源:互联网 发布:mysql workbanch 编辑:程序博客网 时间:2024/06/05 15:36

stm32串口通信主要是配置相应的参数:
1、初始化串口引脚:

void usartGPIOConfigure(void)
{

GPIO_InitTypeDef gpio_init;gpio_init.GPIO_Pin = GPIO_Pin_9;              // TXgpio_init.GPIO_Speed = GPIO_Speed_50MHz;gpio_init.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &gpio_init);gpio_init.GPIO_Pin = GPIO_Pin_10;            //RXgpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &gpio_init);

}
2、初始化串口的一些参数:
void usartConfigure(void)
{

    USART_InitTypeDef usart_init;    usart_init.USART_BaudRate = 9600;    usart_init.USART_WordLength = USART_WordLength_8b;    usart_init.USART_StopBits = USART_StopBits_1;    usart_init.USART_Parity = USART_Parity_No;    usart_init.USART_HardwareFlowControl = USART_HardwareFlowControl_None;    usart_init.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    USART_Init(USART1, &usart_init);    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);  //使能接收中断。//  USART_ITConfig(USART1, USART_IT_TXE, ENABLE); //发送中断    USART_Cmd(USART1, ENABLE);    USART_ClearFlag(USART1, USART_FLAG_TC);

}
3、初始化串口时钟:
void usartRccInit(void)
{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

}
4、初始化中断相关参数(如中断优先级、中断组等等):
void nivcConfiguration(void)
{

NVIC_InitTypeDef nvic_init;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); nvic_init.NVIC_IRQChannel = USART1_IRQn;nvic_init.NVIC_IRQChannelPreemptionPriority = 0;nvic_init.NVIC_IRQChannelSubPriority = 2;nvic_init.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&nvic_init);

}
5、实现中断函数:
void USART1_IRQHandler(void)
{

if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET){    USART_SendData(USART1, USART_ReceiveData(USART1));    while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)     ==RESET);}

}
6、最后实现一个简单的printf函数:
void usartPrintf(char *fmt,…)
{

va_list ap;char string[256];va_start(ap,fmt);vsprintf(string,fmt,ap);putStr(string);va_end(ap);

}

void putStr(char *str){

while(*str != '\0'){    USART_SendData(USART1, *str++);    while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);}

注:实现的printf函数需要包含头文件:

*#include "stdio.h"**#include "stdarg.h"*

7、总结:stm32编程基本步骤:

1、使能相应的引脚2、配置参数(如usart的通信参数)3、配置中断4、使能时钟5、实现中断处理函数
原创粉丝点击