久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
關于DDS在stm32單片機上顯示的有關程序
[打印本頁]
作者:
柴科夫斯
時間:
2018-5-9 10:23
標題:
關于DDS在stm32單片機上顯示的有關程序
該程序可以實現在stm32上實現屏幕顯示和鍵盤輸入控制
單片機源程序如下:
#include "stm32f10x.h"
#include "stdio.h"
#include "string.h"
#include "drivers.h"
// dds base freq : 0.9765625HZ
/*------------------Macro Defines----------------------------------*/
#define SYSTEMTICK_PERIOD_MS 10
#define LED_PERIOD 1000
/*------------------------------------------------------------------*/
struct DDS_PARA{
uint8_t wave_type;
uint32_t freq_step;
uint32_t freq;
uint8_t phase;
};
enum PARA_TYPE{ NONE = 0, FREQ = 1, PHASE = 2};
/*------------------------------------------------------------------*/
extern uint8_t usart2_rx_buf[255];
extern uint8_t usart2_frame_end;
__IO uint32_t _localTimeTick_ms = 0;
uint8_t usart_frame_buf[UART_FRAME_LENGTH] = {0};
uint16_t frame_seq = 0;
struct DDS_PARA dds_para_data;
enum PARA_TYPE setting_type = FREQ;
/*------------------------------------------------------------------*/
uint8_t process_data_from_fpga(uint8_t* data_buf, uint8_t data_len);
void lcd_update(void);
uint8_t porcess_keybard_value(UserAckKeyValueType key_value);
void lcd_update_actual_freq(void);
/*------------------------------------------------------------------*/
void SysTick_Handler(void) {
_localTimeTick_ms += SYSTEMTICK_PERIOD_MS;
}
uint32_t local_ticktime() {
return _localTimeTick_ms;
}
bool timeout(uint32_t last_time, uint32_t ms) {
return (bool)((_localTimeTick_ms - last_time) > ms);
}
void flash_led(void)
{
static uint32_t timer_tick;
static uint8_t led_status;
if(timeout( timer_tick, LED_PERIOD))
{
if(led_status == 0)
{
GPIO_ResetBits(RED_LED_GPIO, RED_LED_PIN);
led_status = 1;
}
else
{
GPIO_SetBits(RED_LED_GPIO, RED_LED_PIN);
led_status = 0;
}
timer_tick = local_ticktime();
}
}
void flush_dds_para(void)
{
dds_para_data.freq = 0;
dds_para_data.phase = 0;
setting_type = FREQ;
}
void init_data(void)
{
//frame header
usart_frame_buf[0] = PROTOCOL_UART_FRAME_START_SYMBOL_1;
usart_frame_buf[1] = PROTOCOL_UART_FRAME_START_SYMBOL_2;
usart_frame_buf[2] = 0x90;
usart_frame_buf[3] = 0x07;
//CRC
usart_frame_buf[12] = 0;
usart_frame_buf[13] = 0;
//frame tail
usart_frame_buf[14] = PROTOCOL_UART_FRAME_END_SYMBOL_1;
usart_frame_buf[15] = PROTOCOL_UART_FRAME_END_SYMBOL_2;
flush_dds_para();
LCD_ShowString(50, 20, 16, "DDS SIGNAL GENERTAOR" ,0);
LCD_ShowString(20, 60, 16, "Freq(HZ)(Goal):" ,0);
LCD_ShowString(20, 90, 16, "Freq(HZ)(Fact):" ,0);
LCD_ShowString(266, 90, 16, "." ,0);
LCD_ShowString(20, 120, 16, "Phase(degree):" ,0);
LCD_ShowString(20, 150, 16, "Input data:" ,0);
LCD_ShowString(20, 180, 16, "Setting Type(L-R):" ,0);
LCD_ShowString(200, 180, 16, "FREQ " ,0);
}
void init_drivers(void)
{
rcc_configuration();
GPIO_PinRemapConfig( GPIO_Remap_SWJ_JTAGDisable, ENABLE );
led_init();
init_keyBoard();
uart2_init();
init_lcd();
}
int main(void)
{
uint8_t fpga_ack = 0;
uint8_t resend_times = 0;
uint32_t usart_reack_timeout = 0;
UserAckKeyValueType keyVal;
float dds_step;
init_drivers();
init_data();
while(1)
{
flash_led();
if(usart2_frame_end == 1)
{
if(process_data_from_fpga(usart2_rx_buf, UART_FRAME_LENGTH) == 1)
{
fpga_ack = 0;
lcd_update_actual_freq();
}
memset(usart2_rx_buf, 0, UART_FRAME_LENGTH);
usart2_frame_end = 0;
}
if(fpga_ack == 1)
{
if(timeout(usart_reack_timeout, 2000))
{
resend_times++;
usart2_send_string(usart_frame_buf, UART_FRAME_LENGTH);
usart_reack_timeout = local_ticktime();
}
if(resend_times >= 2)
{
fpga_ack = 0;
resend_times = 0;
}
}
if((keyVal = keyValueToUserAck()) != NOKEY)
{
if(porcess_keybard_value(keyVal))
{
dds_step = (dds_para_data.freq/0.9765625);
dds_para_data.freq_step = dds_step;
if((uint32_t)(dds_step/0.5)/2 == 1)
{
dds_para_data.freq_step++;
}
lcd_update();
frame_seq++;
usart_frame_buf[4] = frame_seq >> 8;
usart_frame_buf[5] = (uint8_t)frame_seq ;
usart_frame_buf[6] = (uint8_t)(dds_para_data.freq_step >> 24);
usart_frame_buf[7] = (uint8_t)(dds_para_data.freq_step >> 16);
usart_frame_buf[8] = (uint8_t)(dds_para_data.freq_step >> 8 );
usart_frame_buf[9] = (uint8_t)dds_para_data.freq_step;
usart_frame_buf[10] = dds_para_data.phase;
usart2_send_string(usart_frame_buf, UART_FRAME_LENGTH);
fpga_ack = 1;
usart_reack_timeout = local_ticktime();
}
}
}
}
uint8_t process_data_from_fpga(uint8_t* data_buf, uint8_t data_len){
uint8_t temp_data_buf[20] = {0};
uint8_t i;
if(data_len > 20)
{
return 0;
}
for(i = 0; i < data_len; i++)
{
temp_data_buf[i] = data_buf[i];
}
switch(temp_data_buf[2])
{
case 0x80: //from fpga
{
if(temp_data_buf[3] == 0x03)
{
if(temp_data_buf[6] == 0xA5)
return 1;
}
}
break;
default: break;
}
return 0;
}
void lcd_update_actual_freq(void)
{
float actual_freq;
actual_freq = dds_para_data.freq_step * 0.9765625;
LCD_ShowNum(170, 90, actual_freq, 12, 16);
LCD_ShowNum(270, 90, (uint32_t)(actual_freq*100)%100, 3, 16);
}
void lcd_update(void)
{
uint32_t updated_freq ;
uint16_t updated_phase;
updated_freq = dds_para_data.freq;
updated_phase = dds_para_data.phase;
LCD_ShowNum(200, 60, updated_freq, 12, 16);
LCD_ShowNum(200, 120, updated_phase, 12, 16);
}
uint8_t porcess_keybard_value(UserAckKeyValueType key_value)
{
static uint32_t temp_value;
if(key_value < 10)
{
temp_value = temp_value*10 + (uint8_t) key_value;
LCD_ShowNum(200, 150, temp_value, 12, 16);
}
if(key_value == KEY_OK)
{
if(setting_type == FREQ)
{
dds_para_data.freq = temp_value;
}
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
DDS波形顯示.rar
(224.84 KB, 下載次數: 25)
2018-5-9 20:16 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
YH8538
時間:
2019-8-7 20:59
好像要
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产专区在线
|
亚洲精品在线看
|
日日噜噜噜夜夜爽爽狠狠视频,
|
国产精品激情
|
一级片在线免费播放
|
中文字幕在线精品
|
日韩网
|
99久久久国产精品免费消防器
|
国产精品久久久久无码av
|
亚洲综合成人网
|
欧美激情在线观看一区二区三区
|
av中文在线播放
|
av在线播放免费
|
91久久国产精品
|
91久久精品一区二区三区
|
少妇无套高潮一二三区
|
欧美h版
|
黑人巨大精品欧美一区二区一视频
|
国产精品国产三级国产aⅴ无密码
|
国产成人福利视频在线观看
|
亚洲一二三区精品
|
欧美精品一区二区免费视频
|
米奇狠狠鲁
|
在线观看视频一区
|
免费视频99
|
亚洲精品综合
|
精久久久
|
一区二区三区电影网
|
欧美一区二区三区
|
九色 在线
|
亚洲色视频
|
欧美电影一区
|
一区二区三区高清不卡
|
在线资源视频
|
日本福利视频免费观看
|
日日骚网
|
国产乱码高清区二区三区在线
|
国产视频第一页
|
精品国产欧美一区二区三区不卡
|
日日夜夜免费精品视频
|
精品福利视频一区二区三区
|