OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4907|回复: 1

stm32f103,串口发送数据,助手无接收,但Keil仿真有数据

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2022-6-28
在线时间
1 小时
发表于 2022-6-29 10:18:56 | 显示全部楼层 |阅读模式
使用的串口 是USART1
usart.c 文件
#include "usart.h"

/*
*        功能:USART1初始化
*       
*   参数:u32 bound --设置的波特率
*   返回值:无       
*/
void USART1_Init(u32 bound)
{
        NVIC_InitTypeDef NVIC_InitStructure;//NVIC
        GPIO_InitTypeDef GPIO_InitStructure;//GPIO
        USART_InitTypeDef USART_InitStructure;//USART
       
        //开启GPIOA、USART时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);
       
        USART_DeInit(USART1);//恢复串口1默认状态
       
        //USART_TX GPIO_PA9
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//引脚9
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//输出速率50MHz
        GPIO_Init(GPIOA, &GPIO_InitStructure);//将配置好的参数写入GPIO_Init()
       
        //USART_RX GPIO_PA10
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//引脚10
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
        GPIO_Init(GPIOA, &GPIO_InitStructure);//将配置好的写入GPIO_Init()
       
        //NVIC设置
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//嵌套中断向量组选择
       
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//NVIC中断源
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//抢占主优先级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//抢占子优先级
        NVIC_InitStructure.NVIC_IRQChannelCmd =  ENABLE;//使能 IRQ通道
        NVIC_Init(&NVIC_InitStructure);//将配置好的参数写入NVIC_Init()
       
        //USART设置
        USART_InitStructure.USART_BaudRate  = bound ;//波特率设置
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;// 字长8 数据格式
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//1位停止位
        USART_InitStructure.USART_Parity = USART_Parity_No;//无校验位
        USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx ;//工作模式:收发
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件控制流
        USART_Init(USART1, &USART_InitStructure);//

        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//使能串口接收中断
        USART_Cmd(USART1,ENABLE);//USART1使能
       
}

/*
*        功能:USART1发送1字节数据
*       
*   参数:USART_TypeDef* pUSARTx,--结构体指针,指向pUSARTx
*                  u32 data--待发送的1 Byte的数据
*   返回值:无       
*/
void USART_SendByte(USART_TypeDef* pUSARTx, u32 data)
{
        USART_SendData(pUSARTx, data);//调用USART数据发送函数,将数据发送       
       
        //等待发送数据寄存器为空
        while(USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);//TXE标志位,发送寄存器为空,发送单字节数据时使用
}



/*
*        功能:USART1发送字符串
*       
*   参数:USART_TypeDef* pUSARTx,--结构体指针,指向pUSARTx
*                  char *Str--待发送的字符串
*   返回值:无       
*/
void USART_SendStr(USART_TypeDef* pUSARTx, char *Str)
{
        do
        {
                USART_SendByte(pUSARTx, *Str++);
        }while(*Str != '\0');//循环发送*Str数据,当字符串指针为空时,指向为0
       
        //等待发送完成
        while(USART_GetFlagStatus(pUSARTx, USART_FLAG_TC) == RESET);//接收数据寄存器不为空则标志位置1
       
       
}
#if 1
/*
*        功能:USART1接收中断服务子程序,将从串口1接收到的数据通过串口1发送
*
*   参数:无
*   返回值:无       
*/
void USART1_IRQHandler(void)
{
        u8 Res;//接收到的数据
        if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET)
        {
                Res = USART_ReceiveData(USART1);
                USART_SendData(USART1,Res);
        }
}
#endif


//重定义C库函数printf
//使用printf(),需勾选Use MicroLib
int fputc(int ch, FILE *f)
{
        USART_SendData(USART1, ch);//调用USART数据发送函数,将数据发送
       
        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);//等待发送完成
       
        return ch;
}


main 主函数
#include "stm32f10x.h"                  // Device header
#include "usart.h"



int main(void)
{
        USART1_Init(115200);//串口初始化,波特率115200
       
        USART_SendByte(USART1, '1');
        USART_SendStr(USART1, "\tSTM32\n");
       
        while(1)
        {               
       
        }       
               
       
       
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

644

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1976
金钱
1976
注册时间
2021-4-16
在线时间
505 小时
发表于 2022-6-30 10:06:05 | 显示全部楼层
用原子的例程的方式去测试下看看会不会有你的这种问题。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 19:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表