久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2102|回復: 3
打印 上一主題 下一主題
收起左側(cè)

求解STM32的串口中斷接收數(shù)組出現(xiàn)接收失敗(程序很簡單,是否有邏輯問題)

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:966387 發(fā)表于 2021-9-23 11:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
程序功能就是單片機接收上位機(串口助手)發(fā)送的 adbcd ;將接收的數(shù)據(jù)放入數(shù)組 Rec_array[]
通過 if(0 == memcmp(Rec_array, "abc", 3)) 語句,翻轉(zhuǎn) LED ;

正常情況是數(shù)組存放了 {a,b,c,d,e}; 前三項 abc對應正確,led翻轉(zhuǎn)

但是接收數(shù)據(jù),在 if(0 == memcmp(Rec_array, "abc", 3)) 識別時數(shù)組里只存放了 {b,0,0,0,0};
想做到 發(fā)送-abcde-五位,led翻轉(zhuǎn),再發(fā)送-aaaaa-不翻轉(zhuǎn),再發(fā)送-abcee-翻轉(zhuǎn)


程序結(jié)構(gòu)很簡單:一個usart函數(shù),一個mian函數(shù)
usart.c文件
  1. #include "usart.h"
  2. #include "string.h"
  3. #include "led.h"

  4. #define Code_Max 5//最大值 5
  5. u8 Rec_array[Code_Max];//存放數(shù)組
  6. unsigned int Code_Cnt = 0;//數(shù)組變量

  7. /*中斷初始化*/
  8. static void USART1_NVIC_Configuration(void)
  9. {
  10.         NVIC_InitTypeDef NVIC_InitStructure;
  11.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  12.         NVIC_InitStructure.NVIC_IRQChannel = USART_IRQ;
  13.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  14.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  15.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  16.       
  17.         NVIC_Init(&NVIC_InitStructure);
  18. }
  19. void USART1_GPIO_Configuration(void)
  20. {
  21.         GPIO_InitTypeDef GPIO_InitStructure;
  22.         /*開啟串口GPIO時鐘*/      
  23.         USART_APBxClkCmd(USART_GPIO_CLK,ENABLE);      
  24.         GPIO_InitStructure.GPIO_Pin = USART_TX_GPIO_PIN;
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  27.         GPIO_Init(USART_TX_GPIO_PORT,&GPIO_InitStructure);
  28.         GPIO_InitStructure.GPIO_Pin = USART_RX_GPIO_PIN;
  29.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  30.         GPIO_Init(USART_RX_GPIO_PORT,&GPIO_InitStructure);
  31. }
  32. /*串口GPIO初始化*/
  33. void USART1_Configuration(void)
  34. {      
  35.         USART1_NVIC_Configuration();
  36.         USART1_GPIO_Configuration();
  37.         USART_InitTypeDef USART_InitStructure;
  38.         /*開啟串口時鐘*/
  39.         USART_APBxClkCmd(USART_CLK,ENABLE);
  40.         USART_InitStructure.USART_BaudRate = USART_Baudrate;
  41.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  42.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  43.         USART_InitStructure.USART_Parity = USART_Parity_No;
  44.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  45.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  46.         USART_Init(USARTx,&USART_InitStructure);
  47.       
  48.         USART_ITConfig(USARTx,USART_IT_RXNE,ENABLE);
  49.         USART_ITConfig(USARTx,USART_IT_TXE,DISABLE);
  50.       
  51.         USART_Cmd(USARTx,ENABLE);
  52. }
  53. /*串口接收中斷*/
  54. void USART1_IRQHandler(void)
  55. {
  56.         u8 data;
  57.         if(USART_GetITStatus(USARTx,USART_IT_RXNE) != RESET)
  58.         {
  59.                 data = USART_ReceiveData(USARTx);
  60.                 Rec_array[Code_Cnt] = data;//存放到數(shù)組
  61.                 Code_Cnt++;
  62.                 if(Code_Cnt >= Code_Max)
  63.                 {        Code_Cnt = 0;
  64.                 }
  65.     USART_ClearITPendingBit(USARTx, USART_IT_RXNE);
  66.         }
  67. }
  68. /*串口接收數(shù)據(jù)函數(shù)*/
  69. void USART1_Recive(void)
  70. {
  71.         Code_Cnt = 0;
  72.         if(0 == memcmp(Rec_array, "abc", 3))
  73.         {
  74.                 LED_BLUE;
  75.         }
  76.         if(0 == memcmp(Rec_array, "bca", 3))
  77.         {
  78.                 LED_RED;
  79.         }
  80.         Rec_array[0] = Rec_array[1] = Rec_array[2] = Rec_array[3] = Rec_array[4] = 0;
  81. }

