找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2342|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

stm32f10x串口通信的問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:424805 發(fā)表于 2019-3-18 16:50 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
1:
typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;

if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET).......這一句中的(USART_GetITStatus(UART4, USART_IT_RXNE))發(fā)生中斷時(shí),就應(yīng)該是是if(1!=RESET,執(zhí)行這個(gè)if里面的中斷服務(wù)函數(shù)。
2:
void Usart4_SendString里USART_TypeDef * pUSARTx,他是怎么找到USART4發(fā)送數(shù)據(jù)的,這里只是定義一個(gè)新的指針名,我看USART_TypeDef里面并沒(méi)有串口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)
{
    /* 發(fā)送一個(gè)字節(jié)數(shù)據(jù)到USART */
    USART_SendData(pUSARTx,ch);
    /* 等待發(fā)送數(shù)據(jù)寄存器為空 */
    while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET)
    {
        ;
    }
}
/************************************************************
程序功能:串口4發(fā)送字符串

void Usart4_SendString( USART_TypeDef * pUSARTx, char *str)
{
    unsigned int k=0;
    do
    {
        Usart4_SendByte( pUSARTx, *(str + k) );
        k++;
    }
    while(*(str + k)!='\0');
    /* 等待發(fā)送完成 */
    while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET)
        {}
}
/************************************************************
程序功能:串口4發(fā)送一個(gè)16位數(shù)

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

int fputc(int ch, FILE *f)
{
    /* 發(fā)送一個(gè)字節(jié)數(shù)據(jù)到串口 */
    USART_SendData(DEBUG_USART4, (uint8_t) ch);
    /* 等待發(fā)送完畢 */
    while (USART_GetFlagStatus(DEBUG_USART4, USART_FLAG_TXE) == RESET)
    {
        ;
    }
    return (ch);
}
/************************************************************
程序功能:重定向c庫(kù)函數(shù)scanf到串口,重寫向后可使用scanf、getchar等函數(shù)

int fgetc(FILE *f)
{
    /* 等待串口輸入數(shù)據(jù) */
    while (USART_GetFlagStatus(DEBUG_USART4, USART_FLAG_RXNE) == RESET)
    {
        ;
    }
    return (int)USART_ReceiveData(DEBUG_USART4);
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:424805 發(fā)表于 2019-3-19 21:46 | 只看該作者
求解答第二個(gè)問(wèn)題,我要哭了
回復(fù)

使用道具 舉報(bào)

板凳
ID:479009 發(fā)表于 2019-3-19 22:42 | 只看該作者
指針指著的那段內(nèi)存映射到寄存器的
回復(fù)

使用道具 舉報(bào)

地板
ID:424805 發(fā)表于 2019-3-20 12:07 | 只看該作者
Ahchi 發(fā)表于 2019-3-19 22:42
指針指著的那段內(nèi)存映射到寄存器的

這個(gè)程序   為什么會(huì)影響定義printf輸出到指定串口
回復(fù)

使用道具 舉報(bào)

5#
ID:479009 發(fā)表于 2019-3-22 01:13 | 只看該作者
zeroL 發(fā)表于 2019-3-20 12:07
這個(gè)程序   為什么會(huì)影響定義printf輸出到指定串口

printf會(huì)調(diào)用fputc輸出的,你的程序定義了這個(gè)函數(shù)的話,鏈接器會(huì)鏈接你寫的這個(gè)函數(shù),不要庫(kù)里面的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表