我使用Da14699开发工具包,sdk版本为10.0.10.118
我想使用hw pwm (HW_TIMER或HW_TIMER2)与PIO1.1或1.6和BLE。
PWM频率设置为1MHz或2MHz。(必须在延长睡眠时间时采取行动)
经过修改PXP_Reporter演示源代码,PWM工作正常,但不能连接BLE。
静态孔隙periph_init(空白)
{
#如果定义CONFIG_RETARGET
# endif
dg_configUSE_SYS_CHARGER == 1
/* USB数据引脚配置*/
hw_gpio_set_pin_function(HW_GPIO_PORT_0, HW_GPIO_PIN_14, HW_GPIO_MODE_INPUT, HW_GPIO_FUNC_USB);
hw_gpio_set_pin_function(HW_GPIO_PORT_0, HW_GPIO_PIN_15, HW_GPIO_MODE_INPUT, HW_GPIO_FUNC_USB);
#endif /* dg_configUSE_SYS_CHARGER */
/ / HW_GPIO_SET_PIN_FUNCTION (LED1);
#如果定义LSU_CLK_Test
hw_gpio_set_pin_function(HW_GPIO_PORT_1, HW_GPIO_PIN_1, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_TIM_PWM);
hw_gpio_pad_latch_enable (HW_GPIO_PORT_1 HW_GPIO_PIN_1);
hw_gpio_set_pin_function(HW_GPIO_PORT_1, HW_GPIO_PIN_6, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_TIM2_PWM);
hw_gpio_pad_latch_enable (HW_GPIO_PORT_1 HW_GPIO_PIN_6);
# endif
}
空白pxp_reporter_task (void * params)
{
int8_t tx_power_level;
int8_t wdog_id;
#如果dg_configSUOTA_SUPPORT
ble_service_t * suota;
# endif
uint16_t name_len;
char name_buf[MAX_NAME_LEN + 1];/* 1字节为'\0'字符*/
/* Scan Response object to be filling with
gap_adv_ad_struct_t * scan_rsp;
/*将pxp_reporter_task注册为watchdog监控的对象*/
wdog_id = sys_watchdog_register(假);
............
.............
#如果定义LSU_CLK_Test
Timer_config CFG = {
.clk_src = HW_TIMER_CLK_SRC_EXT,
.prescaler = 0,
.mode = HW_TIMER_MODE_TIMER,
同学们= {
.direction = HW_TIMER_DIR_UP,
.reload_val = 0,
.free_run = true,
},
.pwm = {
.port = HW_GPIO_PORT_1,
.pin = HW_GPIO_PIN_1,
.pwm_active_in_sleep = true,
.duty_cycle = 8,
傅立叶= 15,
},
};
Timer_config cfg2 = {
.clk_src = HW_TIMER_CLK_SRC_EXT,
.prescaler = 0,
.mode = HW_TIMER_MODE_TIMER,
同学们= {
.direction = HW_TIMER_DIR_UP,
.reload_val = 0,
.free_run = true,
},
.pwm = {
.port = HW_GPIO_PORT_1,
.pin = HW_GPIO_PIN_6,
.pwm_active_in_sleep = true,
.duty_cycle = 8,
傅立叶= 15,
},
};
hw_timer_init (HW_TIMER cfg);
hw_timer_init (HW_TIMER2 &cfg2);
hw_timer_enable (HW_TIMER);
hw_timer_enable (HW_TIMER2);
# endif
current_task = OS_GET_CURRENT_TASK ();
printf (" \ r \ n pxp_reporter_task。\ r \ n”);
(,) {
OS_BASE_TYPE ret __UNUSED;
uint32_t notif;
..........
..........
BLE与HW PWM有什么限制吗?
谢谢你!
李
嗨bojanpotocnik,
HW_TIMER2是由FreeRTOS使用的,所以你不能在你的应用程序中使用。
您使用的是用于OS-TICK的TIMER2。通过改变这个,你会搞砸所有的FreeRTOS。这在我们的文档中也有描述。你可以使用的TIMER2 PWM为例,但不重新配置它。
如果您想使用HW定时器,那么您可以使用timer (aka TIMER1)或TIMER3或TIMER4。只有TIMER1和TIMER2在睡眠中可用。请参阅数据表了解更多信息。
你能不能也在调试模式下运行?你得到什么断言了吗?如果TIMER2被删除,请检查代码是否正常运行?
谢谢,PM_Dialog