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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7181|回復: 10
打印 上一主題 下一主題
收起左側

STM32串口不定長數據接受程序 用中斷實現

[復制鏈接]
跳轉到指定樓層
樓主
ID:155845 發表于 2017-8-5 23:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
回想起自己當時才接觸串口需要接受未知數據時,在網上聽人說可以使用空閑中斷,到處去找資料,胡亂配置碰了很多壁。而現在看見時不時還有人在問進不去空閑中斷,我就把我自己的一些經驗和配置分享給大家參考一下,希望能幫到大家。

空閑中斷出現問題,一個是可能沒有同時打開接受中斷和空閑中斷,再則就是清除空閑中斷標志位沒弄對。

單片機源程序如下:
  1. #include "usart.h"
  2. uint8_t drbuf[100];//數據存儲數組
  3. uint32_t rxcounter=0;//數據的位數
  4. uint32_t rxflag=0;//接受完成標志變量
  5. //配置PRINTF()
  6. #if 1
  7. #pragma import(__use_no_semihosting)                             
  8. struct __FILE
  9. {
  10.         int handle;
  11. };

  12. FILE __stdout;      
  13. //定義_sys_exit()以避免使用半主機模式   
  14. _sys_exit(int x)
  15. {
  16.         x = x;
  17. }
  18. //重定義fputc函數
  19. int fputc(int ch, FILE *f)
  20. {        
  21.         while((USART1->SR&0X40)==0);//循環發送,直到發送完畢   
  22.         USART1->DR = (u8) ch;    //  可以更改串口,更改printf的輸出串口
  23.         return ch;
  24. }
  25. #endif

  26. void usart1_init(uint32_t BaudRate)
  27. {
  28.         GPIO_InitTypeDef GPIO_InitSTRUTURE;
  29.         USART_InitTypeDef USART_InitSTRUCTURE;
  30.         NVIC_InitTypeDef NVIC_InitSTRUCTURE;
  31.        
  32.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  33.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
  34.        
  35.         GPIO_InitSTRUTURE.GPIO_Mode=GPIO_Mode_AF;
  36.         GPIO_InitSTRUTURE.GPIO_OType=GPIO_OType_PP;
  37.         GPIO_InitSTRUTURE.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;
  38.         GPIO_InitSTRUTURE.GPIO_PuPd=GPIO_PuPd_UP;
  39.         GPIO_InitSTRUTURE.GPIO_Speed=GPIO_Speed_50MHz;
  40.         GPIO_Init(GPIOA,&GPIO_InitSTRUTURE);
  41.        
  42.         GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//映射千萬不要忘了
  43.         GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
  44.        
  45.         USART_InitSTRUCTURE.USART_BaudRate=BaudRate;
  46.         USART_InitSTRUCTURE.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
  47.         USART_InitSTRUCTURE.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
  48.         USART_InitSTRUCTURE.USART_Parity=USART_Parity_No;
  49.         USART_InitSTRUCTURE.USART_StopBits=USART_StopBits_1;
  50.         USART_InitSTRUCTURE.USART_WordLength=USART_WordLength_8b;
  51.         USART_Init(USART1,&USART_InitSTRUCTURE);
  52.        
  53.         USART_Cmd(USART1,ENABLE);//上面都是按部就班的配置
  54.        
  55.         USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//打開接受中斷
  56.         USART_ITConfig(USART1,USART_IT_IDLE,ENABLE);//打開空閑中斷
  57.        
  58.         NVIC_InitSTRUCTURE.NVIC_IRQChannel=USART1_IRQn;
  59.         NVIC_InitSTRUCTURE.NVIC_IRQChannelCmd=ENABLE;
  60.         NVIC_InitSTRUCTURE.NVIC_IRQChannelPreemptionPriority=0X01;//搶占優先級為1,一般不需要搶占很高
  61.         NVIC_InitSTRUCTURE.NVIC_IRQChannelSubPriority=0X01;//響應優先級為1
  62.         NVIC_Init(&NVIC_InitSTRUCTURE);

  63. }

  64. void USART1_IRQHandler()
  65. {
  66.         uint8_t clear,i=0;
  67.         if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
  68.         {
  69.                 drbuf[rxcounter++]=USART1->DR;//
  70.         }
  71.         else if(USART_GetITStatus(USART1,USART_IT_IDLE)!=RESET)//
  72.                 {
  73.                         clear=USART1->DR;//先讀取接受數據寄存器
  74.                         clear=USART1->SR;//再讀取發送數據寄存器解可以清除空閑中斷標志位
  75.                         rxflag=1;
  76.                 }
  77.        
  78. }

