STM32的485最简单例程

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

485最基本的半双工通信配置

采用STM32F103ZET6串口3连接485芯片通信口,485芯片的A,B通过485转串口模块与电脑相连,完成在串口软件上输入输出功能。

串口3,配置函数:

void USART3_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);

// USART3_TX -> PB10 , USART3_RX ->PB11

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

USART_ART_BaudRate = 115200; // 1200;

USART_ART_WordLength = USART_WordLength_8b;

USART_ART_StopBits = USART_StopBits_1;

USART_ART_Parity = USART_Parity_No; //USART_Parity_Even;

USART_ART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_ART_Mode = USART_Mode_Rx | USART_Mode_Tx;

USART_Init(USART3, &USART_InitStructure);

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

#ifdef PDU_USART3_DMA

USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);

#else

// Enable the USART Receive interrupt: this interrupt is generated when the

//USART3 receive data register is not empty

//USART_ClearITPendingBit(USART3, USART_IT_TC);

USART_ClearFlag(USART3,USART_FLAG_TC);

USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);

USART_ITConfig(USART3, USART_IT_TC, ENABLE);

//USART_ITConfig(USART3, USART_IT_TXE, ENABLE);

USART_ClearFlag(USART3,USART_FLAG_TC);

#endif

USART_Cmd(USART3, ENABLE);

USART_ClearFlag(USART3,USART_FLAG_TC);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOE, &GPIO_InitStructure);

RS_485_TX_ENABLE();

}

PUTCHAR_PROTOTYPE

{

/* Place your implementation of fputc here */

/* e.g. write a character to the USART */

USART_SendData(USART3, (uint8_t) ch);

//USART_SendData(USART1,(uint8_t)ch);

/* Loop until the end of transmission */

//while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)

while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET)

{}

return ch;

}

相关文档
最新文档