stm32串口通信主要是配置相应的参数:
1、初始化串口引脚:
void usartGPIOConfigure(void)
{
GPIO_InitTypeDef gpio_init;
gpio_init.GPIO_Pin = GPIO_Pin_9; // TX
gpio_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; //RX
gpio_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、实现中断处理函数