復制代碼

所有資料51hei提供下載:
stm32f407zet6 串口1接受不定長.rar (396.89 KB, 下載次數: 59)


評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:303363 發表于 2018-4-7 22:07 | 只看該作者
你這不帶DMA啊,心疼我的20塊錢。。。。。。
回復

使用道具 舉報

板凳
ID:300551 發表于 2018-4-8 12:40 | 只看該作者
代碼編譯報錯
回復

使用道具 舉報

地板
ID:370386 發表于 2018-7-19 10:45 | 只看該作者
這個有問題
回復

使用道具 舉報

5#
ID:155845 發表于 2019-1-14 23:40 | 只看該作者

我剛看了自己的源文件沒有問題啊,不知道你們是什么問題,主函數我沒有寫接受的數據進行怎樣的處理,只是放在了數組中
回復

使用道具 舉報

6#
ID:155845 發表于 2019-1-14 23:41 | 只看該作者

我剛剛將我的源程序編譯了一遍沒有問題啊,不知道你是什么問題,截個圖我看看?
回復

使用道具 舉報

7#
ID:155845 發表于 2019-1-14 23:42 | 只看該作者
wangshaosh 發表于 2018-4-7 22:07
你這不帶DMA啊,心疼我的20塊錢。。。。。。

尷尬,這是空閑中斷接受的,DMA的我沒有上傳
回復

使用道具 舉報

8#
ID:468401 發表于 2019-1-15 11:15 | 只看該作者
good good
回復

使用道具 舉報

9#
ID:223999 發表于 2019-1-16 09:16 | 只看該作者
看看行不行
回復

使用道具 舉報

10#
ID:509812 發表于 2019-4-11 19:11 | 只看該作者
學習了
回復

使用道具 舉報

11#
ID:629338 發表于 2019-10-24 11:35 | 只看該作者
為什么我的程序會一直觸發IDLE中斷啊?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲狠狠| 亚洲一区二区视频在线播放 | 日本不卡免费新一二三区 | 精品国产乱码久久久久久蜜退臀 | 99精彩视频 | 欧美日韩视频在线播放 | 日本三级电影免费观看 | 在线视频a| 丁香五月网久久综合 | 一区二区三区视频 | 国产成人综合在线 | 免费av手机在线观看 | 国产一区二区在线免费视频 | 在线中文视频 | 中文字幕精 | 国产精品入口麻豆www | av电影一区 | 99re在线 | 天天看天天爽 | 黄色网址大全在线观看 | 夜夜草| 亚洲 中文 欧美 日韩 在线观看 | aaa大片免费观看 | 精品久久久久一区二区国产 | 欧美精品一区三区 | www.五月婷婷.com | 亚洲精品久久久蜜桃 | 91在线视频 | 狠狠干狠狠插 | 成人免费观看男女羞羞视频 | 亚洲九九 | 综合婷婷| 欧美久久久久久 | 国产精品美女久久久久久免费 | 天天精品综合 | 国产九九av | 水蜜桃久久夜色精品一区 | 人人干免费 | 欧美精品在线一区 | 亚洲永久精品国产 | 国产精品久久久久久久久久久久久 |