Акронис
Пн 19 июня 2017 г., 7:49
Arduino 1.8.2 + Generic STM32F103V Series
Привет. Почему возникает ошибка при назначении PIN PB2 ? Остальная часть булавки все в порядке.
#define test_button pb2
void setup () {
// Поместите здесь код настройки, чтобы запустить один раз:
}
void loop () {
// Поместите свой главный код здесь, чтобы запустить многократно:
DigitalRead (test_button);
}
Ошибка
C: \ users \ admin \ documents \ arduino \ sketch_jun19b \ sketch_jun19b.Ино: В функции 'void loop ()':
sketch_jun19b: 1: ошибка: 'pb2' не был объявлен в этой области
#define test_button pb2
C: \ users \ admin \ documents \ arduino \ sketch_jun19b \ sketch_jun19b.INO: 10: 13: Примечание: в расширении макроса 'test_button'
DigitalRead (test_button);
Статус выхода 1
«PB2» не был объявлен в этой области
#define test_button pb3
void setup () {
// Поместите здесь код настройки, чтобы запустить один раз:
}
void loop () {
// Поместите свой главный код здесь, чтобы запустить многократно:
DigitalRead (test_button);
}
Нет ошибки
Какая ошибка pb2 ?
Привет. Почему возникает ошибка при назначении PIN PB2 ? Остальная часть булавки все в порядке.
#define test_button pb2
void setup () {
// Поместите здесь код настройки, чтобы запустить один раз:
}
void loop () {
// Поместите свой главный код здесь, чтобы запустить многократно:
DigitalRead (test_button);
}
Ошибка
C: \ users \ admin \ documents \ arduino \ sketch_jun19b \ sketch_jun19b.Ино: В функции 'void loop ()':
sketch_jun19b: 1: ошибка: 'pb2' не был объявлен в этой области
#define test_button pb2
C: \ users \ admin \ documents \ arduino \ sketch_jun19b \ sketch_jun19b.INO: 10: 13: Примечание: в расширении макроса 'test_button'
DigitalRead (test_button);
Статус выхода 1
«PB2» не был объявлен в этой области
#define test_button pb3
void setup () {
// Поместите здесь код настройки, чтобы запустить один раз:
}
void loop () {
// Поместите свой главный код здесь, чтобы запустить многократно:
DigitalRead (test_button);
}
Нет ошибки
Какая ошибка pb2 ?
Стивестронг
Пн 19 июня 2017 г. 8:32 утра
Возможно, это связано с тем фактом, что PB2 - PIN -код Boot1, поэтому он обычно не используется.
Вы можете вставить линию:
Вы можете вставить линию:
/*
main.c
Project: Nokia5110GLCD_PSoC4.cydwr (using bit-bang SPI)
Build date: 20140909 All code by Ray is public domain - OTHER? see Credits-Licenses.txt
UPDATED: 20140909 To include parsing of the month, day, and year
*/
#include
#include // for function atoi()
#define NewLine() UART_UartPutChar(CR); UART_UartPutChar(LF); // Used to insert a CR/LF
// Prototypes
void initSystem (void);
// Global variables
uint8_t len = GLCD_LCD_WIDTH / 6; // 84 pixels / 6 == 14 ch/line
uint8_t hour, minute, seconds; //, year, month, day;
uint8_t day, month, year;
char buffer[GLCD_LCD_WIDTH / 6 + 1];
char nmea[120];
// double atof(const char *str); // elimited Limor's float implementation
_Bool DayLightSavings; // Pin 3.4
uint8_t GMToffset = 4;
uint8_t Flag = 1;
int main()
{
ForcedReset:; // come here if onboard reset button pushed
DayLightSavings = DSTime_Read(); // Normally true (HIGH)
if(! DayLightSavings) GMToffset += 1;
uint32 c = '\0';
// int8_t x = 0 ; // character position in line 0 ---> 13
// int8_t y = 0 ; // active line pointer 0 ---> 5
int8_t k = 0 ;
initSystem();
Flag = 1; // firstTime since power-on or reset
for(;;)
{
if (Flag == 1) {
GLCD_WRITE("Waiting on GPS") ;
// Flag = 0;
}
c = UART_UartGetChar(); // Get received character or null
if (c)
{
if(c == '$') { // $ start of NMEA sentences
for(k=0; k<5; k++) // need 5 characters for sentence type
{
LED_Write( ~LED_Read() ); // flicker LED for activity
do {
c = UART_UartGetChar();
}
while (! (c));
nmea[k] = c; // G + P + R + M + C
// sprintf(buffer + k, "%c", c) ; // only for debug
}
// DEBUGGING to GLCD
// glcd_tiny_draw_string(0, 3, buffer);
// glcd_write() ; // display
LED_Write( LOW ); // LED off
if (strstr(nmea, "GPRMC"))
{
do {
do {
c = UART_UartGetChar();
LED_Write( ~LED_Read() ); // flicker LED
} while (!(c));
nmea[k] = c;
++k;
} while ( !( c == '*' ) && k < 120) ; // marker
LED_Write( LOW ); // LED off
// Inspiration: Limor Fried's Arduino GPS lib
char *p = nmea;
p = strchr(p, ',') + 1; // position after 1st comma
// float timef = atof(p);
// uint32_t time = timef;
uint32_t time = atoi(p);
hour = time / 10000;
minute = (time % 10000) / 100;
seconds = (time % 100);
// output to GLCD
sprintf(buffer, " %s",""); // clearbuffer
// this corrects time to the West but not the date!!!
if( hour > GMToffset) {
hour = hour - GMToffset;
} else {
hour = (hour + 24) - GMToffset; }
// correct midnight to follow standard format
if (hour == 24) hour = 0;
if (hour < 10) {
if (DayLightSavings) {
sprintf(buffer, "EDT: %d", hour);
} else {
sprintf(buffer, "EST: %d", hour);
}
} else {
if (DayLightSavings) {
sprintf(buffer, "EDT: %d%d", hour);
} else {
sprintf(buffer, "EST: %d%d", hour); }
}
if (minute < 10) {
sprintf(buffer + 7, ":0%d", minute);
} else {
sprintf(buffer + 7, ":%d%d", minute); }
if (seconds < 10) {
sprintf(buffer + 10,":0%d%s", seconds);
} else {
sprintf(buffer + 10, ":%d%d%s", seconds); }
sprintf(buffer + 13, "%s", "\0");
if(Flag == 1)
{
Flag = 0;
glcd_clear() ;
CyDelay(250) ;
}
// OUTPUT the TIME on GLCD
glcd_tiny_draw_string(0, 4, buffer);
glcd_write() ;
// Parse to integer date field
p = strchr(p, ',') +1; // A/V?
p = strchr(p, ',') +1; // lat
p = strchr(p, ',') +1; // N/S?
p = strchr(p, ',') +1; // lon
p = strchr(p, ',') +1; // E/W?
p = strchr(p, ',') +1; // speed
p = strchr(p, ',') +1; // angle
p = strchr(p, ',') +1; // move pass for date DDMMYY
// nmea date field looks like: 090914 (European)
uint32_t fulldate = atoi(p);
day = (fulldate / 10000);
month = (fulldate % 10000) / 100;
year = (fulldate % 100);
sprintf(buffer, " %s",""); // clearbuffer
if (day < 10) {
sprintf(buffer, "0%d", day);
} else {
sprintf(buffer, "%d%d", day); }
if (month < 10) {
sprintf(buffer + 2,"-0%d", month);
} else {
sprintf(buffer + 2,"-%d%d", month); }
sprintf(buffer + 5, "-20%d%d%s", year);
sprintf(buffer + 10,"%s",'\0');
// OUTPUT the DATE on GLCD
glcd_tiny_draw_string(0, 2, buffer);
glcd_write() ;
} // if (strstr(nmea, "GPRMC"))
} // if(c == '$')
} // if(c)
if( ResetSW_Read() == LOW ) // Forced program restart
{
goto ForcedReset;
}
} // for(,,)
} // main()
void initSystem()
{
CyGlobalIntEnable;
LED_Write( HIGH );
UART_Start();
glcd_init();
glcd_set_contrast(75); //0== light 100==full black
GLCD_TEXT_INIT();
init_printf(NULL, putdata); // see main.h
// Announce activity to over serial console in case listening
UART_UartPutString("Hardware Configured\n"); NewLine(); NewLine();
GLCD_WRITE("Terminal V1.00");
GLCD_WRITE("Ray Burnette");
CyDelay(2000);
glcd_clear();
}
/* [] END OF FILE */
Nokia5110GPS_PSoC4.cyprj.Archive03.zip
CODE
file_3727.txtC/C++
main.c
/*
Project: Nokia5110GLCD_PSoC4.cydwr (using bit-bang SPI)
Build date: 20140909 All code by Ray is public domain - OTHER? see Credits-Licenses.txt
UPDATED: 20140909 To include parsing of the month, day, and year
*/
#include
#include // for function atoi()
#define NewLine() UART_UartPutChar(CR); UART_UartPutChar(LF); // Used to insert a CR/LF
// Prototypes
void initSystem (void);
// Global variables
uint8_t len = GLCD_LCD_WIDTH / 6; // 84 pixels / 6 == 14 ch/line
uint8_t hour, minute, seconds; //, year, month, day;
uint8_t day, month, year;
char buffer[GLCD_LCD_WIDTH / 6 + 1];
char nmea[120];
// double atof(const char *str); // elimited Limor's float implementation
_Bool DayLightSavings; // Pin 3.4
uint8_t GMToffset = 4;
uint8_t Flag = 1;
int main()
{
ForcedReset:; // come here if onboard reset button pushed
DayLightSavings = DSTime_Read(); // Normally true (HIGH)
if(! DayLightSavings) GMToffset += 1;
uint32 c = '\0';
// int8_t x = 0 ; // character position in line 0 ---> 13
// int8_t y = 0 ; // active line pointer 0 ---> 5
int8_t k = 0 ;
initSystem();
Flag = 1; // firstTime since power-on or reset
for(;;)
{
if (Flag == 1) {
GLCD_WRITE("Waiting on GPS") ;
// Flag = 0;
}
c = UART_UartGetChar(); // Get received character or null
if (c)
{
if(c == '$') { // $ start of NMEA sentences
for(k=0; k<5; k++) // need 5 characters for sentence type
{
LED_Write( ~LED_Read() ); // flicker LED for activity
do {
c = UART_UartGetChar();
}
while (! (c));
nmea[k] = c; // G + P + R + M + C
// sprintf(buffer + k, "%c", c) ; // only for debug
}
// DEBUGGING to GLCD
// glcd_tiny_draw_string(0, 3, buffer);
// glcd_write() ; // display
LED_Write( LOW ); // LED off
if (strstr(nmea, "GPRMC"))
{
do {
do {
c = UART_UartGetChar();
LED_Write( ~LED_Read() ); // flicker LED
} while (!(c));
nmea[k] = c;
++k;
} while ( !( c == '*' ) && k < 120) ; // marker
LED_Write( LOW ); // LED off
// Inspiration: Limor Fried's Arduino GPS lib
char *p = nmea;
p = strchr(p, ',') + 1; // position after 1st comma
// float timef = atof(p);
// uint32_t time = timef;
uint32_t time = atoi(p);
hour = time / 10000;
minute = (time % 10000) / 100;
seconds = (time % 100);
// output to GLCD
sprintf(buffer, " %s",""); // clearbuffer
// this corrects time to the West but not the date!!!
if( hour > GMToffset) {
hour = hour - GMToffset;
} else {
hour = (hour + 24) - GMToffset; }
// correct midnight to follow standard format
if (hour == 24) hour = 0;
if (hour < 10) {
if (DayLightSavings) {
sprintf(buffer, "EDT: %d", hour);
} else {
sprintf(buffer, "EST: %d", hour);
}
} else {
if (DayLightSavings) {
sprintf(buffer, "EDT: %d%d", hour);
} else {
sprintf(buffer, "EST: %d%d", hour); }
}
if (minute < 10) {
sprintf(buffer + 7, ":0%d", minute);
} else {
sprintf(buffer + 7, ":%d%d", minute); }
if (seconds < 10) {
sprintf(buffer + 10,":0%d%s", seconds);
} else {
sprintf(buffer + 10, ":%d%d%s", seconds); }
sprintf(buffer + 13, "%s", "\0");
if(Flag == 1)
{
Flag = 0;
glcd_clear() ;
CyDelay(250) ;
}
// OUTPUT the TIME on GLCD
glcd_tiny_draw_string(0, 4, buffer);
glcd_write() ;
// Parse to integer date field
p = strchr(p, ',') +1; // A/V?
p = strchr(p, ',') +1; // lat
p = strchr(p, ',') +1; // N/S?
p = strchr(p, ',') +1; // lon
p = strchr(p, ',') +1; // E/W?
p = strchr(p, ',') +1; // speed
p = strchr(p, ',') +1; // angle
p = strchr(p, ',') +1; // move pass for date DDMMYY
// nmea date field looks like: 090914 (European)
uint32_t fulldate = atoi(p);
day = (fulldate / 10000);
month = (fulldate % 10000) / 100;
year = (fulldate % 100);
sprintf(buffer, " %s",""); // clearbuffer
if (day < 10) {
sprintf(buffer, "0%d", day);
} else {
sprintf(buffer, "%d%d", day); }
if (month < 10) {
sprintf(buffer + 2,"-0%d", month);
} else {
sprintf(buffer + 2,"-%d%d", month); }
sprintf(buffer + 5, "-20%d%d%s", year);
sprintf(buffer + 10,"%s",'\0');
// OUTPUT the DATE on GLCD
glcd_tiny_draw_string(0, 2, buffer);
glcd_write() ;
} // if (strstr(nmea, "GPRMC"))
} // if(c == '$')
} // if(c)
if( ResetSW_Read() == LOW ) // Forced program restart
{
goto ForcedReset;
}
} // for(,,)
} // main()
void initSystem()
{
CyGlobalIntEnable;
LED_Write( HIGH );
UART_Start();
glcd_init();
glcd_set_contrast(75); //0== light 100==full black
GLCD_TEXT_INIT();
init_printf(NULL, putdata); // see main.h
// Announce activity to over serial console in case listening
UART_UartPutString("Hardware Configured\n"); NewLine(); NewLine();
GLCD_WRITE("Terminal V1.00");
GLCD_WRITE("Ray Burnette");
CyDelay(2000);
glcd_clear();
}
/* [] END OF FILE */
Акронис
Пн 19 июня 2017 г. 8:54 утра
{&gpiob, &таймер3, &ADC1, 0, 3, 8}, / * pb0 * /
{&gpiob, &таймер3, &ADC1, 1, 4, 9}, / * PB1 * /
/ * Примечание PB2 не включено в качестве загрузки 1 */
{&gpiob, null, null, 2, 0, adcx}, / * pb2 * /
{&gpiob, null, null, 3, 0, adcx}, / * pb3 * /// jtdo, spi3_sck /i2s3_ck /
{&gpiob, null, null, 4, 0, adcx}, / * pb4 * /// njtrst, spi3_miso
Делал.
Но ошибка осталась.
В чем может быть проблема ?
{&gpiob, &таймер3, &ADC1, 1, 4, 9}, / * PB1 * /
/ * Примечание PB2 не включено в качестве загрузки 1 */
{&gpiob, null, null, 2, 0, adcx}, / * pb2 * /
{&gpiob, null, null, 3, 0, adcx}, / * pb3 * /// jtdo, spi3_sck /i2s3_ck /
{&gpiob, null, null, 4, 0, adcx}, / * pb4 * /// njtrst, spi3_miso
Делал.
Но ошибка осталась.
В чем может быть проблема ?
Стивестронг
Пн 19 июня 2017 г. 9:03
Вы также должны вставить PB2 после PB1 в:
https: // github.com/rogerclarkmelbourne/ ... ард.H#L117
https: // github.com/rogerclarkmelbourne/ ... ард.H#L117
Акронис
Пн 19 июня 2017 г. 9:07
Делал.
Ошибка
c: \ users \ admin \ documents \ arduino \ ardware \ arduino_stm32 \ stm32f1 \ variants \ generic_stm32f103v \ poard.CPP: 169: 1: ошибка: слишком много инициализаторов для 'const stm32_pin_info [79]'
};
^
Ошибка
c: \ users \ admin \ documents \ arduino \ ardware \ arduino_stm32 \ stm32f1 \ variants \ generic_stm32f103v \ poard.CPP: 169: 1: ошибка: слишком много инициализаторов для 'const stm32_pin_info [79]'
};
^
Стивестронг
Пн 19 июня 2017 г. 9:08
Измените значение на 80 в:
https: // github.com/rogerclarkmelbourne/ ... орд.H#194
https: // github.com/rogerclarkmelbourne/ ... орд.H#194
Акронис
Пн 19 июня 2017 г., 9:09
Исправлено в [80].
Это сработало.
Большое спасибо за помощь !
Это сработало.
Большое спасибо за помощь !
Стивестронг
Пн 19 июня 2017 г. 9:10 утра
Добро пожаловать.
Пожалуйста, установите заголовок [Решено], если он работает.
Пожалуйста, установите заголовок [Решено], если он работает.
Rogerclark
Пн 19 июня 2017 г. 10:38 утра
[Стивестронг - Пн 19 июня 2017 г. 9:10] - Добро пожаловать.
Пожалуйста, установите заголовок [Решено], если он работает.
Похоже, это ошибка
Число в заголовке неверно ?
Стивестронг
Пн 19 июня 2017 г., 11:45
[Rogerclark - Пн 19 июня 2017 г. 10:38] - Число в заголовке неверно ?Не совсем, просто это должно быть обновлено, если вы вставите новый PIN -код (PB2 в этом случае).
Хотя я не вижу никакой пользы для определения этого числа перед картой штифтов.
Rogerclark
Пн 19 июня 2017 г., 21:39
Хорошо.
Таким образом, потенциальная проблема заключается в том, что PIN PB1 не в PINMAP
Я думаю, что Maple Mini также использует это для своей кнопки. Но в аппаратном обеспечении MM есть ошибка, так как на кнопке должна быть слабый протяжение, чтобы предотвратить встроенный серийный загрузчик Boot -Boot1 (потому что он плавает)
Я подумал об использовании ссылки Boot1 на загрузке в качестве кнопки, но большинство людей думают, что это плохая или ненужная идея.
(Лично я думаю, что это полезное дополнение к загрузчику, потому что на OSX и Linux я думаю, что трудно загрузить, просто нажав кнопку сброса перед загрузкой, потому что Linux DFU-UTIL, похоже, не ждет устройства DFU, Как версия Windows.
Таким образом, потенциальная проблема заключается в том, что PIN PB1 не в PINMAP
Я думаю, что Maple Mini также использует это для своей кнопки. Но в аппаратном обеспечении MM есть ошибка, так как на кнопке должна быть слабый протяжение, чтобы предотвратить встроенный серийный загрузчик Boot -Boot1 (потому что он плавает)
Я подумал об использовании ссылки Boot1 на загрузке в качестве кнопки, но большинство людей думают, что это плохая или ненужная идея.
(Лично я думаю, что это полезное дополнение к загрузчику, потому что на OSX и Linux я думаю, что трудно загрузить, просто нажав кнопку сброса перед загрузкой, потому что Linux DFU-UTIL, похоже, не ждет устройства DFU, Как версия Windows.