找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1818|回复: 4
打印 上一主题 下一主题
收起左侧

stm32f10x串口通信的问题

[复制链接]
跳转到指定楼层
楼主
ID:424805 发表于 2019-3-18 16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1:
typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;

if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET).......这一句中的(USART_GetITStatus(UART4, USART_IT_RXNE))发生中断时,就应该是是if(1!=RESET,执行这个if里面的中断服务函数。
2:
void Usart4_SendString里USART_TypeDef * pUSARTx,他是怎么找到USART4发送数据的,这里只是定义一个新的指针名,我看USART_TypeDef里面并没有串口4的定义。
typedef struct//
USART_TypeDef的定义

{
  __IO uint16_t SR;
  uint16_t  RESERVED0;
  __IO uint16_t DR;
  uint16_t  RESERVED1;
  __IO uint16_t BRR;
  uint16_t  RESERVED2;
  __IO uint16_t CR1;
  uint16_t  RESERVED3;
  __IO uint16_t CR2;
  uint16_t  RESERVED4;
  __IO uint16_t CR3;
  uint16_t  RESERVED5;
  __IO uint16_t GTPR;
  uint16_t  RESERVED6;
}

void Usart4_SendByte( USART_TypeDef * pUSARTx, u8 ch)
{
    /* 发送一个字节数据到USART */
    USART_SendData(pUSARTx,ch);
    /* 等待发送数据寄存器为空 */
    while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET)
    {
        ;
    }
}
/************************************************************
程序功能:串口4发送字符串

void Usart4_SendString( USART_TypeDef * pUSARTx, char *str)
{
    unsigned int k=0;
    do
    {
        Usart4_SendByte( pUSARTx, *(str + k) );
        k++;
    }
    while(*(str + k)!='\0');
    /* 等待发送完成 */
    while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET)
        {}
}
/************************************************************
程序功能:串口4发送一个16位数

void Usart4_SendHalfWord( USART_TypeDef * pUSARTx, u16 ch)
{
    uint8_t temp_h, temp_l;
    /* 取出高八位 */
    temp_h = (ch&0XFF00)>>8;
    /* 取出低八位 */
    temp_l = ch&0XFF;
    /* 发送高八位 */
    USART_SendData(pUSARTx,temp_h);
    while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET)
    {
        ;
    }
    /* 发送低八位 */
    USART_SendData(pUSARTx,temp_l);
    while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET)
    {
        ;
    }
}
/************************************************************
程序功能:重定向c库函数printf到串口,重定向后可使用printf函数

int fputc(int ch, FILE *f)
{
    /* 发送一个字节数据到串口 */
    USART_SendData(DEBUG_USART4, (uint8_t) ch);
    /* 等待发送完毕 */
    while (USART_GetFlagStatus(DEBUG_USART4, USART_FLAG_TXE) == RESET)
    {
        ;
    }
    return (ch);
}
/************************************************************
程序功能:重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数

int fgetc(FILE *f)
{
    /* 等待串口输入数据 */
    while (USART_GetFlagStatus(DEBUG_USART4, USART_FLAG_RXNE) == RESET)
    {
        ;
    }
    return (int)USART_ReceiveData(DEBUG_USART4);
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:424805 发表于 2019-3-19 21:46 | 只看该作者
求解答第二个问题,我要哭了
回复

使用道具 举报

板凳
ID:479009 发表于 2019-3-19 22:42 | 只看该作者
指针指着的那段内存映射到寄存器的
回复

使用道具 举报

地板
ID:424805 发表于 2019-3-20 12:07 | 只看该作者
Ahchi 发表于 2019-3-19 22:42
指针指着的那段内存映射到寄存器的

这个程序   为什么会影响定义printf输出到指定串口
回复

使用道具 举报

5#
ID:479009 发表于 2019-3-22 01:13 | 只看该作者
zeroL 发表于 2019-3-20 12:07
这个程序   为什么会影响定义printf输出到指定串口

printf会调用fputc输出的,你的程序定义了这个函数的话,链接器会链接你写的这个函数,不要库里面的
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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