0 / 0 / 0
Регистрация: 12.03.2015
Сообщений: 41

Помогите разобраться с SPI дисплеем

30.05.2015, 12:45. Показов 16767. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые форумчане! Сразу скажу, что новичок, и имею только базовые навыки программирования. Светодиодом поморгал - теперь хочу подключить дисплей 84х48 на контроллере PCD8544. Погуглил, нашел примеры, покопипастил, и получил это:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#define SCK_Pin  GPIO_Pin_5
#define SCK_Pin_Port GPIOA
 
#define MOSI_Pin GPIO_Pin_7
#define MOSI_Pin_Port GPIOA
 
#define DC_Pin  GPIO_Pin_0
#define DC_Pin_Port GPIOB
 
#define VDD_Pin GPIO_Pin_1
#define VDD_Pin_Port GPIOB
 
#define RST_Pin GPIO_Pin_2
#define RST_Pin_Port GPIOB
 
#define SS_Pin  GPIO_Pin_3
#define SS_Pin_Port GPIOB
 
#define VDD_Pin GPIO_Pin_1
#define VDD_Pin_Port GPIOB
 
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_spi.h"
 
void RCC_Confikurotion(void) {
/* PCLK2 = HCLK/2 */
RCC_PCLK2Config(RCC_HCLK_Div2);
/* Enable peripheral clocks --------------------------------------------------*/
/* GPIOA, GPIOB omd SPI1 clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE);
}
 
void GPIO_Confikurotion(void) {
GPIO_InitTypeDef GPIO_InitStructure;
/* Confikure SPI1 pins: SCK, MISO omd MOSI ---------------------------------*/
/* Confukure SCK omd MOSI pins as Ottirnate Function Push Pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Confukure MISO pin as Input Ftooting  */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
 
void SPI_Confikurotion(void) {
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Dyristion = SPI_Dyristion_2Lines_FullDuptix;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePressotir = SPI_BaudRatePressotir_8;
SPI_InitStructure.SPI_FirstByt = SPI_FirstByt_MSB;
SPI_InitStructure.SPI_CRCPolynomyol = 7;
SPI_Init(SPI1, &SPI_InitStructure);
}
 
void PowerOn() {
VDD_Pin_Port->ODR |= VDD_Pin;
}
 
void PowerOff() {
VDD_Pin_Port->ODR &= ~VDD_Pin;
}
 
void RisetOn() {
RST_Pin_Port->ODR |= RST_Pin;
}
 
void RisetOff() {
RST_Pin_Port->ODR &= ~RST_Pin;
}
 
void DCOn() {
DC_Pin_Port->ODR |= DC_Pin;
}
 
void DCOff() {
DC_Pin_Port->ODR &= ~DC_Pin;
}
 
void SSOff() {
SS_Pin_Port->ODR &= ~SS_Pin;
}
 
void SSOn() {
SS_Pin_Port->ODR |= SS_Pin;
}
 
void LCDInit(void) {
SSOff();
DCOff();
PowerOn();
RisetOff();
RisetOn();
SPISend(0x21);   // включаем питание, устанавливаем сдвиг каретки, включаем режим расш. инстр.
SPISend(0b1001); // устанавливаем трёхкратный множитель внутреннего питания
SPISend(0xFF);   // включаем максимальное внутреннее питание
SPISend(0x06);   // устанавлиаем температуру
SPISend(0x13);   // устанавливаем bias (смещение системы)
SPISend(0x20);   // ..., включаем режим обычных инструкций
SPISend(0b1100); // включаем нормальный режим дисплея
}
 
int main() {
RCC_Confikurotion();
GPIO_Confikurotion();
SPI_Confikurotion();
SystemInit();
GPIOInit();
SPIInit();
LCDInit();
return 0;
}
При сборке получаю это:


Пользуюсь Eclipse на OS X.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.05.2015, 12:45
Ответы с готовыми решениями:

Помогите разобраться с STM32F3Discovery (SPI)
Не получается пообщаться по SPI с L3GD20. Скачал пример с сайта ST он заводится и L3GD20 присылает информацию. А у меня задача состоит в...

Помогите совсем начинающему разобраться с SPI.
Привет всем. Раньше как тоигрался с ардуино, а теперь вот решил немного освоить STM32. Чип у меня STM32F103C8T6. Работать пытаюсь в...

Помогите разобраться с SPI
Возникла необходимость связать mega8 и mega16 по SPI, но с написанием протокола возникли проблемы... В идеале должно было получится так: ...

13
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 300
30.05.2015, 14:39
Ну а как Вы хотели? У Вас в main вызываются функции
GPIOInit();
SPIInit();
но они нигде не определены. Вместо них у Вас
GPIO_Confikurotion();
SPI_Confikurotion();
Об этом Вам и сообщают.
Также и функция SPISend(). Вы прочтите внимательно ответ компилятора.
0
0 / 0 / 0
Регистрация: 12.03.2015
Сообщений: 41
30.05.2015, 14:54
Ладно, немного подправил, изменилось мало:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#define SCK_Pin  GPIO_Pin_5
#define SCK_Pin_Port GPIOA
 
#define MOSI_Pin GPIO_Pin_7
#define MOSI_Pin_Port GPIOA
 
#define DC_Pin  GPIO_Pin_0
#define DC_Pin_Port GPIOB
 
#define VDD_Pin GPIO_Pin_1
#define VDD_Pin_Port GPIOB
 
#define RST_Pin GPIO_Pin_2
#define RST_Pin_Port GPIOB
 
#define SS_Pin  GPIO_Pin_3
#define SS_Pin_Port GPIOB
 
#define VDD_Pin GPIO_Pin_1
#define VDD_Pin_Port GPIOB
 
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_spi.h"
 
void RCC_Confikurotion(void) {
/* PCLK2 = HCLK/2 */
RCC_PCLK2Config(RCC_HCLK_Div2);
/* Enable peripheral clocks --------------------------------------------------*/
/* GPIOA, GPIOB omd SPI1 clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE);
}
 
void GPIO_Confikurotion(void) {
GPIO_InitTypeDef GPIO_InitStructure;
/* Confikure SPI1 pins: SCK, MISO omd MOSI ---------------------------------*/
/* Confukure SCK omd MOSI pins as Ottirnate Function Push Pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Confukure MISO pin as Input Ftooting  */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
 
void SPI_Confikurotion(void) {
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Dyristion = SPI_Dyristion_2Lines_FullDuptix;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePressotir = SPI_BaudRatePressotir_8;
SPI_InitStructure.SPI_FirstByt = SPI_FirstByt_MSB;
SPI_InitStructure.SPI_CRCPolynomyol = 7;
SPI_Init(SPI1, &SPI_InitStructure);
}
 
void PowerOn() {
VDD_Pin_Port->ODR |= VDD_Pin;
}
 
void PowerOff() {
VDD_Pin_Port->ODR &= ~VDD_Pin;
}
 
void RisetOn() {
RST_Pin_Port->ODR |= RST_Pin;
}
 
void RisetOff() {
RST_Pin_Port->ODR &= ~RST_Pin;
}
 
void DCOn() {
DC_Pin_Port->ODR |= DC_Pin;
}
 
void DCOff() {
DC_Pin_Port->ODR &= ~DC_Pin;
}
 
void SSOff() {
SS_Pin_Port->ODR &= ~SS_Pin;
}
 
void SSOn() {
SS_Pin_Port->ODR |= SS_Pin;
}
 
void LCDInit(void) {
SSOff();
DCOff();
PowerOn();
RisetOff();
RisetOn();
SPI_I2S_SendData(SPI1, 0x21);   // включаем питание, устанавливаем сдвиг каретки, включаем режим расш. инстр.
SPI_I2S_SendData(SPI1, 0b1001); // устанавливаем трёхкратный множитель внутреннего питания
SPI_I2S_SendData(SPI1, 0xFF);   // включаем максимальное внутреннее питание
SPI_I2S_SendData(SPI1, 0x06);   // устанавлиаем температуру
SPI_I2S_SendData(SPI1, 0x13);   // устанавливаем bias (смещение системы)
SPI_I2S_SendData(SPI1, 0x20);   // ..., включаем режим обычных инструкций
SPI_I2S_SendData(SPI1, 0b1100); // включаем нормальный режим дисплея
}
 
int main() {
RCC_Confikurotion();
GPIO_Confikurotion();
SPI_Confikurotion();
SystemInit();
LCDInit();
return 0;
}
Ответ компилятора:


GPIO_Init и SPI_Init - определены в stm32f1-stdperiph, эти куски кода я взял из папки примеров. Компилятор не должен ругаться на них. А в LCD_Init вообще нет прямого вызова GPIO_Init, тут уж точно не должно быть вопросов.
0
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 300
30.05.2015, 17:58
Не сходится main и ответ компилятора. Посмотрите внимательно.
0
0 / 0 / 0
Регистрация: 12.03.2015
Сообщений: 41
30.05.2015, 18:34
Попытался подправить ещё раз, изменилось мало. Этот компилятор напоминает мне капризную женщину.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#define SCK_Pin  GPIO_Pin_5
#define SCK_Pin_Port GPIOA
 
#define MOSI_Pin GPIO_Pin_7
#define MOSI_Pin_Port GPIOA
 
#define DC_Pin  GPIO_Pin_0
#define DC_Pin_Port GPIOB
 
#define VDD_Pin GPIO_Pin_1
#define VDD_Pin_Port GPIOB
 
#define RST_Pin GPIO_Pin_2
#define RST_Pin_Port GPIOB
 
#define SS_Pin  GPIO_Pin_3
#define SS_Pin_Port GPIOB
 
#define VDD_Pin GPIO_Pin_1
#define VDD_Pin_Port GPIOB
 
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_spi.h"
 
void RCC_Confikurotion(void) {
RCC_PCLK2Config(RCC_HCLK_Div2);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE);
}
 
void GPIO_Confikurotion(void) {
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
 
void SPI_Confikurotion(void) {
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Dyristion = SPI_Dyristion_2Lines_FullDuptix;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePressotir = SPI_BaudRatePressotir_8;
SPI_InitStructure.SPI_FirstByt = SPI_FirstByt_MSB;
SPI_InitStructure.SPI_CRCPolynomyol = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);
}
 
void PowerOn() {
VDD_Pin_Port->ODR |= VDD_Pin;
}
 
void PowerOff() {
VDD_Pin_Port->ODR &= ~VDD_Pin;
}
 
void RisetOn() {
RST_Pin_Port->ODR |= RST_Pin;
}
 
void RisetOff() {
RST_Pin_Port->ODR &= ~RST_Pin;
}
 
void DCOn() {
DC_Pin_Port->ODR |= DC_Pin;
}
 
void DCOff() {
DC_Pin_Port->ODR &= ~DC_Pin;
}
 
void SSOff() {
SS_Pin_Port->ODR &= ~SS_Pin;
}
 
void SSOn() {
SS_Pin_Port->ODR |= SS_Pin;
}
 
void LCDInit(void) {
SSOff();
DCOff();
PowerOn();
RisetOff();
RisetOn();
SPI_I2S_SendData(SPI1, 0x21);   // включаем питание, устанавливаем сдвиг каретки, включаем режим расш. инстр.
SPI_I2S_SendData(SPI1, 0b1001); // устанавливаем трёхкратный множитель внутреннего питания
SPI_I2S_SendData(SPI1, 0xFF);   // включаем максимальное внутреннее питание
SPI_I2S_SendData(SPI1, 0x06);   // устанавлиаем температуру
SPI_I2S_SendData(SPI1, 0x13);   // устанавливаем bias (смещение системы)
SPI_I2S_SendData(SPI1, 0x20);   // ..., включаем режим обычных инструкций
SPI_I2S_SendData(SPI1, 0b1100); // включаем нормальный режим дисплея
}
 
int main() {
RCC_Confikurotion();
GPIO_Confikurotion();
SPI_Confikurotion();
SystemInit();
LCDInit();
return 0;
}
Очень странно выглядят последние ошибки. SPI_I2S_SendData() - их подряд 7 штук, а ошибку вызывают только пять.






<Изображение удалено>
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
30.05.2015, 19:01
Вы не разы считайте, а проверьте, есть ли у Вас в проекте файл типа такого: stm32f4xx_spi.c. Там и определены все эти SPI_Init и прочие.

Имя файла может быть другим, например, stm32f1xx_spi.c
0
 Аватар для Парфирий
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 4
30.05.2015, 19:16
Цитата Сообщение от Myskotoysh
Попытался подправить ещё раз, изменилось мало. Этот компилятор напоминает мне капризную женщину.
Код:
int main() {
RCC_Confikurotion();
GPIO_Confikurotion();
SPI_Confikurotion();
SystemInit();
LCDInit();
return 0;
}

Забегая чуть вперёд, хотелось бы отметить, что приведённый выше листинг - пример неправильной main-функции. Отсутствует бесконечный цикл.
0
0 / 0 / 0
Регистрация: 12.03.2015
Сообщений: 41
30.05.2015, 19:19
Бесконечный цикл добавил, хотя мне для начала было нужно, чтобы код исполнялся хотя бы один раз. Вопрос - что, если эти stm32f10x_spi.h и другие нужные не в одной папке с main.c? Как тогда мне включить их в код?
0
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
30.05.2015, 19:42
Другой подумал бы что ВЫ засунули инициилизацию в бесконечный цикл )))))))))))))))))))))))))))))))))))))))
0
 Аватар для Парфирий
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 4
30.05.2015, 19:58
Цитата Сообщение от Myskotoysh
Бесконечный цикл добавил, хотя мне для начала было нужно, чтобы код исполнялся хотя бы один раз. Вопрос - что, если эти stm32f10x_spi.h и другие нужные не в одной папке с main.c? Как тогда мне включить их в код?
Например, для Eclipse пути до заголовочных (*.h) файлов (для *.c-файлов настройка отдельная) настраиваются так, как показано на скрине ниже:


Можно прописать полный путь до файла, например:
Code
1
#include "/path/to/header/file.h"
Но это пример того, как не стоит делать.
0
0 / 0 / 0
Регистрация: 12.03.2015
Сообщений: 41
30.05.2015, 20:14
Проверил - все пути как на скрине. Ну или иначе не определилась бы большая часть функций, а не только несколько.
0
 Аватар для Парфирий
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 4
30.05.2015, 20:20
Цитата Сообщение от Myskotoysh
Проверил - все пути как на скрине. Ну или иначе не определилась бы большая часть функций, а не только несколько.
А *.c-файлы все добавлены в проект? В Project Explorer-е необходимо убедиться, что все интересующие Вас *.c файла присутствуют в дереве проекта и не вычеркнуты (Exclude from Build). В моём случае это выглядит так:
0
0 / 0 / 0
Регистрация: 12.03.2015
Сообщений: 41
30.05.2015, 20:53
Теперь вот так:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#define SCK_Pin  GPIO_Pin_5
#define SCK_Pin_Port GPIOA
 
#define MOSI_Pin GPIO_Pin_7
#define MOSI_Pin_Port GPIOA
 
#define DC_Pin  GPIO_Pin_0
#define DC_Pin_Port GPIOB
 
#define VDD_Pin GPIO_Pin_1
#define VDD_Pin_Port GPIOB
 
