Cypress-BLE 开发套件可以快速开发 物联网电子产品。

PSOC编程特点:

A 拖放各PSoC 组件到工作区中,以设计原理图
B 完成各组件之间的布线,并配置GPIO
C 使用所包含的组件API 开发和调试固件

一:使用入门:

PSOC Creator :一款 IDE工具,可以直接进行硬件和固件设计,如下图,创建新工程后。我们可以配置电路图,选择需要用的Lib,和设置PSOC。

1. 将组件图标拖放到主要设计工作区中,以进行您的硬件系统设计。
2. 对您的应用固件和PSoC 硬件进行协同设计。
3. 使用配置工具配置各组件
4. 研究包含100 多个组件的库
5. 查看组件数据手册

二:硬件框图

A.>PSOC4 就是PSOC芯片了具体配置查datasheet

B> PSOC5LP是用来配合调试和串口通讯用的 ,还带了很多集成的模数模块,

其他的东西都可以在help文件里面找到。

三:开始项目

扯淡没用,开始项目。

A 原理框图

PSOC的作用就是把很多原来外围电路 配置到IC内部。而Cypress的优势就是把BLE模块集成化,配置蓝牙参数就像填数字,傻瓜操作。

B:Topdesign 顶层设计(就是模块设置咯)

如下图,配置好Pin脚,Uart串口,Ble模块,设置DAC (其他的模块省略)

C  配置引脚

如下图,把需要用到的引脚配置好就行。

D 配置时钟,中断,模拟电路,Flash等,方法同上。

E 写main函数,其他库函数都自动生成了,但功能逻辑函数还是要自己写的,这里编程就和STM32编程一样。

不过PSOC的优势是:所有底层配置都已经ok,只需要加功能性指令。Test功能函数如下,其他函数都是已经配置好了的。

