找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4640|回复: 4
收起左侧

STM32F427的TP8485芯片RS485和PC通信源程序

[复制链接]
ID:383558 发表于 2018-12-1 15:41 | 显示全部楼层 |阅读模式
亲测有效,同PC间通信。
【*】 程序简介
-工程名称:工程模版
-实验平台: STM32F427 同步控制器
-MDK版本:
-ST固件库版本:

【*】 时钟

A.晶振:
-外部高速晶振:25MHz
-RTC晶振:32.768KHz

B.各总线运行时钟:
-系统时钟 = SYCCLK = AHB1 = 180MHz
-APB2 = 90MHz
-APB1 = 45MHz

C.浮点运算单元:
  使能

单片机源程序如下:
  1. #include "stm32f4xx.h"
  2. #include "stm32f4xx_usart.h"
  3. uint8_t rx_flag=0;
  4. uint8_t rx_buff[100]={0x00,0x00};
  5. uint8_t i=0,j=0;
  6. uint8_t n=5;


  7. void USART_INIT(void);
  8. void nvic_configuration(void);
  9. int main(void)
  10. {       
  11.         USART_INIT();
  12.         GPIO_SetBits(GPIOA, GPIO_Pin_6);       
  13.         USART_SendData(USART2, 66);
  14.         while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
  15.         USART_SendData(USART2, 67);
  16.         while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
  17.         GPIO_ResetBits(GPIOA, GPIO_Pin_6);       
  18.   while(1)
  19.         {
  20.                 if(rx_flag==1)
  21.                 {                       
  22.                         rx_buff[i++]=USART_ReceiveData(USART2);
  23.                         rx_flag=0;
  24.                 }
  25.                 if(i==n)
  26.                 {
  27.                         GPIO_SetBits(GPIOA, GPIO_Pin_6);
  28.                         i=0;
  29.                         for(j=0;j<n;j++)
  30.                         {                                       
  31.                                 USART_SendData(USART2, rx_buff[j]);
  32.                                 while(USART_GetFlagStatus(USART2,  USART_FLAG_TC)==RESET);
  33.                         }
  34.                         GPIO_ResetBits(GPIOA, GPIO_Pin_6);       
  35.                 }
  36.                
  37.         }
  38. }
  39. void USART_INIT(void)
  40. {
  41. //        GPIO initiallize
  42.         GPIO_InitTypeDef GPIO_InitStructure;
  43.        
  44.         RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOA ,ENABLE); //使能外设时钟AHB1                                                                                                         
  45.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;           //        A6   control singal        
  46.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;   //实际上就是推挽输出
  47.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  48.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  49.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  50.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  51.         GPIO_ResetBits(GPIOA, GPIO_Pin_6);       

  52.         GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); //GPIOA2复用为USART2
  53.         GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2); //GPIOA3复用为USART2       
  54.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 |GPIO_Pin_3 ;  //Tx and Rx         
  55.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;     //alternate function
  56.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  57.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  58.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //low rate
  59.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  60.        
  61.         ////USART initiallize
  62.         USART_InitTypeDef usart_2_initstructure;
  63.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2时钟 挂载在APB1外设时钟上
  64.        
  65.         usart_2_initstructure.USART_BaudRate=9600;
  66.         usart_2_initstructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
  67.         usart_2_initstructure.USART_Mode=USART_Mode_Rx |USART_Mode_Tx;
  68.         usart_2_initstructure.USART_Parity=USART_Parity_No;
  69.         usart_2_initstructure.USART_StopBits=USART_StopBits_1;
  70.         usart_2_initstructure.USART_WordLength=USART_WordLength_8b;
  71.         USART_Init(USART2, &usart_2_initstructure);  
  72.   USART_Cmd(USART2, ENABLE);  //使能串口2
  73.        
  74.         //some flags and IT
  75.         USART_ClearFlag(USART2, USART_FLAG_TC);  //clear transmit flag               
  76.        
  77.         nvic_configuration();
  78.         USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启相关中断
  79. }
  80. //内嵌中断向量控制器config
  81. void nvic_configuration()
  82. {
  83.                 //NVIC config and initiallize
  84.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  85.         NVIC_InitTypeDef NVIC_InitStructure;
  86.        
  87.         NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;
  88.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
  89.         NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
  90.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE ;
  91.         NVIC_Init(&NVIC_InitStructure);       
  92. }
  93. void USART2_IRQHandler()
  94. {
  95.         if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
  96.         {
  97. //                        rx_buff[i++]=USART_ReceiveData(USART2);
  98.                 rx_flag=1;
  99.                 USART_ClearFlag(USART2, USART_FLAG_RXNE);
  100.         }
  101. }
复制代码

所有资料51hei提供下载:
F427_USART2_485.rar (612.81 KB, 下载次数: 38)




回复

使用道具 举报

ID:383558 发表于 2018-12-1 15:42 | 显示全部楼层
可以找我要硬件电路图
回复

使用道具 举报

ID:1 发表于 2018-12-1 17:26 | 显示全部楼层
图纸能上传下吗?点高级模式即可
回复

使用道具 举报

ID:163323 发表于 2018-12-1 20:40 | 显示全部楼层
多谢了,我正要找的
回复

使用道具 举报

ID:383558 发表于 2018-12-9 16:22 | 显示全部楼层
admin 发表于 2018-12-1 17:26
图纸能上传下吗?点高级模式即可

不知截图是否可以 QQ图片20181209162116.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表