亚洲春色中文字幕久久久-三上亚,91精品国产亚一区二区三区,久久久九色综合亚洲成色777,涩涩视频下载,国产午夜亚洲精品午夜鲁丝片,国产精品A一区二区三区腾讯导航,影音先锋色情AV在线看片,蜜臀国产在线视频,极品少妇高潮啪啪无码吴梦梦 ,精品人妻无码一区二区三区手机版

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

QQ登錄

只需一步,快速開始

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

GD32的usart的中斷無(wú)法正常進(jìn)入,只能發(fā)送信息,不能接收信息

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1157678 發(fā)表于 2025-8-12 09:59 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include "WIFI.h"
#include <stdio.h>
uint8_t  wifi_usart_recv_buf[ESP_USART_RX_BUF_SIZE] = {};
uint16_t wifi_usart_recv_index = 0;
uint8_t  wifi_usart_complete_flag = 0;
       
//wifi串口初始化
void wifi_usart_config(void)
{
//禁用usart2
        usart_disable(ESP_USART);
       
//給usart2和pc10、pc11使能
        rcu_periph_clock_enable(ESP_USART_RCU);
        rcu_periph_clock_enable(ESP_USART_PORT_RCU);
       
//配置pc10 tx為推挽輸出,pc11 rx為浮空輸入
        gpio_mode_set(ESP_USART_PORT,GPIO_MODE_AF,GPIO_PUPD_PULLUP,ESP_USART_TX_PIN);
  gpio_output_options_set(ESP_USART_PORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,ESP_USART_TX_PIN);
  gpio_mode_set(ESP_USART_PORT,GPIO_MODE_AF,GPIO_PUPD_PULLUP,ESP_USART_RX_PIN);
  gpio_output_options_set(ESP_USART_PORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,ESP_USART_RX_PIN);
       
//配置引腳復(fù)用
        gpio_af_set(ESP_USART_PORT, GPIO_AF_7, ESP_USART_TX_PIN);
  gpio_af_set(ESP_USART_PORT, GPIO_AF_7, ESP_USART_RX_PIN);

//usart2配置
        usart_deinit(ESP_USART);
  usart_baudrate_set(ESP_USART, 115200);
  usart_word_length_set(ESP_USART, USART_WL_8BIT);
  usart_stop_bit_set(ESP_USART, USART_STB_1BIT);
  usart_parity_config(ESP_USART, USART_PM_NONE);
  usart_receive_config(ESP_USART, USART_RECEIVE_ENABLE);
  usart_transmit_config(ESP_USART, USART_TRANSMIT_ENABLE);
       
//使能usart2
  usart_enable(ESP_USART);
       
//配置usart2中斷
  nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
        nvic_irq_enable(USART2_IRQn, 2, 2);            
  usart_interrupt_enable(ESP_USART,USART_INT_RBNE);
  usart_interrupt_enable(ESP_USART,USART_INT_IDLE);
}

//AT指令發(fā)送響應(yīng)函數(shù)
void wifi_usart_transmit_cmd(const char *cmd,const char *expected)
{
//發(fā)送指令
          wifi_usart_transmit_string((uint8_t *)cmd);

//等待接收到期待響應(yīng)
    while((strcmp((const char *)wifi_usart_recv_buf, expected) != 0)||(wifi_usart_complete_flag==0))
                {
                        wifi_usart_transmit_string("error");
                        delay_1ms(10000);
          }

//清零存放響應(yīng)的數(shù)組,便于下一次接收信息
                memset(wifi_usart_recv_buf, '\0', sizeof(wifi_usart_recv_buf));
    wifi_usart_recv_index = 0;
                wifi_usart_complete_flag = 0;
}

//發(fā)送字節(jié)
void wifi_usart_transmit_byte(uint8_t ucch)
{
// 發(fā)送數(shù)據(jù)
        usart_data_transmit(ESP_USART,(uint8_t)ucch);                                                         

// 等待發(fā)送數(shù)據(jù)緩沖區(qū)標(biāo)志置位
        while(usart_flag_get(ESP_USART,USART_FLAG_TBE)==RESET);  
}

//發(fā)送字符串
void wifi_usart_transmit_string(uint8_t *string)
{
// 當(dāng)字符串指針不為空且當(dāng)前字符不為空時(shí)循環(huán)
        while(string && *string)        // 地址為空或者值為空跳出
        {
          wifi_usart_transmit_byte(*string++);  
        }
                wifi_usart_transmit_byte('\r');
    wifi_usart_transmit_byte('\n');
}

void USART2_IRQHandler(void)
{
    if(usart_interrupt_flag_get(ESP_USART,USART_INT_FLAG_RBNE) == SET)   // 接收緩沖區(qū)不為空
        {
                usart_flag_clear(ESP_USART,USART_FLAG_RBNE);
                wifi_usart_recv_buf[wifi_usart_recv_index++] = usart_data_receive(ESP_USART);      // 把收到的數(shù)據(jù)放在緩沖區(qū)中
        }
       
        if(usart_interrupt_flag_get(ESP_USART,USART_INT_FLAG_IDLE) == SET)   // 檢測(cè)到幀中斷
        {
                usart_data_receive(ESP_USART);                                     // 必須讀,讀出來(lái)的值不能要
                wifi_usart_recv_buf[wifi_usart_recv_index] = '\0';                                                           // 數(shù)據(jù)接收完畢,數(shù)組結(jié)束標(biāo)志
                wifi_usart_complete_flag = 1;                                      // 接收完成
        }
}


//配置wifi為熱點(diǎn)模式
void esp8266_server_init(void)
{       
//建立多連接模式
        wifi_usart_transmit_cmd("AT+CIPMUX=1","OK");

//開啟wifi服務(wù)器并設(shè)置端口
        wifi_usart_transmit_cmd("AT+CIPSERVER=1,8080","OK");
}




#include <string.h>
#include "systick.h"
#include <stdbool.h>

//宏定義
#define ESP_USART_PORT_RCU        RCU_GPIOC
#define ESP_USART_PORT            GPIOC
#define ESP_USART_TX_PIN          GPIO_PIN_10
#define ESP_USART_RX_PIN          GPIO_PIN_11
#define ESP_USART                 USART2
#define ESP_USART_RCU             RCU_USART2
#define ESP_USART_RX_BUF_SIZE     128

//wifi串口初始化
void wifi_usart_config(void);

//AT指令發(fā)送函數(shù)
void wifi_usart_transmit_cmd(const char *cmd,const char *expected);

//發(fā)送字節(jié)
void wifi_usart_transmit_byte(uint8_t ucch);

//發(fā)送字符串
void wifi_usart_transmit_string(uint8_t *ucstr);

//接收函數(shù)
void USART2_IRQHandler(void);

//配置wifi為熱點(diǎn)模式
void esp8266_server_init(void);

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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