#include "tester.h"
#include "tools.h"
#include "debug.h"
#include "cmd_list.h"
#include "hw.h"
#include "ble_srv_update.h"
#include "ble_srv_list.h"
#include "tasks.h"
tester_t tester;void tester_init(void){memset((void*)&tester, 0, sizeof(tester_t));tester.leds_timeout = 1;
}u8 tester_started_get(void){return tester.started;
}void tester_started_set(u8 started){tester.started = started;// If test is finished - disconnect and delete the macif(!started){if(tester.ble_connected){memset(tester.mac, 0, 6);CyBle_GapDisconnect(cyBle_connHandle.bdHandle);}// Just in case - Reset the processor
        CySoftwareReset();tester.update_timeout     = 0;tester.board            = 0;}tester.key                     = 0;tester.state                 = 0;tester.error_timeout         = 0;PIN_11_ON;
}u8 tester_ble_connected_get(void){return tester.started;
}void tester_ble_connected_set(u8 val){tester.ble_connected = val;if(!val) {tester.ble_paired         = val;tester.update_timeout     = 0;// If the 0x0E board is disconnected - reset the testerif((tester.board == 0x0E) && (tester.state == TESTER_STATE_PASSED)){tester_started_set(0);}DBG_LOG(DEBUG_ACC, "\n\rTESTER: BLE Disconnected ");} else {DBG_LOG(DEBUG_ACC, "\n\rTESTER: BLE Connected ");    }tester.update_timeout = TESTER_UPDATE_TIMEOUT;
}void tester_board_set(u8 val){tester.board = val;// We will write and read the characteristic// on read event - busy will be cleared
    ble_srv_update(BLE_SU_TEST_MODE);tester.state     = 0;
}u8 tester_board_get(void){return tester.board;
}void tester_ble_paired_set(u8 val){if(val){// Clear busy flag if the cause is waiting for pairif((!tester.ble_paired) && \(tester.status & TESTER_FIELD_BUSY)) {tester.status &=~TESTER_FIELD_BUSY;}// Just in case, if disconnection happens, after reconnection// it will go to the test modeif(val && tester.board) {ble_srv_update(BLE_SU_TEST_MODE);}DBG_LOG(DEBUG_ACC, "\n\rTESTER: BLE Paired ");}tester.ble_paired = val;tester.error_timeout = 0;
}u8 *tester_mac_get(void){return tester.mac;
}void tester_mac_set(u8 *mac){if(mac == NULL) return;// If test is not started - do not connectif(!tester.started) return;memcpy(tester.mac, mac, 6);
}void tester_mac_parse(u8 *data){u8 sum, sum_rx, i;if(tester.ble_connected)     return;if(data == NULL)            return;if(data[0] != '<')            return;if(data[13]!= '>')            return;memset((void*)&tester.mac_tmp[0], 0, sizeof(tester.mac_tmp));for(i=0, sum=0; i<6; i++){tester.mac_tmp[5-i] = (ASCII_HEX_TO_DEC(data[1+i*2]) << 4);tester.mac_tmp[5-i]|= ASCII_HEX_TO_DEC(data[2+i*2]);sum += tester.mac_tmp[5-i];}sum_rx = (ASCII_HEX_TO_DEC(data[14]) << 4);sum_rx|= ASCII_HEX_TO_DEC(data[15]);if(sum != sum_rx) return;tester_mac_set(tester.mac_tmp);
}void tester_triac_write(u8 idx, u8 state){if(state > 1) return;if((idx > 3) || (!idx)) return;tester.idx_triac = idx;if(idx == 1)         tester.outputs.triac_1 = state;else if(idx == 2)     tester.outputs.triac_2 = state;else if(idx == 3)     tester.outputs.triac_3 = state;ble_srv_update(BLE_SU_TRIAC);
}void tester_relay_write(u8 idx, u8 state){if(state > 1) return;if((idx > 3) || (!idx)) return;tester.idx_relay = idx;if(idx == 1)         tester.outputs.relay_1 = state;else if(idx == 2)     tester.outputs.relay_2 = state;else if(idx == 3)     tester.outputs.relay_3 = state;ble_srv_update(BLE_SU_RELAY);
}u8 tester_triac_idx_get(void){return tester.idx_triac;
}u8 tester_relay_idx_get(void){return tester.idx_relay;
}u8 tester_triac_state_get(u8 idx){if(idx == 1)         return tester.outputs.triac_1;else if(idx == 2)     return tester.outputs.triac_2;else if(idx == 3)     return tester.outputs.triac_3;return 0;
}u8 tester_relay_state_get(u8 idx){if(idx == 1)         return tester.outputs.relay_1;else if(idx == 2)     return tester.outputs.relay_2;else if(idx == 3)     return tester.outputs.relay_3;return 0;
}void tester_error_set(u8 val){tester.error = val;
}void tester_key_set(u8 val){if(tester.key != val) tester.timeout = 1; // Speed up on changetester.key = val;
}void tester_ntc_set(u8 val){tester.ntc = val;
}void tester_auto_timeout_set(u8 val){tester.auto_timeout = val;tester.state |= 0x80;tester.error_timeout = 0;
}void tester_buzzer_timeout_update(void){if(tester.buzzer_timeout < 0xFFFF) tester.buzzer_timeout++;
}// Tester state machine
void tester_10ms_run(void){// Wrong states - back to initial stateif(!tester.started){// If connected but it not supposed to be connectedif(tester.ble_paired){memset(tester.mac, 0, 6);CyBle_GapDisconnect(cyBle_connHandle.bdHandle);DBG_LOG(DEBUG_ACC, "\n\rTESTER: BLE paired - disconnecting ");} else if(tester.ble_connected){memset(tester.mac, 0, 6);CyBle_GapDisconnect(cyBle_connHandle.bdHandle);DBG_LOG(DEBUG_ACC, "\n\rTESTER: BLE connected - disconnecting ");}// Standalone application// Wait till the button will be releasedif(SW2_STATE){tester.sw_debaunce = 0;while(SW2_STATE){CyDelay(10);if(tester.sw_debaunce < 0xFF) tester.sw_debaunce++;}// If the button was pressed more than 60 msif(tester.sw_debaunce > 6){// Start EP4114 testDBG_LOG(DEBUG_ACC, "\n\rTESTER: EP4114 Test starting... ");tester_started_set(1);tester_board_set(0x0E);}}// Test is started    } else {// Check if the error happenedif((tester.error_timeout > TESTER_FAIL_TIMEOUT) && (tester.state != TESTER_STATE_FAILED)){if(tester.ble_paired || (!tester.ble_paired && (tester.error_timeout > TESTER_PAIR_FAIL_TIMEOUT))) {tester.status |= TESTER_FIELD_ERROR;tester.status &=~TESTER_FIELD_BUSY;tester.state = TESTER_STATE_FAILED;DBG_LOG(DEBUG_ACC, "\n\rTESTER: FAILED ");tester.error_timeout = 0;}}// If not paired - tell PC that it is busyif(!tester.ble_paired) {tester.status |= TESTER_FIELD_BUSY;tester.error_timeout++;    } else {// Busy - all except errorsif(ble_srv_update_busy_get())     {if(ble_srv_update_ids_get() &~BLE_SU_ERROR)    tester.status |= TESTER_FIELD_BUSY;}else if(tester.board != 0x0E)                    tester.status &=~TESTER_FIELD_BUSY;if(tester.error || ((tester.board == 0x0E) && (tester.state == TESTER_STATE_FAILED)))tester.status |= TESTER_FIELD_ERROR;else                            tester.status &=~TESTER_FIELD_ERROR;if(tester.key)                    tester.status |= TESTER_FIELD_SWITCH;else                            tester.status &=~TESTER_FIELD_SWITCH;// Zero cross generator for EP4114if(tester.board == 0x0E){if(PIN_9_STATE) PIN_9_OFF;else            PIN_9_ON;}// EP4114 is automated testif((tester.board == 0x0E) && (!ble_srv_update_busy_get())){switch(tester.state){/* ***************************** *     Hi / Lo Level test********************************/// ********** PIN 2 test **********// Turn Oncase TESTER_STATE_PIN2_ON_TURN:tester.status |= TESTER_FIELD_BUSY;tester.outputs.relay_3     = 1;tester.idx_relay        = 3;ble_srv_update(BLE_SU_RELAY);tester_auto_timeout_set(TESTER_AUTO_TIMEOUT);break;// Oncase TESTER_STATE_PIN2_ON_TEST:if(PIN_2_STATE){tester.state++;DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN2:  ON  OK ");} else {// Failedif(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN2:  Failed ");tester.error_timeout++;}break;// Turn OFFcase TESTER_STATE_PIN2_OFF_TURN:tester.outputs.relay_3     = 0;tester.idx_relay        = 3;ble_srv_update(BLE_SU_RELAY);tester_auto_timeout_set(TESTER_AUTO_TIMEOUT);break;// Offcase TESTER_STATE_PIN2_OFF_TEST:if(!PIN_2_STATE){tester.state++;DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN2:  OFF OK ");} else {// Failedif(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN2:  Failed ");tester.error_timeout++;}break;// ********** PIN 3 test **********// Turn Oncase TESTER_STATE_PIN3_ON_TURN:tester.outputs.triac_1     = 1;tester.idx_triac        = 1;ble_srv_update(BLE_SU_TRIAC);tester_auto_timeout_set(TESTER_AUTO_TIMEOUT);break;// Oncase TESTER_STATE_PIN3_ON_TEST:if(PIN_3_STATE){tester.state++;DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN3:  ON  OK ");} else {// Failedif(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN3:  Failed ");tester.error_timeout++;}break;// Turn Offcase TESTER_STATE_PIN3_OFF_TURN:tester.outputs.triac_1     = 0;tester.idx_triac        = 1;ble_srv_update(BLE_SU_TRIAC);tester_auto_timeout_set(TESTER_AUTO_TIMEOUT);break;// Off    case TESTER_STATE_PIN3_OFF_TEST:    if(!PIN_3_STATE){tester.state++;DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN3:  OFF OK ");} else {// Failedif(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN3:  Failed ");tester.error_timeout++;}break;// ********** PIN 4 test **********// Turn Oncase TESTER_STATE_PIN4_ON_TURN:tester.outputs.triac_2     = 1;tester.idx_triac        = 2;ble_srv_update(BLE_SU_TRIAC);tester_auto_timeout_set(TESTER_AUTO_TIMEOUT);break;// Oncase TESTER_STATE_PIN4_ON_TEST:if(PIN_4_STATE){tester.state++;DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN4:  ON  OK ");} else {// Failedif(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN4:  Failed ");tester.error_timeout++;}break;// Turn Offcase TESTER_STATE_PIN4_OFF_TURN:tester.outputs.triac_2     = 0;tester.idx_triac        = 2;ble_srv_update(BLE_SU_TRIAC);tester_auto_timeout_set(TESTER_AUTO_TIMEOUT);break;// Offcase TESTER_STATE_PIN4_OFF_TEST:if(!PIN_4_STATE){tester.state++;DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN4:  OFF OK ");} else {// Failedif(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN4:  Failed ");tester.error_timeout++;}break;// ********** PIN 7 test **********// Turn Oncase TESTER_STATE_PIN7_ON_TURN:tester.outputs.relay_1     = 1;tester.idx_relay        = 1;ble_srv_update(BLE_SU_RELAY);tester_auto_timeout_set(TESTER_AUTO_TIMEOUT);break;// Oncase TESTER_STATE_PIN7_ON_TEST:if(PIN_7_STATE){tester.state++;DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN7:  ON  OK ");} else {// Failedif(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN7:  Failed ");tester.error_timeout++;}break;// Turn Offcase TESTER_STATE_PIN7_OFF_TURN:tester.outputs.relay_1     = 0;tester.idx_relay        = 1;ble_srv_update(BLE_SU_RELAY);tester_auto_timeout_set(TESTER_AUTO_TIMEOUT);break;// Offcase TESTER_STATE_PIN7_OFF_TEST:if(!PIN_7_STATE){tester.state++;DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN7:  OFF OK ");} else {// Failedif(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN7:  Failed ");tester.error_timeout++;}break;// ********** PIN 8 test **********// Turn Oncase TESTER_STATE_PIN8_ON_TURN:tester.outputs.relay_2     = 1;tester.idx_relay        = 2;ble_srv_update(BLE_SU_RELAY);tester_auto_timeout_set(TESTER_AUTO_TIMEOUT);break;// Oncase TESTER_STATE_PIN8_ON_TEST:if(PIN_8_STATE){tester.state++;DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN8:  ON  OK ");} else {// Failedif(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN8:  Failed ");tester.error_timeout++;}break;// Turn Offcase TESTER_STATE_PIN8_OFF_TURN:tester.outputs.relay_2     = 0;tester.idx_relay        = 2;ble_srv_update(BLE_SU_RELAY);tester_auto_timeout_set(TESTER_AUTO_TIMEOUT);break;// Offcase TESTER_STATE_PIN8_OFF_TEST:if(!PIN_8_STATE){tester.state++;DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN8:  OFF OK ");} else {// Failedif(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN8:  Failed ");tester.error_timeout++;}break;/* ***************************** *     Advance********************************/// PIN 5 - ADCcase TESTER_STATE_PIN5_TEST:if( ((((info_error_t)tester.error != INFO_ERROR_NTC_ROOM)&& \((info_error_t)tester.error != INFO_ERR_NTC_ROOM)) )     && \((tester.ntc >  TESTER_NTC_LIM_MIN) && (tester.ntc < TESTER_NTC_LIM_MAX)) ) {tester.state++;DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN5:      OK %u %u ", tester.error, tester.ntc);tester.error_timeout = 0;} else {if(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN5:  Failed %u %u ", tester.error, tester.ntc);tester.error_timeout++;}break;// PIN 9 - Zero crosscase TESTER_STATE_PIN9_TEST:if((info_error_t)tester.error != INFO_ERR_ZERO_CROSS){tester.state++;DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN9:      OK %u ", tester.error);tester.error_timeout = 0;} else {if(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN9:  Failed %u ", tester.error);tester.error_timeout++;}tester.buzzer_timeout = 0;break;// PIN 10 - Buzzer// Lowcase TESTER_STATE_PIN10_OFF_TEST:if(tester.buzzer_timeout < 3000){while(PIN_10_STATE){tasks_run_critical();if(tester.buzzer_timeout > 3000) break;}if(tester.buzzer_timeout < 3000){DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN10: OFF OK ");tester.state++;tester.buzzer_timeout = 0;tester.error_timeout = 0;}} else {if(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN10: Failed ");tester.error_timeout++;}break;// Highcase TESTER_STATE_PIN10_ON_TEST:if(tester.buzzer_timeout < 3000){while(!PIN_10_STATE){tasks_run_critical();if(tester.buzzer_timeout > 3000) break;}if(tester.buzzer_timeout < 3000){DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN10: ON  OK ");tester.state++;tester.buzzer_timeout = 0;tester.error_timeout = 0;}} else {if(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN10: Failed ");tester.error_timeout++;}break;// PIN 11 - Switch// Turn Offcase TESTER_STATE_PIN11_OFF_TURN:PIN_11_ON;tester_auto_timeout_set(TESTER_AUTO_SW_TIMEOUT);break;// Read the statecase TESTER_STATE_PIN11_OFF_READ:ble_srv_update(BLE_SU_ERROR);tester_auto_timeout_set(TESTER_AUTO_TIMEOUT);break;// Offcase TESTER_STATE_PIN11_OFF_TEST:if(tester.key == 0){tester.state++;DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN11: OFF OK ");tester.error_timeout = 0;} else {if(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN11: Failed ");tester.error_timeout++;}break;// Turn Oncase TESTER_STATE_PIN11_ON_TURN:PIN_11_OFF;tester_auto_timeout_set(TESTER_AUTO_SW_TIMEOUT);break;// Readcase TESTER_STATE_PIN11_ON_READ:ble_srv_update(BLE_SU_ERROR);tester_auto_timeout_set(TESTER_AUTO_TIMEOUT);break;// Oncase TESTER_STATE_PIN11_ON_TEST:if(tester.key){tester.state++;DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN11: ON  OK ");tester.error_timeout = 0;PIN_11_ON;} else {if(tester.error_timeout == TESTER_FAIL_TIMEOUT)DBG_LOG(DEBUG_ACC, "\n\rTESTER: PIN11: Failed ");tester.error_timeout++;}break;case TESTER_STATE_CLEAR_BUSY:tester.status &=~TESTER_FIELD_BUSY;DBG_LOG(DEBUG_ACC, "\n\rTESTER: PASSED ");tester.state++;tester.error_timeout = 0;break;case TESTER_STATE_PASSED:case TESTER_STATE_FAILED:// Stay herebreak;case (TESTER_STATE_PIN2_ON_TURN|0x80):case (TESTER_STATE_PIN2_OFF_TURN|0x80):case (TESTER_STATE_PIN3_ON_TURN|0x80):case (TESTER_STATE_PIN3_OFF_TURN|0x80):case (TESTER_STATE_PIN4_ON_TURN|0x80):case (TESTER_STATE_PIN4_OFF_TURN|0x80):case (TESTER_STATE_PIN7_ON_TURN|0x80):case (TESTER_STATE_PIN7_OFF_TURN|0x80):case (TESTER_STATE_PIN8_ON_TURN|0x80):case (TESTER_STATE_PIN8_OFF_TURN|0x80):case (TESTER_STATE_PIN11_OFF_TURN|0x80):case (TESTER_STATE_PIN11_OFF_READ|0x80):case (TESTER_STATE_PIN11_ON_TURN|0x80):case (TESTER_STATE_PIN11_ON_READ|0x80):if(tester.auto_timeout){if(!(--tester.auto_timeout)){tester.state = (tester.state & 0x7F) + 1;}}break;default:tester.state = 0;break;}}}}// Tester board to PC UART wirte handlingif(tester.timeout) {if(!(--tester.timeout)){// Send that the error or busy no longer existsif(!(tester.status & (TESTER_FIELD_ERROR | TESTER_FIELD_BUSY))) cmd_status(tester.status, tester.mac);}} else {// If error - send it up to the PCif(tester.status & (TESTER_FIELD_ERROR | TESTER_FIELD_BUSY)) {cmd_status(tester.status, tester.mac);tester.timeout = TESTER_UART_TIMEOUT;}}// Error update from the BLEif(tester.update_timeout) {if(!(--tester.update_timeout)){if(tester.ble_paired) ble_srv_list_read_add(BLE_SRV_LIST_TEST);tester.update_timeout = TESTER_UPDATE_TIMEOUT;// If no comunication is on going send the status packetif(!tester.timeout){//cmd_status(tester.status, tester.mac); // ?
            }}}// Board LEDs handlingif(tester.started){// Blueif(tester.ble_paired){if(tester.board == 0x0E){switch(tester.state){case TESTER_STATE_PASSED:case TESTER_STATE_CLEAR_BUSY:LED_RED_OFF;LED_GREEN_ON;LED_BLUE_OFF;break;case TESTER_STATE_PIN2_ON_TEST:case TESTER_STATE_PIN2_OFF_TEST:case TESTER_STATE_PIN3_ON_TEST:case TESTER_STATE_PIN3_OFF_TEST:case TESTER_STATE_PIN4_ON_TEST:case TESTER_STATE_PIN4_OFF_TEST:case TESTER_STATE_PIN7_ON_TEST:case TESTER_STATE_PIN7_OFF_TEST:case TESTER_STATE_PIN8_ON_TEST:case TESTER_STATE_PIN8_OFF_TEST:case TESTER_STATE_PIN5_TEST:case TESTER_STATE_PIN9_TEST:case TESTER_STATE_PIN11_OFF_TEST:case TESTER_STATE_PIN11_ON_TEST:case TESTER_STATE_PIN10_OFF_TEST:case TESTER_STATE_PIN10_ON_TEST:LED_RED_ON;LED_GREEN_OFF;LED_BLUE_ON;break;case (TESTER_STATE_PIN2_ON_TURN):case (TESTER_STATE_PIN2_OFF_TURN):case (TESTER_STATE_PIN3_ON_TURN):case (TESTER_STATE_PIN3_OFF_TURN):case (TESTER_STATE_PIN4_ON_TURN):case (TESTER_STATE_PIN4_OFF_TURN):case (TESTER_STATE_PIN7_ON_TURN):case (TESTER_STATE_PIN7_OFF_TURN):case (TESTER_STATE_PIN8_ON_TURN):case (TESTER_STATE_PIN8_OFF_TURN):case (TESTER_STATE_PIN11_OFF_TURN):case (TESTER_STATE_PIN11_OFF_READ):case (TESTER_STATE_PIN11_ON_TURN):case (TESTER_STATE_PIN11_ON_READ):case (TESTER_STATE_PIN2_ON_TURN|0x80):case (TESTER_STATE_PIN2_OFF_TURN|0x80):case (TESTER_STATE_PIN3_ON_TURN|0x80):case (TESTER_STATE_PIN3_OFF_TURN|0x80):case (TESTER_STATE_PIN4_ON_TURN|0x80):case (TESTER_STATE_PIN4_OFF_TURN|0x80):case (TESTER_STATE_PIN7_ON_TURN|0x80):case (TESTER_STATE_PIN7_OFF_TURN|0x80):case (TESTER_STATE_PIN8_ON_TURN|0x80):case (TESTER_STATE_PIN8_OFF_TURN|0x80):case (TESTER_STATE_PIN11_OFF_TURN|0x80):case (TESTER_STATE_PIN11_OFF_READ|0x80):case (TESTER_STATE_PIN11_ON_TURN|0x80):case (TESTER_STATE_PIN11_ON_READ|0x80):LED_RED_OFF;LED_GREEN_OFF;LED_BLUE_ON;break;case TESTER_STATE_FAILED:default:LED_RED_ON;LED_GREEN_OFF;LED_BLUE_OFF;break;}} else {LED_RED_OFF;LED_GREEN_OFF;LED_BLUE_ON;}// Blue Flashing slow} else if(tester.ble_connected){if(tester.leds_timeout){if(!(--tester.leds_timeout)){tester.leds_timeout = TESTER_LEDS_SLOW_TIMEOUT;if(LED_BLUE_STATE){LED_RED_OFF;LED_GREEN_OFF;LED_BLUE_OFF;} else {LED_RED_OFF;LED_GREEN_OFF;LED_BLUE_ON;}}}// Blue Flashing fast} else {if(tester.state == TESTER_STATE_FAILED){LED_RED_ON;LED_GREEN_OFF;LED_BLUE_OFF;} else {if(tester.leds_timeout){if(!(--tester.leds_timeout)){tester.leds_timeout = TESTER_LEDS_FAST_TIMEOUT;if(LED_BLUE_STATE){LED_RED_OFF;LED_GREEN_OFF;LED_BLUE_OFF;} else {LED_RED_OFF;LED_GREEN_OFF;LED_BLUE_ON;}}}}}// Red} else {if(tester.leds_timeout){if(!(--tester.leds_timeout)){tester.leds_timeout = TESTER_LEDS_TIMEOUT;if(LED_RED_STATE){LED_RED_OFF;LED_GREEN_OFF;LED_BLUE_OFF;} else {LED_RED_ON;LED_GREEN_OFF;LED_BLUE_OFF;}}}}
}

