STM32F10x 学习笔记7(USART实现串口通讯 3)
时间:11-20
来源:互联网
点击:
- if(pbuf->RingBufRxInPtr==&pbuf->if(pbuf->RingBufRxInPtr==&pbuf->RingBufRx[COMM_RX_BUF_SIZE])
- {/*WrapINpointer*/
- pbuf->RingBufRxInPtr=&pbuf->RingBufRx[0];
- }
- OSSemPost(pbuf->RingBufRxSem);/*Indicatethatcharacterwasreceived*/
- }
- }
- //ThisfunctioniscalledbytheRxISRtoinsertacharacterintothereceiveringbuffer.
- voidUSART1_IRQHandler(void)
- {
- unsignedintdata;
- unsignedcharerr;
- OS_CPU_SRcpu_sr;
- OS_ENTER_CRITICAL();/*TelluC/OS-IIthatwearestartinganISR*/
- OSIntNesting++;
- OS_EXIT_CRITICAL();
- if(USART1->SR&0x0F)
- {
- //Seeifwehavesomekindoferror
- //Clearinterrupt(donothingaboutit!)
- data=USART1->DR;
- }
- elseif(USART1->SR&USART_FLAG_RXNE)//ReceiveDataRegFullFlag
- {
- data=USART1->DR;
- COMPutRxChar(COM1,data);//Insertreceivedcharacterintobuffer
- }
- elseif(USART1->SR&USART_FLAG_TXE)
- {
- data=COMGetTxChar(COM1,&err);//Getnextcharactertosend.
- if(err==COMM_TX_EMPTY)
- {//Dowehaveanymorecharacterstosend?
- //No,DisableTxinterrupts
- //USART_ITConfig(USART1,USART_IT_TXE|USART_IT_TC,DISABLE);
- USART1->CR1&=~USART_FLAG_TXE|USART_FLAG_TC;
- }
- else
- {
- USART1->DR=data;//Yes,Sendcharacter
- }
- }
- OSIntExit();
- }
- voidUSART2_IRQHandler(void)
- {
- unsignedintdata;
- unsignedcharerr;
- OS_CPU_SRcpu_sr;
- OS_ENTER_CRITICAL();/*TelluC/OS-IIthatwearestartinganISR*/
- OSIntNesting++;
- OS_EXIT_CRITICAL();
- if(USART2->SR&0x0F)
- {
- //Seeifwehavesomekindoferror
- //Clearinterrupt(donothingaboutit!)
- data=USART2->DR;
- }
- elseif(USART2->SR&USART_FLAG_RXNE)//ReceiveDataRegFullFlag
- {
- data=USART2->DR;
- COMPutRxChar(COM2,data);//Insertreceivedcharacterintobuffer
- }
- elseif(USART2->SR&USART_FLAG_TXE)
- {
- data=COMGetTxChar(COM2,&err);//Getnextcharactertosend.
- if(err==COMM_TX_EMPTY)
- {//Dowehaveanymorecharacterstosend?
- //No,DisableTxinterrupts
- //USART_ITConfig(USART2,USART_IT_TXE|USART_IT_TC,DISABLE);
- USART2->CR1&=~USART_FLAG_TXE|USART_FLAG_TC;
- }
- else
- {
- USART2->DR=data;//Yes,Sendcharacter
- }
- }
- OSIntExit();
- }
下面再给出个测试代码:
- #include"stm32f10x.h"
- #include"uart.h"
- #include"led.h"
- #include"COMMRTOS.H"
- #include"ucos_ii.h"
- #defineTASK_STK_SIZE128
- OS_STKTaskStartStk[TASK_STK_SIZE];
- OS_STKTaskUartReadStk[TASK_STK_SIZE];
- voidTaskUartRead(void*pdata)
- {
- unsignedcharerr;
- unsignedcharc;
- for(;;)
- {
- c=CommGetChar(COM2,0,&err);
- if(err==COMM_NO_ERR)
- CommPutChar(COM2,c,0);
- }
- }
- voidTaskStart(void*pdata)
- {
- SysTick_Config(SystemCoreClock/10);
- USART1_Init();
- USART2_Init();
- COMInit();
- //USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
- //USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
- USART1->CR1|=USART_FLAG_RXNE;
- USART2->CR1|=USART_FLAG_RXNE;
- OSTaskCreate(TaskUartRead,(void*)0,&(TaskUartReadStk[TASK_STK_SIZE-1]),2);
- UART_PutStr(USART2,"USART2HelloWorld!\n\r");
- //CommPutChar(COM2,+,0);
- CommPutStr(COM2,"CommPutCharB\n\r");
- for(;;)
- {
- LED_Spark();
- CommPutChar(COM2,+,0);
- OSTimeDly(10);
- }
- }
- intmain(void)
- {
- SystemInit();
- LED_Init();
- OSInit();
- OSTaskCreate(TaskStart,(void*)0,&(TaskStartStk[TASK_STK_SIZE-1]),1);
- OSStart();
- for(;;)
- {
- }
- }
STM32F10xUSART串口通 相关文章:
- STM32F10x 学习笔记8(USART实现串口通讯 DMA 方式)(11-20)
- STM32F10x 学习笔记5(USART实现串口通讯 1)(11-20)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)