pvvx
Активный участник сообщества
А как иначе? После подключения получится USB-COM.2) Для задействования USB надо подпаяться к контактам USB на контроллере?
Это RX/TX PC7/PC63) UART это классический USB-COM?
А как иначе? После подключения получится USB-COM.2) Для задействования USB надо подпаяться к контактам USB на контроллере?
Это RX/TX PC7/PC63) UART это классический USB-COM?
///////////////////////////////////// ATT HANDLER define ///////////////////////////////////////
//...
typedef enum
{
ATT_H_START = 0,
//...
//// switch ////
/**********************************************************************************************/
MySwitch_PS_H, //UUID: 2802, VALUE: uuid mySer_ID
MySwitch_val_CD_H, //UUID: 2803, VALUE: Prop: Read | Write
MySwitch_val_DP_H, //UUID: myID, VALUE: sw
ATT_END_H
}ATT_HANDLE;
//...
//...
const u8 mySer_UUID[] = {0x66, 0x9a, 0x0c, 0x20, 0x00, 0x08, 0x0d, 0x9d, 0xeb, 0x11, 0x60, 0xa7, 0x70, 0x12, 0x3f, 0x71};
const u8 myChar_UUID[] = {0x66, 0x9a, 0x0c, 0x20, 0x00, 0x08, 0x0d, 0x9d, 0xeb, 0x11, 0x60, 0xa7, 0x71, 0x12, 0x3f, 0x71};
const u8 my_UUID[] = {0x66, 0x9a, 0x0c, 0x20, 0x00, 0x08, 0x0d, 0x9d, 0xeb, 0x11, 0x60, 0xa7, 0x72, 0x12, 0x3f, 0x71};
//...
u8 sw[] = {0};
//...
// MY_SWITCH attribute values
static const u8 my_switchCharVal[] = {
CHAR_PROP_READ | CHAR_PROP_WRITE,
U16_LO(MySwitch_val_DP_H), U16_HI(MySwitch_val_DP_H),
0x66, 0x9a, 0x0c, 0x20, 0x00, 0x08, 0x0d, 0x9d, 0xeb, 0x11, 0x60, 0xa7, 0x72, 0x12, 0x3f, 0x71 // my_UUID
};
//...
const attribute_t my_Attributes[] = {
//...
{3,ATT_PERMISSIONS_READ,
2,128,
(u8*)(&my_primaryServiceUUID),
(u8*)(&mySer_UUID),
0},
{0,ATT_PERMISSIONS_READ,
2,sizeof(my_switchCharVal),
(u8*)(&my_characterUUID),
(u8*)(&my_switchCharVal),
0},
{0,ATT_PERMISSIONS_READ,
128,sizeof(sw),
(u8*)(&my_UUID),
(u8*)(sw),
0}
};
//...
От куда такие громадные числа?{3,ATT_PERMISSIONS_READ,
2,128,
128,sizeof(sw),
Приложил полный пример (лишнее удалите), работающий с моим SDK для Eclipse.Покурил исходники UBIA
1) Дописал в ble_init вызовы
void main_loop ()
{
////////////////////////////////////// BLE entry /////////////////////////////////
blt_sdk_main_loop();
////////////////////////////////////// UI entry /////////////////////////////////
// add spp UI task
user_loop();
app_power_management ();
}
void app_power_management ()
{
// pullup GPIO_WAKEUP_MODULE: exit from suspend
// pulldown GPIO_WAKEUP_MODULE: enter suspend
if (!tick_wakeup)
{
bls_pm_setSuspendMask(SUSPEND_ADV | SUSPEND_CONN);
bls_pm_setWakeupSource(PM_WAKEUP_CORE); // GPIO_WAKEUP_MODULE needs to be wakened
}
if (tick_wakeup && clock_time_exceed (tick_wakeup, 500))
{
GPIO_WAKEUP_MODULE_LOW;
tick_wakeup = 0;
}
}
void app_suspend_exit ()
{
GPIO_WAKEUP_MODULE_HIGH; //module enter working state
bls_pm_setSuspendMask(SUSPEND_DISABLE);
tick_wakeup = clock_time () | 1;
}
#define GPIO_WAKEUP_MODULE_HIGH gpio_setup_up_down_resistor(GPIO_PE6, PM_PIN_PULLUP_10K);
#define GPIO_WAKEUP_MODULE_LOW gpio_setup_up_down_resistor(GPIO_PE6, PM_PIN_PULLDOWN_100K);
Чтобы отличить 0 от счета.1. tick_wakeup = clock_time () | 1; - это то же, что tick_wakeup = clock_time () ? зачем " | 1 " ?
Чтобы внешний контролер по уровню на пине знал, к примеру, что можно слать в UART - модуль активен.2. Зачем эти переключения GPIO?
Чтобы UART успел вывести свои сообщения до аппаратного отключения при входе в сон. Или чтобы успеть доделать какие-то делишки до перехода в сон.3. И вообще - как это работает? Т.е. сначала tick_wakeup равно нулю. Срабатывает первый if в app_power_management(). На одной из следующих итераций (?) модуль засыпает. В какой-то момент просыпается, ставит маску, что не надо спать, взводит таймер (app_suspend_exit()). Далее, проходит несколько итераций, через 500 мкс срабатывает второй if в app_power_management(), сбрасываем таймер и на следующей итерации сработает снова первый if. Что такое эти 500 мкс? Что 500 мкс точно не спим?
Ещё раз: Когда SoC спит GPIO контролер отключен и никакие OUT push-pull и прочие не работают. Работают только "подтяжки".2. Зачем эти переключения GPIO?
спасибо за замечание!.. и извиняюсь за глупый вопрос действительно проблема была в том, что указал размер массива байтов как количество бит... рука пробила лицо.Правильно ли в начале указан общий размер (?)
Еще тут оказалось, что если задать выход из сна по GPIO и установить это GPIO в состояние, пробуждающее контроллер и при этом на каждой итерации уходить в сон/тут же пробуждаться по этому GPIO, то контроллер будет занят только этим и нарушатся тайминги BLE. И установленное соединение разорвется. Так что надо перед установкой режима сна проверять, в каком состоянии пробуждающие GPIO, и если они не в том, которое для сна - маску сна не ставить.Ещё раз: Когда SoC спит GPIO контролер отключен и никакие OUT push-pull и прочие не работают. Работают только "подтяжки".
Нюанс в том, где стоит проверка, назначение, включение/отключение флагов сна на пробуждающий gpio. Короче вся последовательность, включая процедуры срабатывающие по событиям в SDK. Если последовательность правильная, то пофигу проверка состояния gpio - просто не заснет...В общем, в целом понятно, как PM работает, "в мелочах" есть хитрые нюансы.
Дополню, при этом модуль виден среди устройств BT под именем JDY-10M-2.3Половина изх них не шьется через uart.
Интересно. не отказался бы.Исходники кину по требованию и/или когда будет время подчистить их...
Скоро лето, а это значит смену деятельности и хобби на весь сезон...Интересно. не отказался бы.
Во-во, как это знакомо когда напилят-напилят и пошли, сам так делаю ибо могу и ничего никому не должен ))Скоро лето, а это значит смену деятельности и хобби на весь сезон...
Рискну предположить что следует попытаться ее прошить программатором на stm32. Как доберусь до паяльника проверю это предположениеА с новой ревизией JDY-10 как нам быть сенсей совсем не подскажет?
Там вроде OTA и USB программирование было прошито. Какой ещё UART?Рискну предположить что следует попытаться ее прошить программатором на stm32. Как доберусь до паяльника проверю это предположение
Уточню. "Там" - это в 5 штуках из 10 свежекупленных мной на aliexpress чипов JDY-10? Тех что видны среди устройств BT под именем JDY-10M-2.3 ?Там вроде OTA и USB программирование было прошито.
Тот что через USB-COM на чипе cp2102 к ногам tx,rx и reset.Какой ещё UART?