四:调试

这里只测试了BLE输出电平逻辑,LCD ,KEY, Cap sense 等在另一板子上。

4总结 

一般MCU的开发流程..而psoc的开发环境里面有很多用户模块,比如I2C SPI... 这些用户模块一般MCU编写的时候,需要自己写时序,写底层代码,而PSOC已经写好了这些函数,只需调用相应的API函数 就可以,省了写这些code的时间.. 这个是最明显的区别,psoc不用操作底层寄存器,除非你需要改变某个设置;你还可以配置芯片内部模块 。
缺点:psoc芯片价格昂贵。这一颗Cypress芯片需要 10美金,加上外围产品,成本会比ARm芯片贵很多。 这也是中国很少用PSOC的原因吧。

转载于:https://www.cnblogs.com/huangbaobaoi/p/9101759.html

2018.5.28 PSOC第一枪:基于cypress的蓝牙开发相关推荐

  1. 安卓基于BLE的蓝牙开发入门

    BLE蓝牙开发简单入门 BLE背景介绍 引言 BLE简介 Gatt协议以及必备知识 蓝牙开发涉及的API介绍 BLE实战准备 真机调试 权限准备 写两个简单的页面 扫描设备主界面 扫描设备信息界面 实 ...

  2. 【蓝牙】基于Android的蓝牙开发

    Android的蓝牙API来完成的四个必要的主要任务,使用蓝牙进行设备通信,主要包含四个部分:蓝牙设置.搜索设备(配对的或可见的).连接.传输数据. 一. 基础知识 1.蓝牙API 所有的蓝牙API在 ...

  3. 基于fastble的蓝牙开发

    FastBle的Github项目地址在这,大家可以看看:[FastBle - GitHub] https://github.com/Jasonchenlijian/FastBle 它的文档也相对比较完 ...

  4. php蔬菜,基于php+Apache+Mysql开发蔬菜病虫害防治系统

    科技与信息 2018.06 计算机产品与流通 135 基于php+Apache+Mysql开发蔬菜病虫害防治系统 □ 李阳宇 摘要:蔬菜病虫害种类繁多,危害.特征各不相同,对于菜农在防治和诊断上存在着 ...

  5. Alluxio Meetup 2018.10.28北京进行,欢迎交流

    #搜狗如何将Spark Shuffle迁移到上千台Alluxio机器集群,服务知识图谱? #七牛云如何用Alluxio在云端搭建通用深度学习平台? #京东又是如何定制基于普雷斯托的查询平台? 欢迎大家 ...

  6. 2018 1/28随笔

    苏北的天气真的是一天比一天冷,雪一场接着一场,冻得人直接不想动弹. 当前时间是一月二十八号,农历腊月十二,天气晴,自己在阳台喝着茶,无聊,不想打游戏,又不想看书,所以就来水一篇自己最近在干些什么. 那 ...

  7. Vue 第一天学习 ---2018.06.28

    Vue  第一天学习 ---2018.06.28 1.引包 2.学会控制元素.显示数据,基本框架建立 <title>Document</title> <script sr ...

  8. 训练日志 2018.11.28

    并查集.2-SAT.二分图相关内容都看完了,但只做了些并查集.二分图判定.二分图最大匹配的题,其他内容仍需多做些题来验证一下,只剩差分约束和网络流内容没看,考试周快来了,这周先尽量看吧.. 天冷了,这 ...

  9. 秋意浓(2018.9.28)

    秋意浓--2018.9.28 朦胧抬眼瞭, 入目银飘飘. 捕风秋意盛, 观叶便知秋. 注:早起窗前大雾朦胧,观其之抒情

