STM32F10x 学习笔记6(USART实现串口通讯 2)
时间:11-20
来源:互联网
点击:
- */
- voidCOMBufferInit(void);
- /************************************************************
- *function:COMBufferIsEmpty
- *parameter:charport,portcanbeCOM1/COM2
- *return:char
- *usage:Thisfunctioniscalledbyyourapplicationtosee
- *ifanycharacterisavailablefromthecommunicationschannel.
- *Ifatleastonecharacterisavailable,thefunctionreturns
- *FALSE(0)otherwise,thefunctionreturnsTRUE(1).
- *changelog:
- *************************************************************/
- unsignedcharCOMBufferIsEmpty(unsignedcharport);
- /************************************************************
- *function:COMBufferIsFull
- *parameter:charport,portcanbeCOM1/COM2
- *return:char
- *usage:Thisfunctioniscalledbyyourapplicationtoseeifanymorecharacterscanbeplaced
- *intheTxbuffer.Inotherwords,thisfunctionchecktoseeiftheTxbufferisfull.
- *Ifthebufferisfull,thefunctionreturnsTRUEotherwise,thefunctionreturnsFALSE.
- *changelog:
- *************************************************************/
- unsignedcharCOMBufferIsFull(unsignedcharport);
- #endif
- /*
- *file:com_buffered.c
- *author:LiYuan
- *platform:STM32F107
- *date:2013-5-5
- *version:0.0.1
- *description:UARTRingBuffer
- **/
- #include"stm32f10x_usart.h"
- #include"com_buffered.h"
- #defineOS_ENTER_CRITICAL()__set_PRIMASK(1)
- #defineOS_EXIT_CRITICAL()__set_PRIMASK(0)
- /**
- *EnablesTransmiterinterrupt.
- **/
- staticvoidCOMEnableTxInt(unsignedcharport)
- {
- staticUSART_TypeDef*map[2]={USART1,USART2};
- USART_ITConfig(map[port],USART_IT_TXE,ENABLE);
- }
- /*
- *********************************************************************************************************
- *DATATYPES
- *********************************************************************************************************
- */
- typedefstruct{
- shortRingBufRxCtr;/*NumberofcharactersintheRxringbuffer*/
- unsignedchar*RingBufRxInPtr;/*Pointertowherenextcharacterwillbeinserted*/
- unsignedchar*RingBufRxOutPtr;/*Pointerfromwherenextcharacterwillbeextracted*/
- unsignedcharRingBufRx[COM_RX_BUF_SIZE];/*Ringbuffercharacterstorage(Rx)*/
- shortRingBufTxCtr;/*NumberofcharactersintheTxringbuffer*/
- unsignedchar*RingBufTxInPtr;/*Pointertowherenextcharacterwillbeinserted*/
- unsignedchar*RingBufTxOutPtr;/*Pointerfromwherenextcharacterwillbeextracted*/
- unsignedcharRingBufTx[COM_TX_BUF_SIZE];/*Ringbuffercharacterstorage(Tx)*/
- }COM_RING_BUF;
- /*
- *********************************************************************************************************
- *GLOBALVARIABLES
- *********************************************************************************************************
- */
- COM_RING_BUFCOM1Buf;
- COM_RING_BUFCOM2Buf;
- /************************************************************
- *function:COMGetCharB
- *parameter:charport,portcanbeCOM1/COM2
- *parameter:char*errisapointertowhereanerrorcodewillbeplaced:
- **errissettoCOM_NO_ERRifacharacterisavailable
- **errissettoCOM_RX_EMPTYiftheRxbufferisempty
- **errissettoCOM_BAD_CHifyouhavespecifiedaninvalidchannel
- *return:char
- *usage:Thisfunctioniscalledbyyourapplicationtoobtainacharacterfromthecommunications
- *channel.
- *changelog:
- *************************************************************/
- unsignedcharCOMGetCharB(unsignedcharport,unsignedchar*err)
- {
- //unsignedcharcpu_sr;
- unsignedcharc;
- COM_RING_BUF*pbuf;
- switch(port)
- {/*Obtainpointertocommunicationschannel*/
- caseCOM1:
- pbuf=&COM1Buf;
- break;
- caseCOM2:
- pbuf=&COM2Buf;
- break;
- default:
- *err=COM_BAD_CH;
- return(0);
- }
- OS_ENTER_CRITICAL();
- if(pbuf->RingBufRxCtr>0)/*Seeifbufferisempty*/
- {
- pbuf->RingBufRxCtr--;/*No,decrementcharactercount*/
- c=*pbuf->RingBufRxOutPtr++;/*Getcharacterfrombuffer*/
- if(pbuf->RingBufRxOutPtr==&pbuf->RingBufRx[COM_RX_BUF_SIZE])
- {
- pbuf->RingBufRxOutPtr=&pbuf->RingBufRx[0];/*WrapOUTpointer*/
- }
- OS_EXIT_CRITICAL();
- *err=COM_NO_ERR;
- return(c);
- }else{
- OS_EXIT_CRITICAL();
- *err=COM_RX
STM32F10xUSAR串口通 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)