附件是STM32环形队列程序,适用于UART、USB通讯,已经在多个产品中验证。
单片机源程序如下:
- #include <stm32f10x.h>
- #include <stdio.h>
- #include "stdlib.h"
- #include <string.h>
- #include "sys.h"
- #include "queue.h"
- #include "usart1.h"
- #include "usart2.h"
- u8 buf_uart[1024];
- const vu32 uart_buf_size=sizeof(buf_uart);
-
- //==============================================================================================
- // ----Function: 写满回调函数
- // --Parameters:
- // -----Returns:
- //---------Note:
- //==============================================================================================
- u8 QueueWriteFull(DataQueue *Buf, QUEUE_DATA_TYPE Data, u8 Mod)
- {
- return QUEUE_FULL;
- }
- //==============================================================================================
- // ----Function: 写满回调函数
- // --Parameters:
- // -----Returns:
- //---------Note:
- //==============================================================================================
- void InitQueue(void)
- {
- if (QueueCreate((void *)buf_uart,
- uart_buf_size,
- NULL,
- (u8 (*)())QueueWriteFull)
- == NOT_OK)
- {
- //printf("buf_uart queue init err!\n\r");;
- }
- }
- int main(void)
- {
- vu32 temp;
- vu8 Key;
- vu8 FlashCnt=0;
- u8 data[64];
- //================================
- u16 i;
- //==================================================================
- //#define VECT_TAB_OFFSET 0 //0x4000
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //分组2:2位抢占优先级,2位响应优先级
- InitQueue();
-
- uart1_init(19200); //串口1初始化为19200---for debug
- uart2_init(19200); //串口2初始化为19200---for Encrypt
-
- while(1)
- {
- //=================== USB CMD Decode =========================
- if (QueueNData((void *)buf_uart) > 63)
- {
- for(i=0;i<64;i++)
- QueueRead(data+i, (void *)buf_uart);
- uart_puts(data);
- }
- }
- }
-
复制代码
所有资料51hei提供下载:
STM32_Queue.7z
(249.95 KB, 下载次数: 88)
|