最新文章

  1. Xcode可重用代码块code snippets
  2. 生活很急躁,史前也一样
  3. CentOS下yum安装nginx服务
  4. redis高并发原理_Java中的42行代码中的URL缩短服务— Java(?!)Spring Boot + Redis...
  5. python基础实例-Python 练习实例14
  6. numpy笔记 linalg
  7. 设置mysql的字符编码解决中文乱码问题
  8. graphpad7.04多组比较p值_R语言缺失值处理(MICE/Amelia/missForest/Hmisc/mi)
  9. vue-cli4 无法访问static资源问题
  10. 揭露培训机构以招聘名义变相招生的欺诈套路!【附上企业黑名单】
  11. 二、C++反作弊对抗实战 (进阶篇 —— 10.利用硬件断点 + 结构化异常VEH HOOK与对抗方法)
  12. 万字长文:复盘 8 年副业经历,耗时一周,我总结出了独特的「复利思维复业赚钱法」,不看后悔...
  13. 计科生毕业一年,做了什么?
  14. 请求响应数据?Controler层注解!
  15. IDEA配置注释模板
  16. “以电折水、水电共计”智能仪表助力农业灌溉走上新模式
  17. 华为鸿蒙操作系统有哪些特点和优势?余承东《全场景时代 新体验与新生态》演讲全文
  18. win10打印机清除缓存
  19. 立创EDA专业版,建立自己的元件库
  20. 编程输入年份和月份,输出该月份有多少天。

热门文章

  1. 用soapUI测试webservice
  2. IOS_OC_id ,NSObject, idlt;NSObjectgt;差别
  3. MySQL INFORMATION_SCHEMA 使用
  4. UVA 10608-Friends
  5. Vue入门 ---- vuex
  6. python 装饰器 继承_Python设计模式之装饰器模式
  7. html5手机端三级联动城市选择代码,省市县三级联动(jQuery手机端收货地址选择地区代码)...
  8. 给图片下方加水印_别再看不起美图秀秀啦,想要做长图,批量加水印,用它超级方便...
  9. catia利用宏批量改名的方法_谁有CATIA批量改名的宏程序啊
  10. 代码证年检所需资料_上海注销小规模公司所需材料及流程