復制代碼
usart.h

  1. #ifndef __USART_H
  2. #define        __USART_H

  3. #include "stm32f10x.h"
  4. #include <stdio.h>

  5. #define USARTx                       USART1
  6. #define USART_CLK                    RCC_APB2Periph_USART1
  7. #define USART_Baudrate               115200

  8. #define        USART_GPIO_CLK                                RCC_APB2Periph_GPIOA
  9. #define USART_APBxClkCmd                        RCC_APB2PeriphClockCmd

  10. #define USART_TX_GPIO_PORT                GPIOA
  11. #define USART_TX_GPIO_PIN                        GPIO_Pin_9
  12. #define USART_RX_GPIO_PORT                GPIOA
  13. #define USART_RX_GPIO_PIN                        GPIO_Pin_10

  14. #define USART_IRQ                                                        USART1_IRQn
  15. #define USART_IRQHandler                        USART1_IRQHandler

  16. void USART1_Configuration(void);
  17. void USART1_Recive(void);

  18. #endif
復制代碼

main.c



  1. #include "stm32f10x.h"
  2. #include "led.h"
  3. #include "usart.h"

  4. int main(void)
  5. {      
  6.         LED_GPIO_Config();
  7.         USART1_Configuration();
  8.         while (1)
  9.         {
  10.                 USART1_Recive();
  11.         }
  12. }

復制代碼




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

使用道具 舉報

沙發(fā)
ID:702863 發(fā)表于 2021-9-23 14:34 | 只看該作者
void USART1_Recive(void)
{
    Code_Cnt = 0;    //錯誤:該全局變量一直被清除;導致只有Rec_array[0]值
}
回復

使用道具 舉報

板凳
ID:161164 發(fā)表于 2021-9-23 15:32 | 只看該作者
若要比較串口接收的字串
加上結(jié)束符或定時器來確認傳輸結(jié)束比較好
結(jié)束符:
每次傳輸都在結(jié)尾加上特定字符如:';'分號(abcde;)
if(data == ';')Trans_Done = 1;

定時器:
建立一個1ms定時器,在串口中斷中重載定時器并開始計時
在定時器中關(guān)閉定時器并Trans_Done = 1;

while(1)
{
if(Trans_Done)
{
Trans_Done = 0;
USART1_Recive();
}
}
回復

使用道具 舉報

地板
ID:123289 發(fā)表于 2021-9-23 17:31 | 只看該作者
畫個流程圖,先走通流程,而后再寫程序。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 伊人中文网 | 日韩在线91 | 视频精品一区 | 欧美一区二区在线观看视频 | 伊人伊人| 国产在线一级片 | 性欧美精品一区二区三区在线播放 | 亚洲精品女优 | 欧洲尺码日本国产精品 | 毛片在线免费 | 欧美国产精品 | 成人精品鲁一区一区二区 | 男女视频在线看 | 欧美激情一区二区三级高清视频 | 99精品在线观看 | 国产黄色网址在线观看 | 欧美二级| 亚洲精品视频一区 | 在线欧美小视频 | 亚洲天堂影院 | 国产成人99久久亚洲综合精品 | 欧美一区2区三区4区公司 | 精品国产一区二区三区性色 | 亚洲一区二区三区视频 | 国产精品视频999 | 超碰最新在线 | 国产精品成人一区二区 | 日日草天天干 | av国产精品 | 国产精品不卡一区二区三区 | 四虎av电影 | 亚洲三级视频 | 国产精品免费播放 | 成人午夜| 青草久久免费视频 | 亚洲午夜精品一区二区三区他趣 | 久久久久久久av麻豆果冻 | 蜜桃五月天 | 一区二区视频在线观看 | 成人免费在线网 | 精品国产1区2区3区 一区二区手机在线 |