STM32f103C8T6入门学习记录(6)
RX_status = USART_GetFlagStatus(USART1, USART_FLAG_RXNE);//读取接收数据标志位,如果装好了一帧数据则硬件将其置一。 if(RX_status == SET) { USART_SendData(USART1 , USART_ReceiveData(USART1));//将收到的数据再由STM32发送给PC机。 while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);//等待发送完成。 } }
串口的发送接收大致如此,还是要搞懂什么数据位,硬件流,停止位,校验位什么,一个东西既然出现了就要好好分析出现的意义。想到了今天给电脑拆机清灰,电脑最好两年清一次。反正每次上螺丝都会多出那么一两个来,是不是可以不用要?
肯定不是,生产商肯定也知道节约成本什么,他们的结构工程师也知道PCB上开一个螺丝孔也是要收钱的。所以每一颗螺丝都有它的意义,所以什么校验位,停止位也有他的意义,即便我们不使用。 其实剩的螺丝我也扔了,完全不知道上在哪儿!
记于2014年6月8日 串口发送数据 百度云盘:http://pan.http://www.wodefanwen.com//s/1bn0ADLt 串口发送接收数据 百度云盘:http://pan.http://www.wodefanwen.com//s/1dD7YkZv
第五章
通用定时器的使用
1、STM32F103内部定时器有哪些?
STM32一共有8个通用16位Timer,其中TIMER1和TIMER8是高级定时器,其它的TIMER2~TIMER7是普通定时器。
此外还有一个Systick(系统滴答定时器),这个定时器通常在操作系统中作为系统的任务切换周期。
还有一个RTC,是一个毫秒定时器,支持秒级中断,用来做实时时钟计数器。 看门狗定时器 也可以算一个。
8个定时器中,Timer1 和Timer8是由APB2(输出最高频率为72MHZ)预分频后,再通过一个倍频器得到时钟频率,最高为72MHz。Timer2~Timer7则是由APB1(输出最高频率为36MHZ)预分频后,再通过一个倍频器得到时钟频率,最高为36MHz。
2、如何进行程序编写
这里我通过定时器来控制一个LED亮0.5s 灭0.5s ,交替闪烁。当然要让定时器正常工作起来,还要配置中断NVIC。定时器计数到某个数,产生中断,从而进入中断服务程序,点亮LED灯。
main函数分析:
#include \
void GPIO_Config(void)//GPIO配置 {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能gpioc的时 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //选择管脚PC.13作LED灯 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //管脚速度为50M GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置输出模式为推挽输出 GPIO_Init(GPIOC, &GPIO_InitStructure); //将上述设置写入到GPIOC里去 }
void NVIC_Config(void) //中断控制器的配置 {
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //优先组设置 NVIC_InitStructure.NVIC_IRQChannel =TIM2_IRQn ; //TIM2中断选通 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //子优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断控制 NVIC_Init(&NVIC_InitStructure); }
void Timer_Config(void) //定时器的配置 { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); //Timer2 时钟使能 TIM_DeInit(TIM2); //复位TIM2定时器 TIM_TimeBaseStructure.TIM_Period=1000; //定时器周期 TIM_TimeBaseStructure.TIM_Prescaler=36000-1; //预分频数
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //TIM2时钟分频,为1表示不分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//定时器计数为向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ClearFlag(TIM2, TIM_FLAG_Update); //清除定时器2的溢出标志位 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //使能定时器2溢出中断 TIM_Cmd(TIM2, ENABLE); //定时器2使能 }
int main(void) {
SystemInit();//初始化时钟,配置为72MHz,我试过将这句注释掉,好像不影响结果。查 了一下,在配置 //main函数之前的启动代码有这样一句 LDR R0, =SystemInit,我疑惑的是难 道启动的时候就配成72Mhz? GPIO_Config(); NVIC_Config(); Timer_Config(); while(1) { ; } }
中断服务函数
void TIM2_IRQHandler(void) {
static int flag_bit=0;//定义一个标志位
if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET ) //判断中断溢出标志为是否为1 {
TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update); //清除溢出中断标志位 flag_bit = !flag_bit; if(flag_bit == 1) GPIO_SetBits(GPIOC, GPIO_Pin_13); //熄灭LED if(flag_bit == 0)
GPIO_ResetBits(GPIOC, GPIO_Pin_13); //点亮LED }
这个函数是写在stm32f10x_it.c 里面的,我对TIM2_IRQHandler()函数的理解应该是这样的:
首先由定时器定时,定时好了产生中断溢出标志位,发送中断 然后进入中断服务函数TIM2_IRQHandler(),进入函数之后要做的就是清除中断溢出 标志位。
最后再执行函数里的其他内容。 定时器定时时间计算是这两句:
TIM_TimeBaseStructure.TIM_Period=1000; //定时器周期 TIM_TimeBaseStructure.TIM_Prescaler=36000-1; //预分频数
Prescaler可以理解为定时器的基数是72M / Prescaler+1 = 2000k,也就是500us ,Period 可以理解为要计数多少次,这里是1000次。 所以就是每500us记一次,计数1000次,就是500ms。 公式为:
Period / (72M / (Prescaler+1) )=____ 秒 1000 / (72 M/ (35999+1) ) = 0.5 秒
我有的一些疑问:1、进入中断函数之后,定时器要干些什么,是不是就停止计数了? 2、计数记到1000发生中断,计数值是不是有自动清零 问题先放到这儿,边学习,边解决。
3仿真结果观察
前面第三章已经过如何仿真波形的步骤,可以参看前面。点击setup 按钮 会弹出一个窗口,在窗口的右上边,有个new的按钮,点击后输入 PORTC.13 -
仿真运行结果如下:
可以从仿真结果中观察到,方波的周期为一秒。占空比为0.5 ,跟预期一致。
…… 此处隐藏:1904字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [政务民生]2013年公共基础知识热点问题(七)
- [政务民生]检验检测机构资质认定评审准则及释义20
- [政务民生]关于印发重庆市房屋建筑和市政基础设施
- [政务民生]1、隧道洞身开挖支护施工技术交底书
- [政务民生]2015年山东省17地市中考语文试题分类汇
- [政务民生]2-高级会计师资格考试和评审流程图
- [政务民生]2018版中国清分机行业发展分析及前景策
- [政务民生]新课改高中政治探究
- [政务民生]2018-2024年中国新型组合房屋行业投资
- [政务民生]2015年上海市春季高考数学模拟试卷五
- [政务民生]灌砂法及环刀法测压实度(带计算过程)
- [政务民生]运筹学实验2求解非线性规划
- [政务民生]劝学、逍遥游默写(教师卷)
- [政务民生]《运筹学》 - 期末考试 - 试卷A - 答案
- [政务民生]八年级英语下册 Module 6 Hobbies测试
- [政务民生]2019年宪法知识竞赛试题库100题(含答
- [政务民生]自动化英文文献翻译
- [政务民生]公文格式实施细则
- [政务民生]高一地理上册课堂跟踪练习题6
- [政务民生]会计继续教育习题及答案
- 第三章 无约束最优化方法
- 泛读教程第三册答案
- 魏晋南北朝文学
- 幂的运算复习题
- 城市环境问题的成因与治理策略_以社会
- 钢结构行业产业链及竞争分析研究
- 新型热塑性弹性体增韧聚丙烯的研究
- 中国旅游地理B卷试题及答案
- (苏教版)五年级数学上册第三单元测试卷
- 不稳定性心绞痛诊断与治疗
- 俞氏国际后勤职能部门绩效考核办法
- GB7258-2017新标准考试题含答案
- 小学生汉字听写比赛活动方案
- 1.3《平抛运动》学案 教科版必修2
- 2011香港特别行政区公务员考试复习资料
- 考虑水力条件变化的城市给水管网可靠性
- 表面活性剂在油田开发和生产中的应用
- ITT内部培训资料-FI端吸泵的介绍
- 文明守纪,从我做起学生发言稿
- 初中读《聊斋志异》心得体会800字范文




