


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
STM32F103单片机编程入门一款单片机入门,至少四样:时钟、端口、定时、串口、中断。系统时钟RCC系统内部有8M_RC晶振和32678Hz_RC晶振有大约2%的温飘。当外部有8M晶振时,自动选择外部晶振,失效时自动切换成内部。程序自动倍频成72M。如果用于通信最好加个外部晶振。判断是否使用外部晶振的方法:短接外部晶振引脚观察工作情况。分为两个桥,对应不同的外设,每个外设又可以单独设定时钟。初步学习,先不用单独设定,均选用系统时钟72M。可根据情况做一步分频。用到某外设时,配置RCC(打开外设时钟),一般只有一句指令。一般临时查找。呵呵,我也没找到好办法。GPIO:RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE);USART:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);Timer2:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);端口GPIO 端口配置思路:1,先定义一个结构体配置成员参数值,类型是GPIO_InitTypeDef,下划线是结构体名;结构体名是GPIO_InitStructure:名称可以自定义。在后面利用参数初始化函数时要一致。2,打开相对应的端口时钟RCC。3,声明要配置的管脚,可以用“|”复选4,配置模式,4种输入,4种输出5,配置管脚频率,一般都是50Mhz6,最后调用函数GPIO_Init(GPIOA, &GPIO_InitStructure);第2个参数是,结构体地址指针。Eg: GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure);一、 串口USART串口配置思路:1,定义结构体,类型是USART_InitTypeDef;2,打开串口时钟,可以选择和端口GPIO一起3,设置波特率,省去了复杂的烦人的计算4,设置字长。8位?9位?5,设置停止位。1位?2位?6,设置校验位,奇偶?无?7,设置硬件流(调制解调器用)用不到设None就行8,串口工作模式:收?发?都有?9,调用函数 USART_Init(USART1, &USART_InitStructure); 配置串口10,开启串口中断USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);或USART_IT_TXE, ENABLE);收发中断的使能。11,中断响应函数void USART1_IRQHandler(void) 12,取出缓存数据data=USART_ReceiveData(USART1);读操作自动清零串口接受标志位。13,发送数据USART_SendData(USART2,FromScreenUa1)和while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) = RESET);等待发送完成(寄存器非空)。Eg: USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE);USART_InitStructure.USART_BaudRate = 9600; 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_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);void USART1_IRQHandler(void) /串口1中断函数,接收终中断Data=USART_ReceiveData(USART1); /接受道到的数据,存入变量Data;Receive_Flag1 = 1;/自定义标识。if(Receive_Flag1 = 1) /用串口2发送串口1收到的数据。USART_SendData(USART2,FromScreenUa1);while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) = RESET)/等待发送完成 Receive_Flag1 = 0;二、 中断概述及思路概述:STM32中断较复杂;有几个优先级,哪个高哪个低都可以自由配置用NVIC管理并配置:因为中断源多,所以用分组不同的优先级来不同管理,组与组之间没有关系,互不干扰,同一组之间分:抢占式(主)和响应式(从)。抢占式优先级可以嵌套,同在抢占式则1#抢(嵌套)2#,有几个抢占级别就有几级优先级。抢占式级别相同的时候,如果同一时间同时到来,按从优先级排序。但是不嵌套。编程思路:1,定义结构体,类型是NVIC_InitTypeDef2,确定一下选用哪一组,也就是想好用几级优先级。3,设置中断源4,设置主优先级号,也就是级别5,设置从优先级号,也就是主优先级相同时,排序不嵌套。6,使能,函数NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 7,NVIC配置函数 NVIC_Init(&NVIC_InitStructure); Eg: NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /选用第1组,2个优先级 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; /中断源,串口1 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; /主优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /从优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);三、 定时器概述以及编程思路(不含RTC实时时钟)概述:STM32F103C8T6,定时器有:滴答时钟1个SysTick timer、高级定时器1个Time1、通用定时器3个Time2Time4、看门狗定时器2个WatchDog;通用定时器 需要了解在RCC哪里(ABP1还是ABP2?),时钟频率。1, 定义结构体,类型是TIM_TimeBaseInitTypeDef;名为TIM_TimeBaseStructure;2, 启动RCC时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);3, 最好先参数缺省一下(防止之前已经设置了参数)TIM_DeInit(TIM2);4, 定时周期(自动重载,_)TIM_TimeBaseStructure.TIM_Period=1000; /1000个Cnt计数值(65535)。Cnt时基呢?看下面。5, 设定定时时基即采样周期(二级设定避免计数值过大)TIM_TimeBaseStructure.TIM_Prescaler= (72 - 1);/主频72M。时基就是72/72 000 000=1us, Prescaler值也是65535。所以上面定时1ms。如果要分频就不是72M了,看下面。6, 定时器基础脉冲是否分频?如果分频上面就不是1us了;TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;/不分频72M7, 计数模式,向上计数还是向下?TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /向上计数8, 调用函数初始化参数 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);9, 清除(复位)中断标志,防止立即产生一个中断。(也就是溢出中断) TIM_ClearFlag(TIM2, TIM_FLAG_Update);10, 使能定时器2的中断 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);11, 启动定时器2 TIM_Cmd(TIM2, ENABLE);/*开启定时器12, 定时中断函数void TIM2_IRQHandler(void);不用再记忆中断号了,哈哈13, 进入定时器中断的程序的原因不唯一,比如:更新事件的产生,捕获事件的产生等,故在进入中断的一开始确认利用这句话确定是不是确定发生了更新事件。所以加一句判断if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET ); /更新产生的中断即重载中断。14, 必须程序复位标志位 TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update); 或者用另一种方法TIM_ClearFlag(TIM2, TIM_FLAG_Update);EgTIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);TIM_DeInit(TIM2);TIM_TimeBaseStructure.TIM_Period=1000; /1000个时基TIM_TimeBaseStructure.TIM_Prescaler= (36000- 1); /时基0.5msTIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /不分频TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /* 向上计数模式 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_ClearFlag(TIM2, TIM_FLAG_Update); TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);TIM_Cmd(TIM2, ENABLE);void TIM2_IRQHandler(void) /TIM2的中断服务程序。 int display;display=GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_13);/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 62906-6-1:2025 EN Laser displays - Part 6-1: Visualization method of colour gamut intersection
- 2025至2030中国电热毯行业发展研究与产业战略规划分析评估报告
- 2025至2030中国电子肺活量计行业产业运行态势及投资规划深度研究报告
- 2025年《护理交接班制度》考试试题(附答案)
- 教育领域下的电力革新-以AI辅助教学设备为例
- 教育心理学与德育在思政课程中的融合
- 教育信息化助力智慧课堂变革发展
- 智能教育新篇章绿色办公从这里开始
- 教育技术助力特殊教育的全球化发展
- 商业教育中的心理学如何设计高效课程
- 企业消防安全责任制模板
- 2025届黑龙江省哈尔滨四十七中学七年级英语第二学期期末统考试题含答案
- 人工智能通识课程开课方案
- 2025-2030中国智慧政务行业发展策略及投资潜力预测报告
- 【中考真题】2025年福建中考数学真题试卷(含解析)
- 人教版七年级下册英语完形填空专项训练13篇
- 绣花生产工艺流程
- 华为5G网络建设指导及站点硬件安装手册2020v2-1-54
- 第2章工业控制网络技术基础
- 海姆立克急救法PPT
- YS/T 534.3-2007氢氧化铝化学分析方法第3部分:二氧化硅含量的测定钼蓝光度法
评论
0/150
提交评论