STM32的485最简单例程
更新时间:2023-11-23 04:14:01 阅读量: 教育文库 文档下载
- STM32简单课程设计推荐度:
- 相关推荐
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_InitStructure.USART_BaudRate = 115200; // 1200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; //USART_Parity_Even; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_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; }
中断函数:
void USART3_IRQHandler(void) { if(USART_GetITStatus(USART3, USART_IT_IDLE) != RESET) { USART_ClearITPendingBit(USART3, USART_IT_IDLE); } if(USART_GetFlagStatus(USART3, USART_FLAG_RXNE)!=RESET) { USART_ClearFlag(USART3,USART_FLAG_RXNE);
TIM3_Init(1000, 7200); BLUE_ON(); if(cnt>=32) { cnt=0; } else{ data[cnt]=USART_ReceiveData(USART3); cnt++; } }
if ((USART_GetITStatus(USART3, USART_IT_TC) != RESET) || (USART_GetITStatus(USART3, USART_IT_TXE) != RESET) ){ USART_ClearITPendingBit(USART3, USART_IT_TC); USART_ClearITPendingBit(USART3, USART_IT_TXE); // USART_SendData(USART3, 0XFFFF); } }
void TIM3_IRQHandler(void) {
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM3, TIM_IT_Update); TIM3_DeInit(); BLUE_OFF();
// printf(\ cnt=0; } }
static void NVIC_TIM3Configuration(void) {
NVIC_InitTypeDef NVIC_InitStructure;
/* Set the Vector Table base address at 0x08000000 */ //NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);
/* Enable the TIM3 gloabal Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); }
定时器:
void TIM3_Init(uint16_t tcon, uint16_t psc) {
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// TIM3 clock enable
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // reset timer TIM_DeInit(TIM3);
// Time base configuration // value to reload
TIM_TimeBaseStructure.TIM_Period = (tcon - 1); // pre-scaler value against system clock
TIM_TimeBaseStructure.TIM_Prescaler = (psc - 1); // scaler value against system clock
TIM_TimeBaseStructure.TIM_ClockDivision = 0; // counting mode
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // init timer
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
// Clear TIM3 update pending flag
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
// TIM IT enable of over-counting
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
// config timer's interruption function NVIC_TIM3Configuration(); // Enable TIM3 counter TIM_Cmd(TIM3, ENABLE); }
void TIM3_DeInit(void) { // Disable TIM3 counter TIM_Cmd(TIM3, DISABLE); // Reset timer TIM_DeInit(TIM3); // Disable TIM3 clock
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, DISABLE); //tim3_stat = 0x00; }
主函数:
#ifdef __GNF__
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */
正在阅读:
STM32的485最简单例程11-23
基护试题库 单元(3)11-13
政务新闻翻译(1,2,3稿对比)03-11
音乐基础知识测试题12-18
闻一多先生讲学稿06-22
六一儿童节条幅-六一儿童节横幅标语07-31
信息系统和网站考核检查 - 图文07-07
乡村生活作文700字07-14
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 简单
- STM32
- 485
- 江苏省大丰市万盈二中九年级物理题库全解:11.1杠杆
- 用“四舍五入”法求近似数
- 研修日志 - 学习用《论语》的智慧,涵养师德一课有感 - 图文
- 陕西省西藏民族学院附属中学2017届高三4月月考理科综合物理试题 含答案 精品
- 江西省中考语文复习现代文阅读专题九记叙文散文小说阅读备考精编0619363
- 用于准直光束的非球面透镜的球差
- 麻醉科手术室绩效工资改革方案探讨
- 中国南方电网有限责任公司电力事故事件调查规程 - 图文
- 生物医学研究的统计学方法 课后答案(思考与联系)
- 小学生健康知识测试题(低年级A卷)
- 人教版小学语文六年级下册(课件+教案+单元试题)《一夜的工作》教学设计
- 数字频率计设计 - 数字电子技术课程设计实验报告
- 科学与技术作业
- 广播电视台开展民族团结友爱工作总结
- “一带一路”提供新机遇,食品行业迎接全新挑战
- 四年级第二学期语文期末复习练习
- 市区择房分析
- 伊利集团2016年财务报表分析报告 - 图文
- 临床医学教育资料 Microsoft Word 文档
- 政 史 地 教 研 组 工 作 计 划