11.串口收发实验

2019-01-18 18:40

11.串口收发实验:

/* Includes ------------------------------------------------------------------*/ #include \

#include \

/** @addtogroup STM32F10x_StdPeriph_Examples * @{ */

/** @addtogroupUSART_Interrupt * @{ */

GPIO_InitTypeDefGPIO_InitStructure;

/* Private typedef -----------------------------------------------------------*/ typedefenum { FAILED = 0, PASSED = !FAILED} TestStatus;

/* Private define ------------------------------------------------------------*/ #define TxBufferSize1 (countof(TxBuffer1) - 1) #define TxBufferSize2 (countof(TxBuffer2) - 1) #define RxBufferSize1 TxBufferSize2 #define RxBufferSize2 TxBufferSize1

/* Private macro -------------------------------------------------------------*/ #define countof(a) (sizeof(a) / sizeof(*(a)))

/* Private variables ---------------------------------------------------------*/ USART_InitTypeDefUSART_InitStructure;

uint8_t TxBuffer1[] = \串口中断收发示例: 串口1 ->串口2 (中断收发)%uint8_t TxBuffer2[] = \串口中断收发示例: 串口2 ->串口1 (中断收发)%uint8_t RxBuffer1[RxBufferSize1]; uint8_t RxBuffer2[RxBufferSize2]; __IO uint8_t TxCounter1 = 0x00; __IO uint8_t TxCounter2 = 0x00; __IO uint8_t RxCounter1 = 0x00; __IO uint8_t RxCounter2 = 0x00;

uint8_t NbrOfDataToTransfer1 = TxBufferSize1; uint8_t NbrOfDataToTransfer2 = TxBufferSize2; uint8_t NbrOfDataToRead1 = RxBufferSize1; uint8_t NbrOfDataToRead2 = RxBufferSize2; __IO TestStatus TransferStatus1 = FAILED; __IO TestStatus TransferStatus2 = FAILED;

/* Private function prototypes -----------------------------------------------*/ voidRCC_Configuration(void); voidGPIO_Configuration(void); voidNVIC_Configuration(void);

TestStatusBuffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength);

/* Private functions ---------------------------------------------------------*/ /**

* @brief Main program * @param None * @retvalNone */

int main(void) {

/*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f10x_xx.s) before to branch to application main.

To reconfigure the default setting of SystemInit() function, refer to system_stm32f10x.c file */

/* System Clocks Configuration */ RCC_Configuration();

/* NVIC configuration */ NVIC_Configuration();

/* Configure the GPIO ports */ GPIO_Configuration();

GPIO_ResetBits(GPIO_LED,LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN);/*关闭所有的LED指示灯*/ /* USART1 and USART2 configuration ------------------------------------------------------*/

/* USART1 and USART2 configured as follow: - BaudRate = 9600 baud - Word Length = 8 Bits - One Stop Bit - No parity

- Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */

USART_InitStructure.USART_BaudRate = 115200; /*设置波特率为115200*/

USART_InitStructure.USART_WordLength = USART_WordLength_8b;/*设置数据位为8*/ USART_InitStructure.USART_StopBits = USART_StopBits_1; /*设置停止位为1位*/ USART_InitStructure.USART_Parity = USART_Parity_No; /*无奇偶校验*/

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/*无硬件流控*/

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /*发送和接收*/

/*配置串口1 */

USART_Init(USART1, &USART_InitStructure); /*配置串口2*/

USART_Init(USART2, &USART_InitStructure);

/*使能串口1的发送和接收中断*/

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_ITConfig(USART1, USART_IT_TXE, ENABLE);

/*使能串口2的发送和接收中断*/

USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); USART_ITConfig(USART2, USART_IT_TXE, ENABLE);

/* 使能串口1 */

USART_Cmd(USART1, ENABLE);

/* 使能串口2 */

USART_Cmd(USART2, ENABLE);

/* Wait until end of transmission from USART1 to USART2 */ while(RxCounter2 < RxBufferSize2) { }

/* Wait until end of transmission from USART2 to USART1 */ while(RxCounter1 < RxBufferSize1) { }

/* Check the received data with the send ones */

TransferStatus1 = Buffercmp(TxBuffer2, RxBuffer1, RxBufferSize1);

/* TransferStatus1 = PASSED, if the data transmitted from USART2 and received by USART1 are the same */

/* TransferStatus1 = FAILED, if the data transmitted from USART2 and received by USART1 are different */

TransferStatus2 = Buffercmp(TxBuffer1, RxBuffer2, RxBufferSize2);

/* TransferStatus2 = PASSED, if the data transmitted from USART1 and received by USART2 are the same */

/* TransferStatus2 = FAILED, if the data transmitted from USART1 and received by USART2 are different */

while (1) {

if(TransferStatus1 == PASSED) { GPIO_SetBits(GPIO_LED,LD1_PIN);/*点亮LD1,串口1接收的数据与串口2发送的数据相同*/ }

else if(TransferStatus1 == FAILED) {

GPIO_SetBits(GPIO_LED,LD2_PIN);/*点亮LD2,串口1接收的数据与串口2发送的数据不相同*/ }

if(TransferStatus2 == PASSED) { GPIO_SetBits(GPIO_LED,LD3_PIN);/*点亮LD3,串口2接收的数据与串口1发送的数据相同*/ }

else if(TransferStatus2 == FAILED) { GPIO_SetBits(GPIO_LED,LD4_PIN);/*点亮LD4,串口2接收的数据与串口1发送的数据不相同*/ } } } /**

* @brief Configures the different system clocks. * @param None * @retvalNone */

voidRCC_Configuration(void) {

/*使能串口1和串口2使用的GPIO时钟*/

RCC_APB2PeriphClockCmd(USART1_GPIO_CLK |USART2_GPIO_CLK, ENABLE); /* Enable USART1 Clock */ /*使能串口1时钟*/

RCC_APB2PeriphClockCmd(USART1_CLK, ENABLE); /*使能串口2时钟*/

RCC_APB1PeriphClockCmd(USART2_CLK, ENABLE);

/*使能LED灯使用的GPIO时钟*/

RCC_APB2PeriphClockCmd(RCC_GPIO_LED, ENABLE); } /**

* @brief Configures the different GPIO ports. * @param None * @retvalNone */

voidGPIO_Configuration(void) {

GPIO_InitTypeDefGPIO_InitStructure;

/*串口1 RX管脚配置*/

/* Configure USART1 Rx as input floating */ GPIO_InitStructure.GPIO_Pin = USART1_RxPin;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(USART1_GPIO, &GPIO_InitStructure);

/*串口2 RX管脚配置*/

/* Configure USART2 Rx as input floating */ GPIO_InitStructure.GPIO_Pin = USART2_RxPin; GPIO_Init(USART2_GPIO, &GPIO_InitStructure);

/*串口1 TX管脚配置*/

/* Configure USART1 Tx as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = USART1_TxPin;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(USART1_GPIO, &GPIO_InitStructure);

/*串口2 TX管脚配置*/

/* Configure USART2 Tx as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = USART2_TxPin; GPIO_Init(USART2_GPIO, &GPIO_InitStructure);

/* 配置LED灯使用的GPIO管脚模式*/

GPIO_InitStructure.GPIO_Pin = LD1_PIN|LD2_PIN|LD3_PIN|LD4_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIO_LED, &GPIO_InitStructure); } /**


11.串口收发实验.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:大学英语听力教程上册unit9原文及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: