发新帖本帖赏金 10.00元(功能说明)我要提问
12下一页
返回列表
[AVR单片机]

使用excel制作的AVR寄存器配置助手---轻松搞定AVR

[复制链接]
3539|33
手机看帖
扫描二维码
随时随地手机跟帖
秉烛良宵|  楼主 | 2016-3-9 16:09 | 显示全部楼层 |阅读模式
        这事情得从去年说起,去年学了AVR单片机后来又学了CC2530。当想用AVR做个项目时要使用定时器,突然感觉到头脑一片空白,完全忘记如何配置定时器,看来只能查看手册了。不知道是不是网上有像51助手一样的软件可以方便寄存器的配置,百度了下确实有。下载后才发现没有定时器的初始化配置,最后还是把定时器功能和寄存器花时间看了一遍。这让我很郁闷,萌发了自己写一个配置软件。我只学过VB,就打算用VB编写一个。但是装个VB又跟CAD冲突,真是烦人。之后想到了STM32库函数的做法,就用ADC的初始化试下好不好用。做法如下:
#ifndef _AVR_ADC_H
#define _AVR_ADC_H

#include "my_define.h"

#define ADC_PRECL(x)  st(ADCSR &= 0xf8;ADCSR |= (x);)
#define ADC_EN()      st(ADCSR |= BV(ADEN);)
#define ADC_CLOSE()   st(ADCSR &= ~BV(ADEN);)
#define ADC_START()   st(ADCSR |= BV(ADSC);)
#define ADC_END()     (ADCSR & BV(ADSC))

enum
{
  REF_EXT = 0,
  REF_VCC = 1,
  REF_INT = 3,
  
  AD_LEFT = 1,
  AD_RIGHT = 0,
  
  CONT_MOD = 1,
  ONCE_MOD = 0,
  
  CK_PS2   = 1,
  CK_PS4,
  CK_PS8,
  CK_PS16,
  CK_PS32,
  CK_PS64,
  CK_PS128,
};

typedef struct
{
  uint8 channel   : 4;
  uint8 def       : 1;
  uint8 dataAlign : 1;
  uint8 refSource : 2;
  
  uint8 prescaler : 3;
  uint8 adcIE     : 1;
  uint8 def1      : 1;
  uint8 convertMod: 1;
  uint8 start     : 1;
  uint8 adcEnabled: 1;
}ADC_InitTypeDef;


void ADC_Init(ADC_InitTypeDef *parameter);

#endif
/***********************************************************
-功能描述:开机初始化
-参数说明:无
-返回说明:无
***********************************************************/
void Init_Start(void)
{
  ADC_InitTypeDef ADC_InitStruct;
  
  /*ADC配置*/
  ADC_InitStruct.refSource = REF_INT;   //内部基准源
  ADC_InitStruct.dataAlign = AD_LEFT;   //ADC数据为左对齐
  ADC_InitStruct.channel   = 7;         
  ADC_InitStruct.prescaler = CK_PS32;   //32预分频
  ADC_InitStruct.adcEnabled=1;          //使能ADC
  ADC_Init(&ADC_InitStruct);
  
使用过程中还是感觉到不明了。需要打开头文件查看,而且配置的东西多。得再找办法,突然想到excel可以用VBA,可以还是犹豫,现在很多人用的是wps,都没有安装VBA开发插件,如果分享给他人用就麻烦了。试着能不能只用公式就可以实现。折腾了一个晚上写了一个USART的寄存器配置
USART配置.JPG

使用效果和网站下载的单片机助手差不多,心血来潮就想把所有的外设模块配置都写出来。在这个过程中并不容易,特别是定时器的设置,T1的设置项比较麻烦,但我以根据自己的理解已经把T1和T2的设置选项做了分类。每个模块写出来后还要反复试验测试看下每个设置项会不会有错误。对于一些配置非常简单且不需要修改的模块就没必要做了,例如看门狗,EEPROM等。TWI也不打算做了,因为初始化不能主要是使用麻烦,很多状态要处理。整个excel的设计花了将近二十天的时间,有很大部分时间是用来看手册的和测试的。
        有了外设的初始化配置又开始在想能不能写一个比较通用的模块操作文件,可以重复使用就节省了很多时间。又忙碌了一个星期(特别是TWI花了我很大的精力,所以我并不喜欢AVR的TWI)。
文件1.JPG
文件2.JPG

这些模块的操作代码有些是在学习的时候写的,只需做了整理,但是肯定是存在不足之处的,所以只作为入门学习的参考使用。下面还是具体介绍下是怎么使用的:

          假设使用的是我写的模块操作文件,这写文件都是没有初始化函数的。首先就需要用AVR配置工具生成初始化函数(建议新建一个C文件专门用于存放初始化函数)。打开“Atmega8a寄存器配置文件”,这个文件是参考m8a写的所以就叫这个名字了。在文件的下方有八个工作表,第一个是帮助,里面是关于使用的说明。后面是外设的寄存器配置表格。单击相应进行配置设置。


捕获.JPG

定时器.jpg

设置区中灰色打底的是可以选择设置的,橙色打底的是一些重要的说明。小黑点打底的设置项是要求必须按顺序依次设置。设置完后就可以选中代码生成区中的代码进行复制,执行复制后选择区会出现蚂蚁线。再粘贴到自己的C文件中即可。
定时器设置.JPG

注明:模块的操作文件是在IAR的开发环境写的,不是使用IAR的朋友需要自己更改下才能使用。Excel的寄存器配置文件可能有些开发平台对于个别寄存器的命名会有所差异,可以通知我修改。


Atmega8a寄存器配置.zip (64.4 KB)

打赏榜单

dgjl88 打赏了 2.00 元 2017-06-05
理由:感谢楼主无私共享

21ic小喇叭 打赏了 8.00 元 2016-03-18

相关帖子

xiang1029| | 2016-3-9 18:15 | 显示全部楼层
太神奇了

使用特权

评论回复
zby422| | 2016-3-9 19:10 | 显示全部楼层
谢谢分享

使用特权

评论回复
秉烛良宵|  楼主 | 2016-3-10 08:23 | 显示全部楼层
昨晚录制了一段配置外部中断、USART、ADC、T1输出PWM的视频。有点累,写程序的速度很慢,大家可以快进着看。

这个论坛很奇怪,不让发视频链接。只能大家自己到优酷中搜“轻松配置AVR寄存器”

使用特权

评论回复
秉烛良宵|  楼主 | 2016-3-11 10:26 | 显示全部楼层
这几天在考虑写一个STM32的库函数配置助手,也打算尝试用excel实现,如果实在不行再换VB。有没有感兴趣的,可以一起来讨论。AVR的配置文件好像没有什么人下载,估计是玩AVR的人不多,发现很多初学者都是喜欢玩STC的偏多

使用特权

评论回复
whtwhtw| | 2016-3-15 16:41 | 显示全部楼层
stm32的有了

使用特权

评论回复
autooy| | 2016-3-15 19:43 | 显示全部楼层
iccavr有向导模式可用的

使用特权

评论回复
lkl0305| | 2016-3-15 22:43 | 显示全部楼层
楼主这是VBA么?

使用特权

评论回复
秉烛良宵|  楼主 | 2016-3-15 23:02 | 显示全部楼层
lkl0305 发表于 2016-3-15 22:43
楼主这是VBA么?

纯公式。用VBA担心有很多人用WPS或是什么绿色版的office等等

使用特权

评论回复
秉烛良宵|  楼主 | 2016-3-15 23:05 | 显示全部楼层
今天发现自己发上来的文件有个问题,如果有使用的需要注意下。定时器2的初始化代码忘记开中断了,公式判断错了。实在是抱歉。改完再发上来。经过了半个月的使用和测试其他应该是没有问题的了。

使用特权

评论回复
xishuidemian| | 2016-3-16 08:34 | 显示全部楼层
点赞,支持lz的原创精神。

使用特权

评论回复
l250839464| | 2016-3-16 09:08 | 显示全部楼层
支持楼主

使用特权

评论回复
松哥无敌| | 2016-3-16 09:36 | 显示全部楼层
这个用excel怎么做的....很感兴趣,求楼主简明说一下,十分感谢

使用特权

评论回复
lkl0305| | 2016-3-16 09:53 | 显示全部楼层
秉烛良宵 发表于 2016-3-15 23:02
纯公式。用VBA担心有很多人用WPS或是什么绿色版的office等等

强!支持一个

使用特权

评论回复
mcumail| | 2016-3-16 10:24 | 显示全部楼层
感谢楼主的无私分享,太强了,赞起来!!!

使用特权

评论回复
秉烛良宵|  楼主 | 2016-3-16 10:38 | 显示全部楼层
松哥无敌 发表于 2016-3-16 09:36
这个用excel怎么做的....很感兴趣,求楼主简明说一下,十分感谢

你选中相应的单元格就可以看到公式

使用特权

评论回复
松哥无敌| | 2016-3-16 13:47 | 显示全部楼层
秉烛良宵 发表于 2016-3-16 10:38
你选中相应的单元格就可以看到公式

恩,谢谢:)

使用特权

评论回复
秉烛良宵|  楼主 | 2016-3-16 23:31 | 显示全部楼层
捕获.JPG
原来发上来的AVR助手在T2设置中断时忘记把中断设置的寄存器加上了。现在已经经过非常多的使用都没发现问题了,基本上每种设置我都认真检查了一遍。

Atmega8a寄存器配置.zip (52.67 KB)

使用特权

评论回复
delong_z| | 2016-3-17 16:00 | 显示全部楼层
CodeVisionAVR
STM32CubeMX

使用特权

评论回复
mega1702| | 2016-3-28 08:19 | 显示全部楼层
谢谢楼主分享!!!

使用特权

评论回复
发新帖 本帖赏金 10.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

163

帖子

7

粉丝