stm32之初学
来源:互联网 发布:淘宝阿里妈妈推广 编辑:程序博客网 时间:2024/06/03 16:39
本人学习机电的,在控制方面基础薄弱,刚接触ARM就背安排学习STM32,刚点亮一个灯,过程是曲径通幽啊
刚接手时一看言发直心跳加速,完全不懂,呵呵呵,火牛,安富莱,镇南挨个仔细看了下,最后还是回归到CortexM3权威指南,仔细看了一遍才敢下手,给新手推荐个入门教材:一牛人的DX32—顶级学习手册;芯达stm32教程。
建议初学者先把权威指南和固件库简介看一下。
一、 STM32的输入输出管脚有下面8种(4输入+2输出+2复用输出)可能的配置:
① 浮空输入_IN_FLOATING
② 带上拉输入_IPU
③ 带下拉输入_IPD
④ 模拟输入_AIN
⑤ 开漏输出_OUT_OD
⑥ 推挽输出_OUT_PP
⑦ 复用功能的推挽输出_AF_PP
⑧ 复用功能的开漏输出_AF_OD
在STM32中选用IO模式
(1) 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1
(2)带上拉输入_IPU——IO内部上拉电阻输入
(3)带下拉输入_IPD—— IO内部下拉电阻输入
(4) 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电
(5)开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能
(6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的
(7)复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA)
(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)
具体情况:http://www.360doc.com/content/11/0902/16/7620531_145279674.shtml
双向IO的使用方法:
这个功能的实现是,当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。
STM32设置实例:
(1)模拟I2C使用开漏输出_OUT_OD,接上拉电阻,能够正确输出0和1;读值时先GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以读IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);
(2)如果是无上拉电阻,IO默认是高电平;需要读取IO的值,可以使用带上拉输入_IPU和浮空输入_IN_FLOATING和开漏输出_OUT_OD;
二、USART波特率算法
官方库的USART的USART_BRR的设置会损失踪精度。
/******************************************************************/
integerdivider = ((25 * apbclock) / (4 * (USART_InitStruct->USART_BaudRate)));
tmpreg = (integerdivider / 100) << 4;
fractionaldivider = integerdivider - (100 * (tmpreg >> 4));
tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F);
USARTx->BRR = (uint16_t)tmpreg;
/******************************************************************/
官方库的思绪是
(1)将算出的USARTDIV扩年夜100倍保留整数部门。
(2)百位以上的送入BRR[15:4],百位以下的换算成16进制值送入[3:0]
tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F);这里的50是为了提高精度!!
也即对于USARTDIV小数部门,只有小数点后两位保留,两位往后的全数舍去,好比理论计较获得USARTDIV = 234.28125 被措置为 USARTDIV = 234.28,这样就损失踪了精度,造成了最终送入BRR的现收屑堍不是理论值的四舍五入(5以上的有可能也被舍去)
具体情况:http://www.mvpdz.com/thread-6012-1-1.html
呵呵,来源于网络,贡献与网络
- stm32之初学
- stm32初学之Systick
- stm32初学之GPIO寄存器
- STM32初学之Sys_Tick配置
- STM32初学之GPIO八种模式
- stm32初学之LED按键中断
- 初学stm32
- 初学STM32工程建立
- 初学 stm32 的USB 开发
- 初学STM32(2013笔记)
- 【STM32】STM32之串口
- 【STM32】STM32之NVIC
- 【STM32】STM32之SWD
- 【STM32】STM32之LED
- 【STM32】STM32之flash
- 初学stm32-环境搭建——stm32和IAR配置
- 初学stm32-环境搭建——stm32和IAR配置
- 20130218-初学STM32遇到的一些问题
- C语言和设计模式(之单件模式)
- 记录
- Spring,hibernate,struts的面试笔试题(含答案)
- hadoop用户使用svn时无法保存密钥的解决办法
- MySQL my.cnf参数配置优化详解
- stm32之初学
- Python 数据库接口模块
- php大小写转换函数
- xcode 4.2 设置 横屏,竖屏
- android应用集成支付宝接口的简化
- 小公司如何部署实施Linux集群网站
- Oracle查询表结构
- (转)Oracle的left join中on和where的区别
- A brief guide for android native development