286 lines
6.9 KiB
C
286 lines
6.9 KiB
C
/*
|
|
* J5-0_USART3.c
|
|
*
|
|
* Created on: 2024年5月18日
|
|
* Author: 34509
|
|
*/
|
|
#include "J5-0_USART3.h"
|
|
#include "uart_dev.h"
|
|
|
|
|
|
void USART3_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
|
|
|
|
|
|
|
|
/* 接收缓冲区数组 */
|
|
uint8_t USART3_Rbuffer[1] = {0x00};
|
|
|
|
/*
|
|
* Function Name : J5_0_485_Init
|
|
* Description : 初始话串口3用于控制J5-0共6个485接口,设置控制的485为J0.
|
|
* Input : None
|
|
* Return : None
|
|
**/
|
|
void J5_0_485_Init(uint32_t baud)
|
|
{
|
|
rt_pin_mode(J5_PWR_Ctrl, PIN_MODE_OUTPUT);
|
|
rt_pin_mode(J6_PWR_Ctrl, PIN_MODE_OUTPUT);
|
|
rt_pin_mode(J7_PWR_Ctrl, PIN_MODE_OUTPUT);
|
|
rt_pin_mode(J8_PWR_Ctrl, PIN_MODE_OUTPUT);
|
|
rt_pin_mode(J9_PWR_Ctrl, PIN_MODE_OUTPUT);
|
|
|
|
rt_pin_mode(USART3_DE, PIN_MODE_OUTPUT);
|
|
/* 设置485状态为读 */
|
|
rt_pin_write(USART3_DE, read);
|
|
|
|
rt_pin_mode(TD_USART_A, PIN_MODE_OUTPUT);
|
|
rt_pin_mode(TD_USART_B, PIN_MODE_OUTPUT);
|
|
rt_pin_mode(TD_USART_C, PIN_MODE_OUTPUT);
|
|
/* 设置USART3连接J0 485 */
|
|
USART_CONNET_J0();
|
|
|
|
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
USART_InitTypeDef USART_InitStructure;
|
|
NVIC_InitTypeDef NVIC_InitStructure;
|
|
|
|
/* USART3 TX --> PB10 RX --> PB11 */
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
|
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
|
|
|
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
|
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //设置PB10为复用推挽输出
|
|
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
|
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //设置PB11为浮空输入
|
|
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
|
|
USART_InitStructure.USART_BaudRate = baud;
|
|
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
|
|
USART_InitStructure.USART_StopBits = USART_StopBits_1;
|
|
USART_InitStructure.USART_Parity = USART_Parity_No;
|
|
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
|
|
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
|
|
USART_Init(USART3, &USART_InitStructure);
|
|
|
|
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
|
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; //抢占优先级为1
|
|
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子优先级为1
|
|
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
|
|
NVIC_Init(&NVIC_InitStructure); //中断优先级初始化
|
|
|
|
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
|
|
// USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);
|
|
|
|
USART_Cmd(USART3,ENABLE);
|
|
}
|
|
|
|
|
|
|
|
void USART3_IRQHandler(void)
|
|
{
|
|
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //中断产生
|
|
{
|
|
// USART_ClearITPendingBit(USART3,USART_IT_RXNE); //清除中断标志
|
|
// USART_Rbuffer[USART_Rbuffer_Num] = USART_ReceiveData(USART3); //接收数据
|
|
// USART_Rbuffer_Num++;
|
|
USART3_Rbuffer[0] = USART_ReceiveData(USART3); //接收数据
|
|
uint8_t c = 0;
|
|
uart_device_info *dev = (uart_device_info *)g_J50RS485_USART3_handle;
|
|
c = USART3_Rbuffer[0];
|
|
if(!RingQueueFull(&dev->uart_ring_queue))
|
|
InRingQueue(&dev->uart_ring_queue, c);
|
|
}
|
|
|
|
// if(USART_GetITStatus(USART3, USART_IT_IDLE) != RESET) //中断产生
|
|
// {
|
|
//// for(USART_Tbuffer_Num=0;USART_Tbuffer_Num < USART_Rbuffer_Num;USART_Tbuffer_Num++)
|
|
//// {
|
|
//// USARTx_SendByte(USART3, USART_Rbuffer[USART_Tbuffer_Num]); //发送数据
|
|
//// }
|
|
// USARTx_SendStr_Len(USART3, USART_Rbuffer, USART_Rbuffer_Num);
|
|
// rt_kprintf("USART_Rbuffer_Num = %d \n", USART_Rbuffer_Num);
|
|
//// USART3->STATR;
|
|
//// USART3->DATAR;
|
|
// USART_Rbuffer_Num = 0; //初始化
|
|
// USART_ReceiveData(USART3); //读DR
|
|
// }
|
|
//
|
|
// if(USART_GetFlagStatus(USART3,USART_FLAG_ORE) == SET) //溢出
|
|
// {
|
|
// USART_ClearFlag(USART3,USART_FLAG_ORE); //清标志
|
|
// USART_ReceiveData(USART3); //读DR
|
|
// }
|
|
}
|
|
|
|
/*
|
|
* Function Name : USART_CONNET_J0
|
|
* Description : 控制串口3连接J0对应的485.
|
|
* Input : None
|
|
* Return : None
|
|
**/
|
|
void USART_CONNET_J0(void)
|
|
{
|
|
J5_PWR_Close();
|
|
J6_PWR_Close();
|
|
J7_PWR_Close();
|
|
J8_PWR_Close();
|
|
J9_PWR_Close();
|
|
rt_pin_write(TD_USART_A, PIN_LOW);
|
|
rt_pin_write(TD_USART_B, PIN_LOW);
|
|
rt_pin_write(TD_USART_C, PIN_LOW);
|
|
}
|
|
|
|
/*
|
|
* Function Name : USART_CONNET_J5
|
|
* Description : 控制串口3连接J5对应的485.
|
|
* Input : None
|
|
* Return : None
|
|
**/
|
|
void USART_CONNET_J5(void)
|
|
{
|
|
J5_PWR_Open();
|
|
J6_PWR_Close();
|
|
J7_PWR_Close();
|
|
J8_PWR_Close();
|
|
J9_PWR_Close();
|
|
rt_pin_write(TD_USART_A, PIN_LOW);
|
|
rt_pin_write(TD_USART_B, PIN_LOW);
|
|
rt_pin_write(TD_USART_C, PIN_LOW);
|
|
}
|
|
|
|
/*
|
|
* Function Name : USART_CONNET_J6
|
|
* Description : 控制串口3连接J6对应的485.
|
|
* Input : None
|
|
* Return : None
|
|
**/
|
|
void USART_CONNET_J6(void)
|
|
{
|
|
J5_PWR_Close();
|
|
J6_PWR_Open();
|
|
J7_PWR_Close();
|
|
J8_PWR_Close();
|
|
J9_PWR_Close();
|
|
rt_pin_write(TD_USART_A, PIN_HIGH);
|
|
rt_pin_write(TD_USART_B, PIN_LOW);
|
|
rt_pin_write(TD_USART_C, PIN_LOW);
|
|
}
|
|
|
|
/*
|
|
* Function Name : USART_CONNET_J7
|
|
* Description : 控制串口3连接J7对应的485.
|
|
* Input : None
|
|
* Return : None
|
|
**/
|
|
void USART_CONNET_J7(void)
|
|
{
|
|
J5_PWR_Close();
|
|
J6_PWR_Close();
|
|
J7_PWR_Open();
|
|
J8_PWR_Close();
|
|
J9_PWR_Close();
|
|
rt_pin_write(TD_USART_A, PIN_HIGH);
|
|
rt_pin_write(TD_USART_B, PIN_HIGH);
|
|
rt_pin_write(TD_USART_C, PIN_LOW);
|
|
}
|
|
|
|
/*
|
|
* Function Name : USART_CONNET_J8
|
|
* Description : 控制串口3连接J8对应的485.
|
|
* Input : None
|
|
* Return : None
|
|
**/
|
|
void USART_CONNET_J8(void)
|
|
{
|
|
J5_PWR_Close();
|
|
J6_PWR_Close();
|
|
J7_PWR_Close();
|
|
J8_PWR_Open();
|
|
J9_PWR_Close();
|
|
rt_pin_write(TD_USART_A, PIN_LOW);
|
|
rt_pin_write(TD_USART_B, PIN_LOW);
|
|
rt_pin_write(TD_USART_C, PIN_HIGH);
|
|
}
|
|
|
|
/*
|
|
* Function Name : USART_CONNET_J9
|
|
* Description : 控制串口3连接J9对应的485.
|
|
* Input : None
|
|
* Return : None
|
|
**/
|
|
void USART_CONNET_J9(void)
|
|
{
|
|
J5_PWR_Close();
|
|
J6_PWR_Close();
|
|
J7_PWR_Close();
|
|
J8_PWR_Close();
|
|
J9_PWR_Open();
|
|
rt_pin_write(TD_USART_A, PIN_HIGH);
|
|
rt_pin_write(TD_USART_B, PIN_LOW);
|
|
rt_pin_write(TD_USART_C, PIN_HIGH);
|
|
}
|
|
|
|
|
|
|
|
void J5_PWR_Open(void)
|
|
{
|
|
rt_pin_write(J5_PWR_Ctrl, open);
|
|
}
|
|
|
|
|
|
void J5_PWR_Close(void)
|
|
{
|
|
rt_pin_write(J5_PWR_Ctrl, close);
|
|
}
|
|
|
|
|
|
void J6_PWR_Open(void)
|
|
{
|
|
rt_pin_write(J6_PWR_Ctrl, open);
|
|
}
|
|
|
|
|
|
void J6_PWR_Close(void)
|
|
{
|
|
rt_pin_write(J6_PWR_Ctrl, close);
|
|
}
|
|
|
|
|
|
void J7_PWR_Open(void)
|
|
{
|
|
rt_pin_write(J7_PWR_Ctrl, open);
|
|
}
|
|
|
|
|
|
void J7_PWR_Close(void)
|
|
{
|
|
rt_pin_write(J7_PWR_Ctrl, close);
|
|
}
|
|
|
|
|
|
void J8_PWR_Open(void)
|
|
{
|
|
rt_pin_write(J8_PWR_Ctrl, open);
|
|
}
|
|
|
|
|
|
void J8_PWR_Close(void)
|
|
{
|
|
rt_pin_write(J8_PWR_Ctrl, close);
|
|
}
|
|
|
|
|
|
void J9_PWR_Open(void)
|
|
{
|
|
rt_pin_write(J9_PWR_Ctrl, open);
|
|
}
|
|
|
|
|
|
void J9_PWR_Close(void)
|
|
{
|
|
rt_pin_write(J9_PWR_Ctrl, close);
|
|
}
|