使用STM32的两个硬件SPI完成数据的读写,具体的见程序注释
1 /**************************(C) COPYRIGHT SunHao 2011***************************
2 名称:ADDA.c
3 功能:ADDA的相关配置以及读取函数
4 作者:孙浩
5 时间:2011.4.25
6 版本:1.0
7 注意:对照TLC2543时序图,确保对应时序一致,读写速度不宜太快
8 *******************************************************************************/
9 #include "STM32Lib//stm32f10x.h"
10 #include "hal.h"
12 #define A_OFF GPIO_ResetBits(GPIOF, GPIO_Pin_8)
13 #define A_ON GPIO_SetBits(GPIOF, GPIO_Pin_8)
14 #define B_OFF GPIO_ResetBits(GPIOF, GPIO_Pin_7)
15 #define B_ON GPIO_SetBits(GPIOF, GPIO_Pin_7)
16 #define C_OFF GPIO_ResetBits(GPIOF, GPIO_Pin_6)
17 #define C_ON GPIO_SetBits(GPIOF, GPIO_Pin_6)
18 /*******************************************************************************
19 名称:void ADDA_Config(void)
20 功能:配置ADDA对应的SPI和IO
21 参数:无
22 时间:2011.4.20
23 版本:1.0
24 注意:配置类似函数一定要注意外设时钟使能,所有用到引脚时钟使能
25 *******************************************************************************/
26 void ADDA_Config(void)
27 {
28 SPI_InitTypeDef SPI_InitStructure;
29 GPIO_InitTypeDef GPIO_InitStructure;
30 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
31 RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
32 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF,ENABLE);
33 /*TLC2543相关IO口定义 */
34 /* PA5-SCK PA7-MOSI */
35 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_5 |GPIO_Pin_7 ;
36 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
37 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
38 GPIO_Init(GPIOA, &GPIO_InitStructure);
39 /*PA4-CS*/
40 GPIO_SetBits(GPIOA, GPIO_Pin_4);
41 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
42 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
43 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
44 GPIO_Init(GPIOA, &GPIO_InitStructure);
45
46 /*PA6-MISO*/
47 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
48 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
49 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
50 GPIO_Init(GPIOA, &GPIO_InitStructure);
51
52 /*TLV5614相关IO口定义 */
53 /* PB13-SCK PB15-MOSI */
54 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13 |GPIO_Pin_15 ;
55 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
56 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
57 GPIO_Init(GPIOB, &GPIO_InitStructure);
58 /*PB12-CS PB11-FS*/
59 GPIO_SetBits(GPIOB, GPIO_Pin_11);//帧同步信号和片选信号初始化为高电平
60 GPIO_ResetBits(GPIOB, GPIO_Pin_12);
61 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12;
62 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
63 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
64 GPIO_Init(GPIOB, &GPIO_InitStructure);
65
66 /* SPI1 configuration 具体的SPI时序严格参照TLC2543数据手册*/
67 SPI_Cmd(SPI1, DISABLE); //必须先禁能,才能改变MODE
68 SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //两线全双工
69 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //主
70 SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; //16位
71 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //时钟脚空闲时保持低电平
72 SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //在第一个时钟沿采样数据信号
73 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //软件NSS,片选信号由软件产生
74 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //256分频
75 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //高位在前
76
77 SPI_Init(SPI1, &SPI_InitStructure);
78 SPI_Cmd(SPI1, ENABLE);
79 /* SPI2 configuration 具体的SPI时序严格参照TLV5614数据手册*/
80 SPI_Cmd(SPI2, DISABLE); //必须先禁能,才能改变MODE
81 SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
82 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //主
83 SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; //16位
84 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //时钟脚空闲时保持低电平
85 SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //在第一个时钟沿采样数据信号
86 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //软件NSS,片选信号由软件产生
87 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //256分频
88 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //高位在前
89
90 SPI_Init(SPI2, &SPI_InitStructure);
91 SPI_Cmd(SPI2, ENABLE);
92 //模拟开关通道选择IO口定义
93 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;
94 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //开漏输出
95 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
96 GPIO_Init(GPIOF, &GPIO_InitStructure);
97 A_OFF;
98 B_OFF;
99 C_OFF;
100 GPIO_SetBits(GPIOB, GPIO_Pin_11);//帧同步信号初始化为高电平
101 GPIO_ResetBits(GPIOB, GPIO_Pin_12);
102 }
103 /*******************************************************************************
104 名称:u16 Read_AD(u16 chan)
105 功能:读取对应通道的AD值
106 参数:chan对应的通道,取值0-15,返回值0-4095
107 时间:2011.4.20
108 版本:1.0
109 注意:后八个通道是通过模拟开关切换,受模拟开关切换速度影响,能够读取的速度要比
110 前八个通道慢
111 *******************************************************************************/
112 u16 Read_AD(u16 chan)
113 {
114 u16 i,ADCdata,chanaddr;
115 if(chan<=7)
116 {
117 chanaddr= chan <<12;
118 chanaddr|=0x0C00;
119 }
120 else
121 {
122 chanaddr=8;//通过模拟开关进行输入,模拟开关接入第八通道
123 chanaddr<<=12;
124 chanaddr|=0x0C00;
125 switch (chan)
126 {
127 case 8:
128 A_OFF;
129 B_OFF;
130 C_OFF;
131 break;
132 case 9:
133 A_ON;
134 B_OFF;
135 C_OFF;
136 break;
137 case 10:
138 A_OFF;
139 B_ON;
140 C_OFF;
141 break;
上一篇:CPLD被STM32读写VHDL程序
下一篇:STM32 在16位数据宽度下的地址问题
推荐阅读最新更新时间:2024-11-17 11:26
推荐帖子
- 请帮忙给个锂离子电池充电的芯片型号
- 最近在做个要用到锂离子电池的东西,要做个充电芯片,在网上找了很多,max1679,max468什么的,但实际上根本在市场上买不到!(我南京的)有没有做过这个的大侠给指个明路啊!谢谢啦请帮忙给个锂离子电池充电的芯片型号TI的BQ系列的MAX芯片确实不好买到哦,非常谢谢,我回去查查已经查到了南京有BQ2057谢谢
- ljyfunkey 嵌入式系统
- 请教一下关于声电转换的问题
- 如题,最近想做个关于声电转换的小项目,但是不知道哪有相关电路或者是现成功能的声电转换芯片,知道的请帮帮忙!不请教一下关于声电转换的问题没接触过,我觉得可以借助一下麦克的电路这样的很多啊。咪头就是这样的声电转换器。咪头也称驻极体电容传声器。网上搜搜有好多现成的电路,参考一下。顺便接分咯找一个声电传感器不就可以了。多谢了,帮大忙了
- cong0018 嵌入式系统
- 晶体滤波器
- 晶体滤波器应该如何设计、调试,使得带宽、频率符合要求呀(在我的认知里,多个晶体谐振器通过电路组成一个晶体滤波器)。假如想要一批中心频率4MHz的滤波器3db带宽10khz的滤波器。请问应该如何实现从设计到量产的过程?晶体滤波器1、先进行电路仿真。仿真可以用MATLAB或者multism软件,直至仿真结果可行2、仿真结果可行后,实物焊接,对比焊接结果与仿真结果3、如果实物结果可以,就可以转为PCB量产,设计PCB时注意高频板子的电磁干扰问题中心频率4MHz的滤波器3db带
- 我是小六啊 RF/无线
- 怎么翻译成代码??????????
- @1000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF
- Rickystandup 微控制器 MCU
- 请问如何将hive-based机制在CF卡上运行?
- Catalog加進RamandRomFilesystemFATFilesystemHive-BasedRegistryPlatform.reg加入;HIVEBOOTSECTIONSYSTEMHIVE=DocumentsandSettings\\\\system.hvPROFILEDIR=DocumentsandSettings
- lbx_00 嵌入式系统
- 【2024 DigiKey 创意大赛】家庭环境检测器-完成贴
- 家庭环境检测器作者:白菜虫虫一、作品简介作品照片:作品功能介绍:本作品旨在实现家庭智能环境检测,实现的主要功能有如下几点:1.使用大尺寸LCD屏开发板结合LVGL制作精美界面,实时显示家庭环境质量。2.使用BME680等传感器获取家庭环境数据,并通过网络传输到LCD屏幕开发板上实时显示。3.通过网络获取天气预报信息并在LCD屏幕开发板上实时显示。4.根据事先设定的条件,控制其他家庭智能设备,调节室内温度,湿度等等环境条件。物料清单:
- 白菜虫虫 DigiKey得捷技术专区
设计资源 培训 开发板 精华推荐
- LT1933HDCB 3.3V 降压转换器的典型应用电路
- LT6654BHS6-5 电压基准的典型应用,具有升压输出电流和电流限制
- 使用 ROHM Semiconductor 的 BU4828 的参考设计
- 使用 ON Semiconductor 的 STK404-120S 的参考设计
- LT1086CT-12 用于遥感的低压差正稳压器的典型应用
- 独轮自平衡机器人 稚晖君出品
- 使用 Analog Devices 的 LTC4076 的参考设计
- EVAL-AD7795EBZ,用于 AD7795、16 位、470 SPS、6 通道模数转换器的评估板
- LT3990IMSE 5V 降压转换器的典型应用
- PCB特斯拉线圈初级次级线圈