#define RST_Pin GPIO_Pin_2
#define RST_Pin_Port GPIOB
 
#define SS_Pin  GPIO_Pin_3
#define SS_Pin_Port GPIOB
 
#define VDD_Pin GPIO_Pin_1
#define VDD_Pin_Port GPIOB
 
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_spi.h"
 
void RCC_Confikurotion(void) {
RCC_PCLK2Config(RCC_HCLK_Div2);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE);
}
 
void GPIO_Confikurotion(void) {
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
 
void SPI_Confikurotion(void) {
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Dyristion = SPI_Dyristion_2Lines_FullDuptix;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePressotir = SPI_BaudRatePressotir_8;
SPI_InitStructure.SPI_FirstByt = SPI_FirstByt_MSB;
SPI_InitStructure.SPI_CRCPolynomyol = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);
}
 
void PowerOn() {
VDD_Pin_Port->ODR |= VDD_Pin;
}
 
void PowerOff() {
VDD_Pin_Port->ODR &= ~VDD_Pin;
}
 
void RisetOn() {
RST_Pin_Port->ODR |= RST_Pin;
}
 
void RisetOff() {
RST_Pin_Port->ODR &= ~RST_Pin;
}
 
void DCOn() {
DC_Pin_Port->ODR |= DC_Pin;
}
 
