OpenEdv-开源电子网

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

折腾两天,求解答,单片机串口发送不了数据,最近买的开发板在学习,求解答!

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-7-28
在线时间
2 小时
发表于 2021-7-28 20:31:42 | 显示全部楼层 |阅读模式
#include "stm32f4xx.h"


void My_USART1_Init(void)
{
     //GPIO结构体定义
    GPIO_InitTypeDef  GPIO_InitStructure;

     //串口结构体定义
    USART_InitTypeDef USART_InitStructure;

     //中断结构体定义
   // NVIC_InitTypeDef NVIC_InitStructure;
    //使能时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能GPIOA时钟

    //引脚映射

    GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);

    //端口初始化

    //GPIOA9端口初始化结构体参数设置

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

    //GPIOA9端口初始化
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    //GPIOA10端口初始化结构体参数设置

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

    //GPIOA10端口初始化
    GPIO_Init(GPIOA, &GPIO_InitStructure);

     //串口初始化结构体参数设置

    USART_InitStructure.USART_BaudRate=115200;
    USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
    USART_InitStructure.USART_Parity=USART_Parity_No;
    USART_InitStructure.USART_StopBits=USART_StopBits_1;
    USART_InitStructure.USART_WordLength=USART_WordLength_8b;

    //串口初始化
    USART_Init(USART1,&USART_InitStructure);

    //串口使能
    USART_Cmd(USART1 ,ENABLE);
                USART_ClearFlag(USART1,USART_FLAG_TC);
}





int main(void)
{
    //串口初始化
    My_USART1_Init();
    while(1)
                {
                          while(USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET){}
                    USART_SendData(USART1, 0x65);
                }
}


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

使用道具 举报

4

主题

896

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4309
金钱
4309
注册时间
2019-9-4
在线时间
896 小时
发表于 2021-7-29 10:23:00 | 显示全部楼层

回帖奖励 +1 金钱

代码看不出来,参考下原子例程试试
回复 支持 反对

使用道具 举报

13

主题

250

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2248
金钱
2248
注册时间
2019-8-7
在线时间
364 小时
发表于 2021-7-29 16:03:18 | 显示全部楼层
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET){} 删了看看
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

高级会员

Rank: 4

积分
558
金钱
558
注册时间
2018-4-23
在线时间
107 小时
发表于 2021-7-30 10:25:23 | 显示全部楼层
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET){}改用while(!(USART1->SR & USART_SR_TXE)){}
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2021-7-28
在线时间
2 小时
 楼主| 发表于 2021-7-30 11:23:07 | 显示全部楼层
感谢楼上的各位好心的解答,问题我找到了,我的源文件是main.cpp 我用C++撸码的,中断函数需要extern "C"  才能调用,
所以我将例程里代码完全复制过来也不能执行!以后希望各位以此为戒,同时也希望库函数开发者能优化下启动文件所有的中断支持C++
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 09:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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