王建 发表于 2014-4-16 16:50:50

【原创】【MCU实战经验】+ 利用STM32F103实现的USB-TO-RS485模块产品,源代码及原理图。

部分关键源代码预览如下,原理图及手板样片随后。
 /*******************************************************************************
* Function Name  : USART2_IRQHandler
* Description    : This function handles USART2 global interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
 
void USART2_IRQHandler(void)
{
  if (USART_GetITStatus(USART2, USART_IT_TC) != RESET) {
    /* Set DE  to low level  pin(PA.8) */
    GPIOA->BRR = GPIO_Pin_8;
    /* Disable the USART2 Transmit Complete interrupt */
    USART_ITConfig(USART2, USART_IT_TC, DISABLE);
    /* Clear USART2 TC pending bit */
    USART_ClearFlag(USART2, USART_FLAG_TC);
  }  
   if (USART_GetITStatus(USART2, USART_IT_TXE) != RESET) {
      if(USART2_Tx_length){
            if (USART2_Tx_length==1) {
                /* Set DE pin to high level  pin(PA.8) */
                GPIOA->BSRR = GPIO_Pin_8;
                USART2->DR = USART2_Tx_Buffer;
                /* Enable USART TC interrupt */
                USART_ITConfig(USART2, USART_IT_TC, ENABLE);
                /* Disable USART TXE interrupt */
                USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
            } else {
                if(USART2_Tx_ptr_out == USART2_Tx_Start){
                    /* Set DE pin to high level  pin(PA.8) */
                    GPIOA->BSRR = GPIO_Pin_8;
                    USART2->DR = USART2_Tx_Buffer;
                } else {
                    if (USART2_Tx_ptr_out < USART2_Tx_End) { 
                        USART2->DR = USART2_Tx_Buffer;
                    } else { 
                        /* Disable USART TXE interrupt */
                        USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
                        /* Enable USART TC interrupt */
                        USART_ITConfig(USART2, USART_IT_TC , ENABLE);
                    }
                }
            }
      }else{
        /* Set DE  to low level  pin(PA.8) */
        GPIOA->BRR = GPIO_Pin_8;
        /* Disable USART2 TXE interrupt */
        USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
        /* Disable USART2 TC interrupt */
        USART_ITConfig(USART2, USART_IT_TC , DISABLE);
      }
   }
  
if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET)
{
        /* Send the received data to the PC Host*/
        USART2_To_USB_Send_Data();
}
 
if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)==SET)
{
        (void)USART_ReceiveData(USART2);
}
}
 
工程源代码下载地址: 
相关原理图下载地址:   
 
 实验样品图片1,STM32F103C8T6外扩3路RS485:
 
 
 
实验样品图片2,STM32F103C8T6外扩3路RS485:

 
图片3,STM32F103C8T6通过RS485(USART2)发送数据的波形(1Mbps通讯):

 
 

hongpeng-257553 发表于 2014-4-17 15:34:00

RE:【原创】【MCU实战经验】+ 利用STM32F103实现的USB-TO-RS485模块产品,源代码及原理图。

非常感谢,学习了。

l516603417 发表于 2014-4-25 17:09:55

回复:【原创】【MCU实战经验】+ 利用STM32F103实现的USB-TO-RS485模块产品,源代码及原理图。

学习一下,感谢!!!!

杭州_吃货 发表于 2014-5-14 09:21:08

RE:【原创】【MCU实战经验】+ 利用STM32F103实现的USB-TO-RS485模块产品,源代码及原理图。

希望是好东西啊:L

jimmy_tw 发表于 2014-5-16 07:57:59

RE:【原创】【MCU实战经验】+ 利用STM32F103实现的USB-TO-RS485模块产品,源代码及原理图。

好樣的~~
:D

石头-395391 发表于 2014-5-17 13:06:26

RE:【原创】【MCU实战经验】+ 利用STM32F103实现的USB-TO-RS485模块产品,源代码及原理图。

赞一个 :D
页: [1]
查看完整版本: 【原创】【MCU实战经验】+ 利用STM32F103实现的USB-TO-RS485模块产品,源代码及原理图。