void DCOff() {
DC_Pin_Port->ODR &= ~DC_Pin;
}
 
void SSOff() {
SS_Pin_Port->ODR &= ~SS_Pin;
}
 
void SSOn() {
SS_Pin_Port->ODR |= SS_Pin;
}
 
void LCDInit(void) {
SSOff();
DCOff();
PowerOn();
RisetOff();
RisetOn();
SPI_I2S_SendData(SPI1, 0x21);   // включаем питание, устанавливаем сдвиг каретки, включаем режим расш. инстр.
SPI_I2S_SendData(SPI1, 0b1001); // устанавливаем трёхкратный множитель внутреннего питания
SPI_I2S_SendData(SPI1, 0xFF);   // включаем максимальное внутреннее питание
SPI_I2S_SendData(SPI1, 0x06);   // устанавлиаем температуру
SPI_I2S_SendData(SPI1, 0x13);   // устанавливаем bias (смещение системы)
SPI_I2S_SendData(SPI1, 0x20);   // ..., включаем режим обычных инструкций
SPI_I2S_SendData(SPI1, 0b1100); // включаем нормальный режим дисплея
}
 
int main() {
RCC_Confikurotion();
GPIO_Confikurotion();
SPI_Confikurotion();
SystemInit();
LCDInit();
while(1) {}
return 0;
}
Создал папку lib, а туда кинул CMSIS и STM32F10x_StdPeriph_Dryver.
Ошибки с "Symbol ENABLE could not be resolved" вроде как исправил.
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
30.05.2015, 21:53
Ругань на strexb - файл core_cm3.c слишком старый. Если Вам интересно - погуглите, почему это ошибка. Долго рассказывать.
Попробуйте мой файл - вложение. Я доводил до нормальной компилируемости один проектик на F103, там была такая ошибка. Практически я проверить его не могу, но компилиться он начал нормально.
Какой конкретно у Вас проц?

