我用stm8s跟485与上位机通信,一直接收不到上位机的数据,找不出问题来

2019-07-19 20:25发布

[mw_shl_code=c,true]/************************************************************************************************** *函数:void UART1_RX_RXNE(void) *功能:串口接收中断函数 *参数: *返回: *说明: **************************************************************************************************/ #pragma vector=0x14 __interrupt void UART1_RX_RXNE(void) { MAX_485_RX;//485 使能拉低,接收数据 if (UART1_GetITStatus(UART1_IT_RXNE) != RESET) { data[j++] = UART_ReceiveByte(); } if(j == 9) { //UART_SendString(addr, sizeof(addr)); mark = false; j = 0; MAX_485_TX;//485 使能拉高,发送数据 } UART1_ClearITPendingBit(UART1_IT_RXNE);//清楚中断标志 } /************************************************************************************************** *函数:void TIM1_OVR_UIF(void) *功能:串口定时发送中断函数 *参数: *返回: *说明: **************************************************************************************************/ #pragma vector=0x0F __interrupt void TIM1_OVR_UIF(void) { MAX_485_TX;//485 使能拉高,发送数据 UART_SendString(addr, sizeof(addr)); UART_SendString(data, sizeof(data)); TIM2_ClearITPendingBit(TIM2_IT_UPDATE);//清楚中断标志 MAX_485_RX;//485 使能拉低,接收数据 }[/mw_shl_code] [mw_shl_code=c,true]#define MAX_485_PORT GPIOD #define MAX_485_TR_PIN GPIO_PIN_4 #define MAX_485_TX MAX_485_PORT->ODR |= (uint8_t)MAX_485_TR_PIN //485 使能拉高,发送数据 #define MAX_485_RX MAX_485_PORT->ODR &= (uint8_t)(~MAX_485_TR_PIN) //485 使能拉低,接收数据 /************************************************************************************************** *函数:void CLK_INIT(void) *功能:时钟初始化 *参数:无 *返回:无 *说明: **************************************************************************************************/ void CLK_INIT(void) { CLK_HSICmd(ENABLE);//使能内部高频RC CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);//内部高速RC振荡时钟分频 16MHZ CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV8);//CPU核心时钟分频 CLK_ClockSwitchCmd(ENABLE); //切换使能 CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO ,CLK_SOURCE_HSE,DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);//切换配置 CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1,ENABLE);//串口1时钟开 } /************************************************************************************************** *函数:void TIM2_INIT(void) *功能:定时器2初始化 *参数:无 *返回:无 *说明: **************************************************************************************************/ void TIM2_INIT(void) { TIM2_TimeBaseInit(TIM2_PRESCALER_1024, 0X3D09);//64分频得到31250HZ的定时器时钟,1s TIM2_Cmd(ENABLE);//启动定时器 TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);//中断配置 } /************************************************************************************************** *函数:void UART1_INIT(void) *功能:串口1初始化 *参数:无 *返回:无 *说明: **************************************************************************************************/ void UART1_INIT(void) { UART1_Cmd(ENABLE);//开串口 UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE); //UART1_ITConfig(UART1_IT_TXE, DISABLE);//关串口开始发送中断 //UART1_ITConfig(UART1_IT_TC, DISABLE);//关串口发送结束中断 UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);//UART1_IT_RXNE,接收数据寄存器非空或溢出错误中断 UART1_WakeUpConfig(UART1_WAKEUP_IDLELINE );//被空闲总线唤醒 UART1_ReceiverWakeUpCmd(ENABLE);//开接收唤醒 GPIO_Init(MAX_485_PORT, MAX_485_TR_PIN, GPIO_MODE_OUT_PP_LOW_FAST);//初始化GPIO,高速推挽输出低电平 //MAX_485_RX;//485 使能拉低,接收数据 }[/mw_shl_code]

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。