/* Start ADC1 Software Conversion */ ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(1) {
AD_value = ADC_GetConversionValue(ADC1);
delay(); }
(三) 仿真调试
(1) 使用Keil uVision3 通过ULINK 2仿真器连接实验板,使用MINI-STM32 开发板附带的串口线,连接实验板上的 UART1 和 PC 机的串口,打开实验例程目录下的ADC.Uv2例程,编译链接工程;
(2) 在 PC 机上运行 windows 自带的超级终端串口通信程序(波特率115200、1位停止位、无校验位、无硬件流控制);或者使用其它串口通信程序; (3) 点击MDK 的Debug菜单,点击Start/Stop Debug Session;
(4) 旋转电位器 R19,可以看到串口输出数值不断变化,正常显示结果如下所示。
usart1 print AD_value -------------------------- The current AD value = 0x0425 The current AD value = 0x0423 The current AD value = 0x0421 The current AD value = 0x0422 The current AD value = 0x0420 The current AD value = 0x0416 The current AD value = 0x03B6 The current AD value = 0x0841 The current AD value = 0x08C3 The current AD value = 0x08C0 The current AD value = 0x08BE The current AD value = 0x09E9 The current AD value = 0x0A12
31
The current AD value = 0x0ACA The current AD value = 0x0B0D The current AD value = 0x0B10 The current AD value = 0x0B0E .... ....
(5) 若无开发板,读者也可以使用软件仿真模式来完成程序运行。
MINI-STM32 开发板入门教程 (七) - 工业现场总线 CAN
(七) - 工业现场总线 CAN
32
(一) 工业现场总线 CAN 的基本介绍以及 STM32 的 CAN 模块简介
首先通读手册中关于CAN的文档,必须精读。 STM32F10xxx 参考手册Rev7V3.pdf
http://www.mystm32.com/bbs/redirect.php?tid=255goto=lastpost#lastpost
需要精读的部分为 RCC 和 CAN 两个章节。
为什么需要精读 RCC 呢?因为我们将学习 CAN 的波特率的设置,将要使用到 RCC 部分的设置,因此推荐大家先复习下这部分中的几个时钟。
关于 STM32 的 can 总线简单介绍
bxCAN 是基本扩展 CAN (Basic Extended CAN) 的缩写,它支持 CAN 协议 2.0A 和 2.0B 。它的设计目标是,以最小的 CPU 负荷来高效处理大量收到的报文。它也支持报文发送的优先级要求(优先级特性可软件配置)。
对于安全紧要的应用,bxCAN 提供所有支持时间触发通信模式所需的硬件功能。 主要特点
2 支持 CAN 协议 2.0A 和 2.0B 主动模式 2 波特率最高可达 1 兆位 / 秒 2 支持时间触发通信功能 发送
2 3 个发送邮箱
2 发送报文的优先级特性可软件配置 2 记录发送 SOF 时刻的时间戳 接收
2 3 级深度的2个接收 FIFO
2 14 个位宽可变的过滤器组 - 由整个 CAN 共享 2 标识符列表
2 FIFO 溢出处理方式可配置 2 记录接收 SOF 时刻的时间戳
可支持时间触发通信模式 2 禁止自动重传模式
33
2 16 位自由运行定时器 2 定时器分辨率可配置
2 可在最后 2 个数据字节发送时间戳 管理
2 中断可屏蔽
2 邮箱占用单独 1 块地址空间,便于提高软件效率
(二) STM32 CAN 模块工作模式
STM32 的 can 的工作模式分为: /* CAN operating mode */
#define CAN_Mode_Normal ((u8)0x00) /* normal mode */ #define CAN_Mode_LoopBack ((u8)0x01) /* loopback mode */ #define CAN_Mode_Silent ((u8)0x02) /* silent mode */ #define CAN_Mode_Silent_LoopBack ((u8)0x03) /* loopback combined with silent mode */
在此章我们的 Mini-STM32 教程中我们将使用到 CAN_Mode_LoopBack 和 CAN_Mode_Normal 两种模式。
我们第一步做的就是使用运行在 CAN_Mode_LoopBack 下进行自测试。
在参考手册中 CAN_Mode_LoopBack (环回模式) 的定义如下:
环回模式可用于自测试。为了避免外部的影响,在环回模式下 CAN 内核忽略确认错误 (在数据 / 远程帧的确认位时刻,不检测是否有显性位) 。在环回模式下,bxCAN 在内部把 Tx 输出回馈到 Rx 输入上,而完全忽略 CANRX 引脚的实际状态。发送的报文可以在 CANTX 引脚上检测到。
因此这种模式也特别适合大家做好硬件后自测程序。
34
(三) CAN 接口端口映射
STM32 中的 CAN 物理引脚脚位可以设置成三种:默认模式,重定义地址1模式,重定义地址2模式。
在我们的 Mini-STM32 上面没有接出 CAN 的接口芯片, 所以我们可以利用 RealView MDK 的 CAN 软件模拟模块来做实验.
------------------------------------------------------------------------- 默认模式
/* Configure CAN pin: RX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, GPIO_InitStructure);
35