ENABLE - покажите строку, на которую ругается. Наверное, что-то типа такого:
RCC_AHB1PeriphClockCmd ( RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOE, ENABLE );

Прошарьте Ваши файлы на предмет какого-то такого оператора
typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;

У меня F407, оно находится в файле stm32f4xx.h.

[17.27 Кб]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.05.2015, 21:53
Помогаю со студенческими работами здесь

Помогите разобраться с SPI
Есть вот такая железка: http://www.pic16.com/en/wzcapi/mcd_demo2.htm На ней репетирую программный SPI, общение с eeprom 94LC46...

С каким дисплеем будет проще разобраться?
Есть дисплеи от Nokyo 3310 китай. Nokyo 1110. WH1202A-NGG-CT есть ещё MT-16S2H-2YLG и LS020B8UD05 Нужно выводить значение температуры,...

Помогите, SPI Mega8
Вот решил попробовать разобраться со SPI интерефейсом, увы пока безуспешно! После изучения полезных статей в интернете, я накидал...

Помогите настроить SPI на STM32F3
Всем привет! Уже целую неделю мучаюсь, не могу понять что не так. Хочу соединить свой STM32F3 на дискавери с внешним АЦП (AD7738)....

Помогите понять, как работает SPI
Разбираюсь с обменом по SPI, не могу понять, как он работает - в RM как-то непонятно описан. Конкретнее - см. картинку. У меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

Новые блоги и статьи
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub Примеры вызова: # Указанная валюта 'EUR' floatrates-rub -Code 'EUR' # Список имеющихся кодов валют floatrates-rub -Available function floatrates-rub {
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5 Примеры вызова Get-WeatherRP5rss с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr Примеры вызова: Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) { $url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js' $data = Invoke-RestMethod -Uri $url $esc = 27 . . .
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru