stm32串口通信

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、实现中断处理函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值