STM32开发 USART

学习STM32做一个记录

这是一个简单的STM32串口实验

#include "stm32f10x.h"

/*
PA10->RX
PA9->TX
uart1
*/
void UsbUartConfig(){
    GPIO_InitTypeDef GPIOdef;
    USART_InitTypeDef USARTdef;
    NVIC_InitTypeDef NVICdef;
    //开启GPIO和串口时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
   
    GPIOdef.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIOdef.GPIO_Pin = GPIO_Pin_10;
    GPIOdef.GPIO_Speed = GPIO_Speed_50MHz;
    
    GPIO_Init(GPIOA,&GPIOdef);
    
    GPIOdef.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIOdef.GPIO_Pin = GPIO_Pin_9;
    GPIOdef.GPIO_Speed = GPIO_Speed_50MHz;
    
    GPIO_Init(GPIOA,&GPIOdef);
    //串口设置
    USARTdef.USART_BaudRate = 9600;
    USARTdef.USART_WordLength = USART_WordLength_8b;
    USARTdef.USART_StopBits = USART_StopBits_1;
    USARTdef.USART_Parity = USART_Parity_No;
    USARTdef.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USARTdef.USART_Mode = USART_Mode_Tx |USART_Mode_Rx;
    USART_Init(USART1,&USARTdef);
    //中断设置
    NVICdef.NVIC_IRQChannel = USART1_IRQn;
    NVICdef.NVIC_IRQChannelPreemptionPriority = 1;
    NVICdef.NVIC_IRQChannelSubPriority = 1;
    NVICdef.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVICdef);
   //串口中断设置
    USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
    
    USART_Cmd(USART1,ENABLE);

}

void InitHardUart(){
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    UsbUartConfig();
}

//发送一个字符
void Usart_SendByte(uint8_t ch){

    USART_SendData(USART1,ch);
    while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
}

//串口中断

void USART1_IRQHandler(){
    uint8_t ucTemp;
    if (USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET) 
    {
        ucTemp = USART_ReceiveData( USART1 );
        USART_SendData(USART1,ucTemp);
    }
}

//发送字符串

void Usart_SendString(char *str){
    unsigned int k = 0;
    do{
        Usart_SendByte(*(str + k));
        k++;
    }while(*(str + k) != '\0');
    
    while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值