芯海传感器信号调理CDS8712开发板 USART测试
[复制链接]
首先测试“CSD8712资料包\FW_CDS8712_V1.zip\FW_CDS8712_V1\FW_CDS8712”工程里包含的串口发送部分。
这个源码里只有使用printf的发送部分,没有接收的。但是“Chipsea.CDS871x_DFP.1.0.1”开发包里有。
源码不做修改编译后下载程序。
使用开发板的1PA11(RX)和PA10(TX)做为串口收发。
调试器是CMSIS-DAP Debugger。
运行后看到有数据输出
然后在看“Chipsea.CDS871x_DFP.1.0.1”开发包里的串口例程
打开“ \Chipsea.CDS871x_DFP.1.0.1\Chipsea.CDS871x_DFP.1.0.1\Boards\Usart\usart_interrupt “这个例程,
参照这个例程,我把串口部分移植到ADC测试例程(“CSD8712资料包\FW_CDS8712_V1.zip\FW_CDS8712_V1\FW_CDS8712”),
上面例程下载跑通后,使用串口助手发送数据,会收到返回的环回数据。
下面是异常现象(悲剧)开始了
之前没有直接下载“ \Chipsea.CDS871x_DFP.1.0.1\Chipsea.CDS871x_DFP.1.0.1\Boards\Usart\usart_interrupt “例程。
一直是在”CSD8712资料包\FW_CDS8712_V1.zip\FW_CDS8712_V1\FW_CDS8712”里折腾,没有什么问题
我想直接跑一下“usart_interrupt “例程,没想到下载后,识别不到SWD口了,换了J-LINK也不行,目前没找到恢复的办法。
下面是能正常测试串口时的代码。
static uint16_t recvData = 0;
static uint8_t recvFlag = 0;
VS_VOID Action_USART_Init (VS_VOID)
{
nvic_config_t nvic_config;
/*串口初始化*/
//usart_initiate();
usart_config_t r_usart_config;
/*使能串口时钟*///
rcc_apb_periph_clock_enable_ctrl(RCC_APBPeriph_USART,ENABLE);
/*波特率选择 */
r_usart_config.usart_rate = 38400;
/*数据长度 */
r_usart_config.data_width = USART_DATA_WIDTH_8;
/*校验使能 */
r_usart_config.usart_parity = DISABLE;
/*停止位 */
r_usart_config.stop_bits = USART_STOP_BIT_1;
/*选择收发模式*/
r_usart_config.usart_mode = USART_MODE_RX|USART_MODE_TX;
/*串口初始化 */
usart_init(&r_usart_config);
// /*复用PB4为RX */
// gpio_mf_config(GPIO_GROUP_B,GPIO_PIN_NUM4,GPIO_MUX_FUNC_2);
// /*复用PB5为TX */
// gpio_mf_config(GPIO_GROUP_B,GPIO_PIN_NUM5,GPIO_MUX_FUNC_4);
/*复用PA11为RX */
gpio_mf_config(GPIO_GROUP_A,GPIO_PIN_NUM11,GPIO_MUX_FUNC_3);
/*复用PA10为TX */
gpio_mf_config(GPIO_GROUP_A,GPIO_PIN_NUM10,GPIO_MUX_FUNC_3);
usart_direction_enable_ctrl(USART_MODE_RX|USART_MODE_TX,ENABLE);
usart_enable_ctrl(ENABLE);
/*串口中断配置*/
usart_interrupt_config(USART_INT_RXNE, ENABLE);
/*USART中断优先级设置为0,即最高 */
/*定时器1中断使能*/
nvic_config.nvic_channel_priority = 0x00;
nvic_config.nvic_enable_flag = ENABLE;
nvic_config.nvic_IRQ_channel = IRQn_USART;
nvic_init(&nvic_config);
// while(1)
// {
// if(recvFlag == 1)
// {
// usart_data_send(recvData);
// recvFlag = 0;
// }
// }
}
VS_VOID Action_USART_RUN (VS_VOID)
{
if(recvFlag == 1)
{
usart_data_send(recvData);
recvFlag = 0;
}
SEQ_AddEvent(Event1);
}
/**
* [url=home.php?mod=space&uid=159083]@brief[/url] USART中断服务函数
*/
void USART_IRQHandler(void)
{
if(usart_flag_status_get(USART_FLAG_RXNE) != RESET)
{
recvData = usart_data_recv();
// printf("recvData=%x\r\n",recvData);
recvFlag = 1;
}
usart_interrupt_flag_clear(USART_INT_RXNE);
usart_flag_clear(USART_FLAG_OVRERRF);
}
|